1、redis的过期策略,保持内存的使用率,删除设置了过期时间,并且过期的数据
1、惰性删除,用的时候去判断有没有过期,过期删除
2、定期清除,servercorn执行100ms一次,其中redisdb里面专门存储有过期时间的key,扫 描20key,一个桶如果被扫到,就一定被扫完,扫描到key就删除,最多扫描400个桶
3、如果扫了400个空桶,或者过期数据比例超过10%则循环执行2步
2、redis的淘汰策略,针对没有设置过期时间的key,或者设置了过期时间但是没到期的key,都是有效的数据,内存满的时候,不得已选择去删除一些,删除到新的key能存进去
1、默认策略是novication,能读不能写,报oom
2、共有一下几种策略allkey-lru,volation-lru,allkey-lfu,volation-lfu,ttc,allkeys-random,volation-random,共8中策略,其中allkeys是在所有的key中寻找,volation是在过期的key中寻找,lru是最久没使用的,lfu是使用次数最少的
LRU:最久没使用的,用当前时间减去最后一次访问时间
LFU:使用次数最少的,访问一次+1,会导致去年很火的数据,不会被淘汰,今年一般的数据,被淘汰掉,解决方案是最多是255,如果当前次数5<count<25,越往上越难加,如果小于等于5,访问一次加一次,按照配置的衰减因子衰减(多久没访问减一次)衰减