在redis中有4种方法可以设置过期时间:
expire<key> <ttl>: 设置生存时间为ttl秒
pexpire<key><ttl>: 设置生存时间为 ttl毫秒
expireat <key> <timestamp> : 设置过期时间为timestamp所指定的秒数时间戳.
pexpireat<key><timestamp>: 设置过期时间为timestamp所指定的毫秒数时间戳.
其中timestamp为unix时间戳.
redisDb结构的expires字典保存了数据库中所有键的过期时间.它的数据结构由两部分组成:
1.过期字典的键是一个指针,它指向键空间中的某个键对象.
2.过期字典的值是一个long long类型的整数,它保存的就是键的过期时间.
在redis中有三种不同的删除过期键的策略:
1.惰性删除
2.非惰性删除:a.定时删除 b.定期删除
redis服务器采用的策略是惰性删除和定期删除的组合.
惰性删除由db.c/expireIfNeeded函数实现.
定期删除由redis.c/activeExpireCycle函数实现:每当redis的服务器周期性操作redis.c/serverCron函数执行时, activeExpireCycle函数就会被调用,它在规定时间内,分多次 遍历服务器中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键.