欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > Redis的内存淘汰策略

Redis的内存淘汰策略

2025/2/23 19:37:52 来源:https://blog.csdn.net/weixin_46984703/article/details/140968168  浏览:    关键词:Redis的内存淘汰策略

三种类型

可以将淘汰策略分为三种,一种是对于设置了过期时间的key,一种对于所有key,另一种是内存上限后只允许读不允许写。 

设置了过期时间的key

  1. volatile-lru:淘汰最久未使用的key(最近一段时间访问次数最少)
  2. volatile-lfu:淘汰最少被使用的key
  3. volatile-ttl:淘汰剩余时间最短的key
  4. volatile-random:随机淘汰一个key

所有key

  1. allkeys-lru:淘汰最久未使用的key(最近一段时间访问次数最少)
  2. allkeys-lfu:淘汰最少被使用的key
  3. allkeys-random:随机淘汰一个key

默认使用

  • no-eviction:内存达到上限后只允许读,不能进行写操作

可以通过设置配置文件(redis.conf)修改使用的策略,maxmemory-policy

两种淘汰算法

1.LRU(Least Recently Used)最近最少使用

根据数据最近被访问的时间来移除那些使用次数最少的,最近一段时间使用次数最少的。

2.LFU(Least Frequently Used)最少使用

根据数据被访问的频率来决定哪些数据应该被移除,不关注使用时间,只关注使用频率。

不同的版本

在redis4.0版本之后出现了两种新的算法,是LFU对应的两种淘汰策略。

使用场景

1.读/写比例:

        应用主要是读操作,那么考虑使用 allkeys-lru 或 allkeys-lfu 策略,这些策略会保留频繁访问的数据。如果写操作较多,不希望写操作因内存不足而失败,noeviction 策略更适合。

2.数据的更新频率:

        数据经常更新,使用 volatile-lru 或 volatile-lfu 策略更合适,这些策略会考虑数据的过期时间和访问频率。

3.数据的访问模式:

3.1热点数据:

        应用中存在一些热点数据(即经常被访问的数据),allkeys-lru 或 allkeys-lfu 策略更适合,它们会保留这些热点数据。

3.2均匀访问模式:

        如果数据的访问模式比较均匀,即没有明显的热点数据,那么 volatile-random 或 allkeys-random策略可能更合适。

4.内存限制和性能要求:

内存限制严格:系统内存资源有限,且对性能要求较高,那么 noeviction 策略更适合,可以避免因内存不足而导致的写操作失败。


性能优化:在某些情况下,volatile-ttl策略可以帮助优化性能,会优先淘汰剩余生存时间较短的key,从而确保内存中保留更多的有效数据。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com