【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
目录
相关文章
|
25天前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
33 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
16天前
|
存储 缓存 NoSQL
Redis Quicklist 竟让内存占用狂降50%?
【10月更文挑战第11天】
34 2
|
25天前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
34 2
|
2月前
|
缓存 NoSQL 算法
14)Redis 在内存用完时会怎么办?如何处理已过期的数据?
14)Redis 在内存用完时会怎么办?如何处理已过期的数据?
46 0
|
2月前
|
存储 缓存 NoSQL
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
61 0
|
28天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
65 1
|
28天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
40 2
数据的存储--Redis缓存存储(二)
|
24天前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
57 6
|
29天前
|
缓存 NoSQL 关系型数据库
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
本文深入探讨了Redis缓存的相关知识,包括缓存的概念、使用场景、可能出现的问题(缓存预热、缓存穿透、缓存雪崩、缓存击穿)及其解决方案。
135 0
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿