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之间,应根据具体的应用场景和数据访问模式进行评估和选择。

相关推荐
2401_871696521 天前
mysql行级锁失效的原因排查_检查查询条件与执行计划
jvm·数据库·python
Elastic 中国社区官方博客1 天前
Elasticsearch:快速近似 ES|QL - 第一部分
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索
Dontla1 天前
高基数(High Cardinality)问题介绍(Prometheus、高基数字段、低基数字段)
前端·数据库·prometheus
a9511416421 天前
CSS如何实现元素隐藏不占位_使用display-none完全移除
jvm·数据库·python
SelectDB技术团队1 天前
SelectDB Enterprise 4.0.5:强化安全与治理,构建企业级实时分析与 AI 数据底座
数据库·人工智能·apache doris
一 乐1 天前
医院挂号|基于springboot + vue医院挂号管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·医院挂号管理系统
M--Y1 天前
Redis的主从复制和哨兵
redis·主从复制·哨兵
ego.iblacat1 天前
Redis 核心概念与部署
数据库·redis·缓存
m0_493934531 天前
如何监控AWR数据收集Job_DBA_SCHEDULER_JOBS中的BSLN_MAINTAIN_STATS
jvm·数据库·python
万岳科技系统开发1 天前
商城系统搭建自建平台与入驻第三方平台对比分析
数据库·小程序·架构