对于过期键的判定:
1)检查给定键是否存在于过期字典:如果存在,那么获取键的过期时间。
2)检查当前的UNIX时间戳是否大于键的过期时间:如果是,那么键已过期;否则的话,键为过期。
Redis使用的是惰性删除和定期删除两种策略。
1. 惰性删除
惰性删除是所有的读写Redis的命令在执行前都会对输入键进行检查:
- 如果输入键已经过期,那么将输入键从数据库删除。
- 如果输入键未过期,那么执行实际的命令。
2. 定期删除
定期删除策略每隔一段时间执行一次删除过期键操作,通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响,还有效减少了因为过期键而带来的内存浪费。
具体实现:在规定的时间内,分多次遍历服务器的各个数据库,从一定量的数据库中取出一定量的随机键进行检查,并删除过期键。