过期键删除策略
1.定时删除:在设置键的过期时间的同时,创建一个定时器timer,让定时器在键过期时间来临时,立即执行对键的删除操作。
2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回改建。
3.定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键,至于要删除多少过期键,以及要检查多少个数据库,则有算法决定。
Redis服务器使用的是惰性删除策略和定期删除策略。
六种淘汰策略
-
noeviction: 不删除策略,达到最大内存限制时,如果需要更多内存,直接返回错误信息。
-
allkeys-lru: 所有key通用;优先删除最近最少使用(less recently used,LRU)的key。
-
volatile-lru: 只限于设置expire的部分;优先删除最近最少使用(less used,LRU)的key。
-
allkeys-random: 所有key通用; 随机删除一部分key。
-
volatile-random: 只限于设置了expire的部分;随机删除一部分key。
-
volatile-ttl: 只限于设置expire的部分; 优先删除剩余时间(time to live,TTL)短的key。
使用策略规则:
- 如果数据呈现幂律分布,也就是一部分数据访问频率高,一部分数据访问频率低,则使用allkeys-lru
- 如果数据呈现平等分布,也就是所有的数据访问频率都相同,则使用allkey