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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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内存淘汰策略到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论或者有什么不足之处还望提出。感谢大家!!!


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
存储 监控 算法
Java中的内存管理:理解Garbage Collection机制
本文将深入探讨Java编程语言中的内存管理,着重介绍垃圾回收(Garbage Collection, GC)机制。通过阐述GC的工作原理、常见算法及其在Java中的应用,帮助读者提高程序的性能和稳定性。我们将从基本原理出发,逐步深入到调优实践,为开发者提供一套系统的理解和优化Java应用中内存管理的方法。
|
1月前
|
存储 算法 Java
Go语言的内存管理机制
【10月更文挑战第25天】Go语言的内存管理机制
23 2
|
2月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
41 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
1月前
|
存储 运维 Java
💻Java零基础:深入了解Java内存机制
【10月更文挑战第18天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
32 1
|
2月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
116 1
springboot的缓存和redis缓存,入门级别教程
|
2月前
|
存储 缓存 NoSQL
Redis Quicklist 竟让内存占用狂降50%?
【10月更文挑战第11天】
48 2
|
2月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
64 8
|
2月前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
40 2
|
2月前
|
存储 安全 NoSQL
driftingblues9 - 溢出ASLR(内存地址随机化机制)
driftingblues9 - 溢出ASLR(内存地址随机化机制)
38 1
|
4月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
394 0