欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Redis内存淘汰策略

Redis内存淘汰策略

2024/10/23 15:24:35 来源:https://blog.csdn.net/weixin_58693169/article/details/142900197  浏览:    关键词:Redis内存淘汰策略

简介

Redis使用内存存储数据,在执行每一个命令前,会调用freeMemoryIfNeeded()检测内存是否充足。如果内存不满足加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理存储空间。清理数据的策略称为逐出算法。

注意:逐出数据的过程不是100%能够清理出足够的可使用空间,如果不成功则反复执行。当对所有数据尝试完毕后,如果不能达到内存清理的要求,将出现错误信息。

抛出异常:(error) OOM command not allowed when used memory >'maxmemory'

如何设置Redis内存

Redis是基于内存key-value键值对的内存数据库,我们可以配置redis能使用的最大的内存大小.

通过配置文件修改:

找到redis.windows.conf配置文件,进入修改

Redis内存淘汰策略

当现有内存大于 maxmemory 时,便会触发redis主动淘汰内存方式,通过设置 maxmemory-policy ,有如下几种淘汰方式:

  1. No Eviction(不淘汰策略):当内存不足时,直接返回错误。(Redis默认淘汰策略)
  2. Allkeys-LRU(最近最少使用策略):从所有键中选择最近最少使用的键进行淘汰。(通常使用)
  3. Volatile-LRU(带超时的最近最少使用策略):从设置了过期时间的键中选择最近最少使用的键进行淘汰。
  4. Allkeys-LFU(最不经常使用策略):从所有键中选择最不经常使用的键进行淘汰。
  5. Volatile-LFU(带超时的最不经常使用策略):从设置了过期时间的键中选择最不经常使用的键进行淘汰。
  6. Volatile-TTL(带超时的键的过期时间策略):从设置了过期时间的键中选择剩余过期时间最短的键进行淘汰。
  7. Volatile-Random(带超时的随机键策略):从设置了过期时间的键中随机选择一个键进行淘汰。
  8. Allkeys-Random(随机键策略):从所有键中随机选择一个键进行淘汰。

Redis内存淘汰算法

内存淘汰算法有以下几种:

  • 随机
  • TTL
  • LRU(Least Recently Used,最近最少使用)
  • LFU(leastFrequently Used,最不经常使用)

1.随机算法,就是从数据库中随机淘汰一些keys。

2. TTL算法是从设置了过期时间的keys中获取最早过期的一批keys,进行淘汰。

3.LRU

LRU算法主要是通过key最后访问时间来判定哪些key更适合被淘汰

4.LFU

LFU(Least Frequently Used)表示最不经常使用,它是根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。

LFU算法反映了一个key的热度情况,不会因LRU算法的偶尔一次被访问被误认为是热点数据。

版权声明:

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

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