Redis的数据淘汰策略解读

Redis的内存大小可以通过配置文件redis.conf中的maxmemory参数来进行设置。maxmemory的默认值为0,表示Redis可以使用无限大的内存。如果要限制Redis的最大内存大小,可以将maxmemory设置为一个正整数,表示Redis最多可以使用的内存大小(单位为字节)。

可以通过设置maxmemory-policy参数来定义内存不足时的处理策略。maxmemory-policy的默认值为"noeviction",表示当内存不足时,Redis将拒绝写入新数据。其他可选的策略包括volatile-lru、allkeys-lru、volatile-random、allkeys-random、volatile-ttl和volatile-lfu等。需要根据实际情况调整Redis的内存大小配置,以避免内存不足或浪费。

需要注意的是,数据淘汰过程并不能100%清理出足够的可用内存空间。如果清理失败,则需要重复执行。当尝试了所有的数据后,如果无法满足内存清理要求,将会出现"OOM command not allowed when used memory > maxmemory"的错误信息。

数据淘汰策略 不进行数据淘汰策略 noeviction:这是Redis3.0之后的默认内存淘汰策略。当运行内存超过最大设置内存时,不淘汰任何数据。如果有新的数据写入,将触发OOM错误,但仅进行查询或删除操作时,Redis仍可以正常工作。

进行数据淘汰策略 大致上可以分为四种策略:LRU、LFU、random和ttl。

在设置了过期时间的数据中进行淘汰:

  • volatile-random:随机淘汰设置了过期时间的任意键值。
  • volatile-ttl:优先淘汰较早过期的键值。
  • volatile-lru:这是Redis3.0之前的默认内存淘汰策略,淘汰所有设置了过期时间的键值中最久未使用的键值。
  • volatile-lfu:Redis 4.0后新增的内存淘汰策略,淘汰所有设置了过期时间的键值中最少使用的键值。

在所有数据范围内进行淘汰:

  • allkeys-random:随机淘汰任意键值。
  • allkeys-lru:淘汰整个键值中最久未使用的键值。
  • allkeys-lfu:Redis 4.0后新增的内存淘汰策略,淘汰整个键值中最少使用的键值。

对于拥有1000万条数据的数据库,而Redis只能缓存20万条数据,为了保证Redis中的数据都是热点数据,可以采用allkeys-lru策略,即淘汰最近最少使用的数据。这样保留下来的数据将是经常访问的热点数据。

如果Redis的内存用满了,需要查看Redis的数据淘汰策略。如果是默认配置,当内存用满时,Redis将报错。

在实际使用中,应根据具体的业务需求和数据特性选择适合的淘汰策略。例如,对于一些重要的数据,可以采用noeviction策略以保证数据的完整性;对于一些缓存数据,可以采用volatile-lru策略以保证缓存的有效性。

LRU和LFU的对比 LRU(Least Recently Used):LRU策略基于数据项在过去的访问时间来确定淘汰哪些数据。最近最少使用的数据项将被优先淘汰。LRU的核心思想是,如果一个数据项最近被访问过,那么它在未来可能还会被访问。

LFU(Least Frequently Used):LFU策略基于数据项被访问的频率来确定淘汰哪些数据。访问次数最少的数据项将被优先淘汰。LFU的核心思想是,访问频次较高的数据项可能在未来还会被多次访问,因此应该保留在缓存中。

  • LRU侧重于数据项最近的访问时间,而LFU侧重于数据项的访问频率。
  • LRU易于实现,通常使用双向链表和哈希表。而LFU的实现相对复杂,需要使用最小堆或哈希表等数据结构。

在某些情况下,LFU可能比LRU表现更好,因为它更加关注访问频率。然而,对于某些访问模式,LFU可能会导致命中率较低。因此,在选择LRU和LFU之间,应根据具体的应用场景和数据访问模式进行评估和选择。

相关推荐
暴躁小师兄数据学院6 小时前
【AI大数据工程师特训笔记】第05讲:关联查询
数据库·sql·oracle
倔强的石头_6 小时前
《Kingbase护城河》——跨平台环境下的数据库联调实战
数据库
lzhdim6 小时前
SQL 入门 17:MySQL 数据类型:从字符串到 JSON 的全面解析
数据库·sql·mysql·json
杨云龙UP6 小时前
Oracle RAC / ODA 生产环境指定 PDB 启动 SOP
linux·运维·数据库·oracle
kingwebo'sZone7 小时前
在Cent上安装Mysql 8.0的遇到的问题和解决办法
数据库·mysql·adb
幽络源小助理7 小时前
最新知识付费系统网站源码 PC+H5双端 附安装教程 – 幽络源源码网
大数据·数据库
小白考证进阶中7 小时前
Oracle OCP证书报考&考试全指南
数据库·oracle·oracle ocp·ocp认证·oracle认证·甲骨文认证·oracle ocp题库
Leon-Ning Liu8 小时前
【真实经验分享】 ORA-600 [qesmaGetTblSeg1]
数据库·oracle
与数据交流的路上8 小时前
MySQL 优化 -- 相关
数据库·mysql
Rooting++8 小时前
为什么mysql的表字段的collation会自动变
数据库·mysql