Loading

Redis淘汰策略

Redis过期策略有几种?

Redis中提供八种过期策略,默认是noeviction,即不删除任何数据,当内存不足时会直接报错。可以在Redis的配置文件中进行设置。

  • noeviction:不淘汰任何key,但是内存满时不允许写入新数据,默认就是这种策略。
  • volatile-ttl: 对设置了TTL的key,比较key的剩余TTL值,TTL越小越先被淘汰。
  • allkeys-random:对全体key随机进行淘汰。
  • volatile-random:对设置了TTL的key,随机进行淘汰。
  • allkeys-lru:对全体key,基于LRU算法进行淘汰。
  • volatile-lru:对设置了TTL的key,基于LRU算法进行淘汰。
  • allkeys-lfu:对全体key,基于LFU算法进行淘汰。
  • volatile-lfu:对设置了TTL的key,基于LFU算法进行淘汰。
    这里面有两个非常重要的概念,一个是LRU,另外一个是LFU。LRU的意思是最近最少使用,通过当前时间减去最后一次访问时间来计算一个值,该值越大,则淘汰优先级越高。LFU的意思是最少频率使用,它会统计每个key的访问频率,值越小,则淘汰优先级越高。
    在项目中,我们可以设置为allkeys-lru,即挑选最近最少使用的数据进行淘汰,这样可以保留一些经常访问的key在Redis中。
    如果项目中涉及到置顶操作,可以设置为volatile-lru,置顶的缓存数据不指定过期时间。

如果数据库有1000万条数据,而Redis只能缓存20万条数据,如何保证Redis中都是热点数据?

可以使用allkeys-lru(挑选最近最少使用的数据淘汰)淘汰策略,这样留下来的都是经常访问的热点数据。

当Redis的内存用完了会发生什么?

主要取决于数据淘汰策略。如果是默认的配置(noeviction),Redis会直接报错,因为无法删除任何数据以腾出内存空间。

posted @ 2024-04-26 10:39  worshipone  阅读(72)  评论(0)    收藏  举报