一、Redis的过期策略和内存淘汰机制
1、内存过期策略
1. 对redis中的key设置了过期时间,执行的过期策略是:定期删除+惰性删除
定期删除:每100ms随机抽取一批数据进行检查,如果符合过期时间则删除key。(如果检查所有key那直接卡死了)
惰性删除:获取key的时候检查key是否过期。
2. 为什么不用定时删除:对每个key做定时的话,太耗费cpu了。
3. 定期删除+惰性删除 会产生的问题:如果某些key一直没被随机检查到,也没被访问过,此时既不会触发定期删除也不会触发惰性删除,key就死在里面了,导致内存越来越高。此时使用内存淘汰机制:
2、内存淘汰机制
1. 缓存淘汰算法:FIFO、LFU(最近最少使用)、LRU(最久未使用)
2. redis.conf中有一行配置: maxmemory-policy allkeys-lru
allkeys-lru:内存满了时,用LRU算法清理最久没使用的key;
allkeys-random:随机删,不如LRU;
volatile-lru:设置了过期时间的key使用LRU;
noeviction:(驱逐) 内存不够写入时直接报错