【Redis从头学-10】分分钟入门Redis内存淘汰机制

简介: 【Redis从头学-10】分分钟入门Redis内存淘汰机制

🌟前言


在上一篇学习了Redis的过期Key删除策略,此篇文章主要学习Redis引入内存淘汰机制,从而解决Redis中内存不足的问题,提高Redis的性能。有需要看上一篇文章内容的可以前往专栏查看。


428b12a51efcc12a0015a8e2ef3b43fc_d62372bee9714dbda6a7c63dd61768e3.png


🌟概述


内存淘汰策略:Redis中的运行内存超过最大内存(maxmemory)后,由其内存淘汰策略(maxmemory-policy)来控制内存的回收。


重要配置项


  • maxmeory-最大内存,如果配置为0,在64位系统下则表示无最大内存限制,在32位系统下则表示最大内存限制为 3 GB
maxmemory 0
或者通过命令
config set maxmemory 0


  • maxmemory-policy-内存淘汰策略


maxmemory-policy 策略名称
或者通过命令
config set maxmemory-policy 策略名称


八大内存淘汰策略


淘汰策略 描述
noeviction 不淘汰策略,当内存不足时新写入操作会报错
allkeys-lru 最近最少使用策略,从所有键中选择最近最少使用的键进行淘汰
volatile-lru 带过期时间的最近最少使用策略,只在设置了过期时间的键中选择最近最少使用的键进行淘汰
allkeys-random 随机淘汰策略,随机选择一个键进行淘汰,释放内存空间
volatile-random 带过期时间的随机淘汰策略,只在设置了过期时间的键中随机选择一个键进行淘汰
volatile-ttl 带过期时间的TTL策略,只在设置了过期时间的键中选择剩余过期时间最短的键进行淘汰
volatile-lfu 带过期时间的最不经常使用策略,只在设置了过期时间的键中选择访问频率最低的键进行淘汰
allkeys-lfu 最不经常使用策略,从所有键中选择访问频率最低的键进行淘汰


🌟内存淘汰算法


LRU-最久未使用算法

传统实现:传统实现中,采用哈希表+双向链表进行缓存维护。如果缓存被命中则放到链表头结点,淘汰时淘汰尾部节点。


Redis实现:因为传统实现,存储链表需要空间以及指针的移动影响性能,在redis中采用近似LRU算法。Redis中设计了一个全局时钟和局部时钟。全局时钟(lrulock)为redis共享时钟,可以理解为系统时间戳;而局部时钟为独有时钟(key最近被访问时的系统时间戳)。通过随机取样结合时钟时间差来淘汰内存。


LFU-最近使用频率最少

因为LRU只关心缓存的访问时间,并且具有随机性。这样有时会导致经常被访问的Key被淘汰,Redis引入了LFU算法。通过访问时间以及访问次数来进行内存淘汰。优先淘汰访问次数少的key,如果访问次数相同则根据访问时间差进行淘汰。



🌟Key删除策略与内存淘汰策略的区别



Key删除策略
内存淘汰策略
描述 在Redis中设置Key的过期时间,并设置相应的过期处理策略。 当Redis内存使用达到限制或超过可用内存时,选择淘汰哪些数据。
目的 自动删除过期的Key及其对应的数据。 释放内存空间,避免Redis因内存不足而发生错误或宕机。
应用场景 需要精确控制Key的过期时间以及及时删除过期Key的场景。 在内存不足时清理一部分数据以腾出空间的场景。


🌟写在最后


此文对Redis的8种内存策略进行了总结,简要概述了Redis中使用的LRU和LFU淘汰算法以及对redis的过期key进行了对比,来帮助大家更好的理解Redis内存淘汰机制!


有关于Redis中过期KEY内存淘汰策略到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论或者有什么不足之处还望提出。感谢大家!!!


目录
相关文章
|
运维 NoSQL 测试技术
Redis:内存陡增100%深度复盘
本文深度分析了Redis内存陡增100%的一些细节和解决方案。
500 1
Redis:内存陡增100%深度复盘
|
5月前
|
存储 缓存 NoSQL
工作 10 年!Redis 内存淘汰策略 LRU 和传统 LRU 差异,还傻傻分不清
小富带你深入解析Redis内存淘汰机制:LRU与LFU算法原理、实现方式及核心区别。揭秘Redis为何采用“近似LRU”,LFU如何解决频率老化问题,并结合实际场景教你如何选择合适策略,提升缓存命中率。
673 3
|
8月前
|
存储 监控 NoSQL
流量洪峰应对术:Redis持久化策略与内存压测避坑指南
本文深入解析Redis持久化策略与内存优化技巧,涵盖RDB快照机制、AOF重写原理及混合持久化实践。通过实测数据揭示bgsave内存翻倍风险、Hash结构内存节省方案,并提供高并发场景下的主从复制冲突解决策略。结合压测工具链构建与故障恢复演练,总结出生产环境最佳实践清单。
322 9
|
9月前
|
缓存 NoSQL 算法
Redis数据库的键值过期和删除机制
我们需要注意的是,虽然Redis提供了这么多高级的缓存机制,但在使用过程中,必须理解应用的特性,选择合适的缓存策略,才能最大化Redis的性能。因此,在设计和实施应用程序时,理解应用的数据访问模式,以及这些模式如何与Redis的缓存机制相互作用,尤为重要。
301 24
|
10月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
NoSQL API Redis
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描
通过上述步骤,可以在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描。利用LevelDB的迭代器,可以高效地遍历和处理数据库中的大量键值对。该实现方法不仅简单易懂,还具有良好的性能和扩展性,希望能为您的开发工作提供实用的指导和帮助。
225 7
|
存储 NoSQL Redis
Redis 内存优化方式
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82876649 ...
1626 0
|
9月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
4月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
5月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
274 1
Redis专题-实战篇二-商户查询缓存