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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【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%的一些细节和解决方案。
388 1
Redis:内存陡增100%深度复盘
|
3月前
|
存储 缓存 NoSQL
工作 10 年!Redis 内存淘汰策略 LRU 和传统 LRU 差异,还傻傻分不清
小富带你深入解析Redis内存淘汰机制:LRU与LFU算法原理、实现方式及核心区别。揭秘Redis为何采用“近似LRU”,LFU如何解决频率老化问题,并结合实际场景教你如何选择合适策略,提升缓存命中率。
406 3
|
8月前
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
1528 0
|
6月前
|
存储 监控 NoSQL
流量洪峰应对术:Redis持久化策略与内存压测避坑指南
本文深入解析Redis持久化策略与内存优化技巧,涵盖RDB快照机制、AOF重写原理及混合持久化实践。通过实测数据揭示bgsave内存翻倍风险、Hash结构内存节省方案,并提供高并发场景下的主从复制冲突解决策略。结合压测工具链构建与故障恢复演练,总结出生产环境最佳实践清单。
193 9
|
8月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
NoSQL 算法 Redis
redis内存淘汰策略
Redis支持8种内存淘汰策略,包括noeviction、volatile-ttl、allkeys-random、volatile-random、allkeys-lru、volatile-lru、allkeys-lfu和volatile-lfu。这些策略分别针对所有键或仅设置TTL的键,采用随机、LRU(最近最久未使用)或LFU(最少频率使用)等算法进行淘汰。
336 5
|
5月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
1802 0
|
5月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
522 1
|
5月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
471 0