Redis中在数据过期的之后,对应的两种删除方式
1.惰性删除:
设置了key的过期时间之后我们不再去管他,当需要这个key时,我们在检查是否过期,如果过期就删除,反之返回该key
优点:对CUP友好,很多用不到的key不需要浪费时间进行过期检查
缺点:对内存不友好,如果一个key已经过期,但是一直没有使用,那么该key就会一直存在内存中,内存永远不会释放
2.定期删除:
每隔一段时间,就对一些key进行检查,删除里面过期的key
定期清理有SLOW模式和Fast模式,SLOW模式是定时任务,执行频率默认为10hz,每次不超过25ms,可以通过修改配置文件来调整,FASR模式执行频率不固定,但是每次间隔不少于2ms,耗时不超过1ms
优点:可以通过限制删除操作执行的时长和频率减少删除操作对CPU的影响,也能有效释放过期键占用的内存
缺点:难以确定删除操作的时长和频率。
Redis中的过期删除策略:惰性删除+定时删除两种混合使用
当数据的量太大,导致缓存占满的时候,新的数据来了之后对应的Redis有自己的淘汰策略
其中Redis默认的是当内存占满之后,不能再添加新数据。
用的比较多的是LRU和LFU
LRU:最近最少使用。用当前时间减去最后一次访问时间,这个值越大淘汰优先越高
LFU:最少频率使用。会统计每个key的访问频率,值越少淘汰优先级越高
1.如果业务有明显的冷热数据区分,优先使用allkeys-lru策略。充分利用LRU算法的优势,把最近最常访问的数据留下缓存中,lfu按照频率并不能准确的描述出数据的访问情况
2.如果业务中数据访问的频率差别不大,没有明显冷热数据区分,建议使用allkeys-random,随机选择淘汰。
3.如果业务中有其他置顶需求,可以使用volatile-lru策略,同时置顶数据不设置过期时间
4.如果业务中有短时高频访问的数据可以使用LFU