论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
阿里口试让聊一聊Redis 的内存淘汰(驱逐)策略 ...
阿里口试让聊一聊Redis 的内存淘汰(驱逐)策略
前进之路
论坛元老
|
2024-9-23 14:43:52
|
显示全部楼层
|
阅读模式
楼主
主题
1687
|
帖子
1687
|
积分
5061
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
大家好,我是 V 哥,粉丝小A口试阿里,说被问到 Redis 的内存淘汰策略的问题,整理这个笔记给他参考,也分享给大家,如果你遇到这个问题,会怎么答复呢?
Redis 的内存淘汰策略是指当Redis的内存使用量达到设定的上限时,决定哪些数据应该被移除以便为新数据腾出空间的规则。Redis 提供了多种内存淘汰策略,可以通过配置文件中的 maxmemory-policy 指令来设置。以下是 Redis 支持的主要内存淘汰策略:
noeviction
:这是默认策略,当内存使用达到限制时,Redis 会拒绝新的写入操纵,并返回错误,但不会淘汰任何数据。
allkeys-lru
:在所有键中,基于最近最少使用(LRU)算法淘汰数据。Redis 会维护一个近似的 LRU 列表,并不保证完全精确,但是对大多数使用场景来说是富足的。
allkeys-lfu
:在所有键中,基于最少频率使用(LFU)算法淘汰数据。LFU 算法会跟踪每个键的访问频率,并淘汰访问频率最低的键。
volatile-lru
:仅在设置了逾期时间的键中,基于 LRU 算法淘汰数据。
volatile-lfu
:仅在设置了逾期时间的键中,基于 LFU 算法淘汰数据。
volatile-random
:在设置了逾期时间的键中随机选择淘汰。
allkeys-random
:在所有键中随机选择淘汰。
volatile-ttl
:在设置了逾期时间的键中,淘汰那些 TTL(Time To Live)值最小的键,也就是即将逾期的键。
以上是8种差异的淘汰策略,选择哪种淘汰策略取决于具体的使用场景和业务需求。比方,如果你盼望 Redis 作为缓存使用,而且缓存的数据大多是临时性的,那么可能会选择 allkeys-lru 或 volatile-lru。如果你的应用中有明白的热点数据,可能会选择 allkeys-lfu 或 volatile-lfu 来确保热点数据不会被轻易淘汰。
Redis 还提供了一些工具和命令来资助监控和优化内存使用,比方 INFO memory 命令可以查看内存使用情况,CONFIG SET maxmemory 可以动态调整内存上限。
在 Redis 4.0 版本后引入了 MEMORY 命令,可以更细致地管理和分析内存使用情况。比方,MEMORY USAGE 可以估算键值对的内存使用量,MEMORY STATS 可以显示内存使用的详细信息。
Redis 的内存淘汰是在后台异步进行的,因此纵然达到了内存上限,也不会立即淘汰数据,而是在新的写入操纵发生时根据配置的策略进行淘汰。
noeviction
noeviction 是 Redis 默认的内存淘汰策略。当 Redis 的内存使用量达到 maxmemory 配置的限制时,如果尝试执行可能导致更多内存使用的命令(如 SET、LPUSH、SADD 等),Redis 将返回错误,而不是淘汰任何现有的键值对。
在以下应用场景中可以使用
数据保存
:如果你的应用场景中,每个数据项都非常重要,不能丢失,那么 noeviction 策略可以确保纵然在高内存使用的情况下,数据也不会被自动淘汰。
内存富足的环境
:如果你的服务器有富足的内存,大概 Redis 实例被限制在一个相对较小的数据集上,那么使用 noeviction 策略可以制止复杂的淘汰逻辑,简化内存管理。
消息队列
:在某些使用 Redis 作为消息队列的场景中,可能会盼望确保所有消息都能被处理,而不是在内存压力下丢失消息。
缓存预热
:在缓存预热阶段,可能会盼望保持缓存数据的完整性,直到缓存稳固后再根据实际访问模式进行淘汰。
怎么用
配置文件设置
:在 Redis 配置文件 redis.conf 中,可以通过设置 maxmemory-policy noeviction 来启用 noeviction 策略。
maxmemory-policy noeviction
复制代码
运行时设置
:也可以在 Redis 运行时使用 CONFIG SET 命令来动态更改内存淘汰策略。
127.0.0.1:6379> CONFIG SET maxmemory-policy noeviction
复制代码
命令行设置
:如果你使用的是 Redis 命令行工具,也可以在启动 Redis 服务时通过命令行参数设置。
redis-server --maxmemory-policy noeviction
复制代码
小结一下
当设置为 noeviction 时,Redis 会记录内存使用量,但不会主动淘汰任何键值对。
如果内存使用量达到限制,Redis 会拒绝那些可能会增加内存使用的命令,并返回错误信息,如 (error)OOM command not allowed when used memory>'maxmemory'。
这种策略下,只有当客户端显式地删除键值对或键值对逾期时,内存才会被释放。
由于不自动淘汰数据,使用 noeviction 策略时需要更加审慎地监控内存使用情况,并确保有富足的内存空间来处理数据的增长。
敲黑板啦,注意事项
使用 noeviction 策略时,需要确保服务器有富足的内存来处理数据的增长,否则 Redis 可能会因为内存不敷而无法处理新的写入哀求。
在某些情况下,如果 Redis 长时间无法处理写入哀求,可能会导致客户端操纵超时或错误,影响应用步伐的正常运行。
如果你的应用可以容忍数据的丢失,大概有其他机制来处理数据淘汰(如定期清理旧数据),那么可以考虑使用其他淘汰策略来更有效地管理内存。
allkeys-lru
allkeys-lru 是 Redis 的一种内存淘汰策略,全称为 "all keys least recently used"。这种策略会在所有键中,包罗那些没有设置逾期时间的键,基于最近最少使用算法(LRU)来淘汰数据。
得当的应用场景
缓存应用
:在缓存场景中,通常需要保存最近被访问的数据,以便快速响应后续的读取哀求。allkeys-lru 策略可以确保缓存中的数据是最近被访问的,从而提高缓存服从。
数据访问模式匀称
:如果你的应用中所有数据的访问模式相对匀称,没有特殊明显的热点数据,那么 allkeys-lru 可以作为一个合理的选择,因为它会淘汰最不活泼的数据。
数据替换
:在某些应用中,可能需要定期替换旧数据以保持数据的新鲜度,allkeys-lru 策略可以资助实现这一点。
内存限制严酷
:在内存使用有严酷限制的环境中,allkeys-lru 可以作为一种自动的数据淘汰机制,以确保内存使用不会超过设定的限制。
怎么用
配置文件设置
:在 Redis 配置文件 redis.conf 中,可以通过设置 maxmemory-policy allkeys-lru 来启用 allkeys-lru 策略。
maxmemory-policy allkeys-lru
复制代码
运行时设置
:也可以在 Redis 运行时使用 CONFIG SET 命令来动态更改内存淘汰策略。
127.0.0.1:6379> CONFIG SET maxmemory-policy allkeys-lru
复制代码
命令行设置
:如果你使用的是 Redis 命令行工具,也可以在启动 Redis 服务时通过命令行参数设置。
redis-server --maxmemory-policy allkeys-lru
复制代码
小结一下
LRU 算法
:最近最少使用(LRU)是一种常见的页面置换算法,它基于这样一个假设:如果数据最近被访问过,那么将来被访问的几率也更高。LRU 算法会跟踪每个数据项的访问时间,并在需要淘汰数据时选择最久未被访问的数据。
淘汰过程
:当 Redis 的内存使用量达到 maxmemory 限制时,Redis 会根据 LRU 算法淘汰最久未被访问的键值对,直到内存使用量降到限制以下。
近似实现
:Redis 实现的 LRU 算法是一个近似版本,它通过定期查抄一组随机键,并淘汰其中最久未被访问的键来工作。这样可以在不牺牲太多性能的情况下,近似地实现 LRU 算法。
配置样本巨细
:Redis 允许你通过 maxmemory-samples 配置来调整用于淘汰决策的键样本巨细。增加样本巨细可以提高淘汰决策的准确性,但可能会增加 CPU 的使用率。
敲黑板:注意的地方
数据丢失
:使用 allkeys-lru 策略时,需要意识到一些最近没有被访问的数据可能会被自动淘汰,这可能导致数据丢失。
性能考虑
:虽然 LRU 算法可以提高缓存命中率,但 Redis 需要维护额外的访问时间信息,这可能会对性能产生一定影响。
监控
:建议监控 Redis 的内存使用情况和淘汰事件,以确保系统按预期工作,并及时调整策略或增加内存资源。
业务适配
:在决定使用 allkeys-lru 策略之前,应考虑业务需求和数据访问模式,确保该策略与业务目标一致。
allkeys-lfu
allkeys-lfu 是 Redis 的一种内存淘汰策略,全称为 "all keys least frequently used"。这种策略会在所有键中,包罗那些没有设置逾期时间的键,基于最少频率使用算法(LFU)来淘汰数据。
得当用的应用场景
访问模式不匀称
:在数据访问模式不匀称的情况下,某些键可能被频繁访问,而另一些键则很少被访问。allkeys-lfu 策略可以确保经常访问的键不会被轻易淘汰。
热点数据保存
:如果你的应用中有热点数据,即那些被频繁访问的数据,使用 allkeys-lfu 策略可以确保这些热点数据不会因为最近最少使用算法而被误淘汰。
数据重要性
:在某些应用中,数据的重要性与其被访问的频率成正比。使用 allkeys-lfu 策略可以保存那些被认为更重要的数据。
制止数据抖动
:在一些实时性要求高的应用中,如推荐系统或实时分析系统,使用 allkeys-lfu 策略可以淘汰因为数据被淘汰而导致的抖动。
怎么用
配置文件设置
:在 Redis 配置文件 redis.conf 中,可以通过设置 maxmemory-policy allkeys-lfu 来启用 allkeys-lfu 策略。
maxmemory-policy allkeys-lfu
复制代码
运行时设置
:也可以在 Redis 运行时使用 CONFIG SET 命令来动态更改内存淘汰策略。
127.0.0.1:6379> CONFIG SET maxmemory-policy allkeys-lfu
复制代码
命令行设置
:如果你使用的是 Redis 命令行工具,也可以在启动 Redis 服务时通过命令行参数设置。
redis-server --maxmemory-policy allkeys-lfu
复制代码
小结一下
LFU 算法
:最少频率使用(LFU)是一种页面置换算法,它基于数据项的访问频率来淘汰数据。LFU 算法会跟踪每个数据项的访问次数,并在需要淘汰数据时选择访问次数最少的数据。
淘汰过程
:当 Redis 的内存使用量达到 maxmemory 限制时,Redis 会根据 LFU 算法淘汰访问次数最少的键值对,直到内存使用量降到限制以下。
近似实现
:Redis 实现的 LFU 算法是一个近似版本,它通过维护一个计数器来跟踪每个键的访问频率,并在需要淘汰数据时选择访问频率最低的键。
配置频率衰减
:Redis 允许通过 lfu-decay-time 配置项来设置访问频率的衰减时间,这有助于平衡最近访问频率和恒久访问频率的重要性。
敲黑板:注意事项
数据淘汰
:使用 allkeys-lfu 策略时,需要意识到那些访问频率较低的数据可能会被自动淘汰,这可能导致某些数据的丢失。
性能考虑
:虽然 LFU 算法可以保存重要的热点数据,但 Redis 需要维护额外的访问计数器,这可能会对性能产生一定影响。
监控
:建议监控 Redis 的内存使用情况和淘汰事件,以确保系统按预期工作,并及时调整策略或增加内存资源。
业务适配
:在决定使用 allkeys-lfu 策略之前,应考虑业务需求和数据访问模式,确保该策略与业务目标一致。
算法精度
:Redis 的 LFU 实现是一个近似算法,它通过定期查抄一组随机键,并淘汰其中访问频率最低的键来工作。这样可以在不牺牲太多性能的情况下,近似地实现 LFU 算法。
volatile-lru
volatile-lru 是 Redis 的一种内存淘汰策略,全称为 "volatile keys least recently used"。这种策略仅针对设置了逾期时间的键,基于最近最少使用算法(LRU)来淘汰数据。
得当的应用场景
缓存与逾期数据
:在缓存数据时,通常会为缓存项设置一个逾期时间。volatile-lru 策略可以确保在内存不敷时,最近最少被使用的逾期键首先被移除。
临时数据存储
:对于需要临时存储的数据,如会话信息或临时计算结果,这些数据通常有明白的逾期时间。使用 volatile-lru 策略可以有效地管理这些临时数据。
热点数据掩护
:如果你盼望掩护那些没有设置逾期时间的热点数据不被误淘汰,volatile-lru 策略可以确保只有那些即将逾期的数据才会被考虑淘汰。
数据时效性
:在数据具有较强时效性的场景中,如消息文章或实时数据,使用 volatile-lru 策略可以确保旧数据在内存不敷时被优先淘汰。
怎么用
配置文件设置
:在 Redis 配置文件 redis.conf 中,可以通过设置 maxmemory-policy volatile-lru 来启用 volatile-lru 策略。
maxmemory-policy volatile-lru
复制代码
运行时设置
:也可以在 Redis 运行时使用 CONFIG SET 命令来动态更改内存淘汰策略。
127.0.0.1:6379> CONFIG SET maxmemory-policy volatile-lru
复制代码
命令行设置
:如果你使用的是 Redis 命令行工具,也可以在启动 Redis 服务时通过命令行参数设置。
redis-server --maxmemory-policy volatile-lru
复制代码
小结一下
LRU 算法
:最近最少使用(LRU)是一种常见的页面置换算法,它基于这样一个假设:如果数据最近被访问过,那么将来被访问的几率也更高。LRU 算法会跟踪每个数据项的访问时间,并在需要淘汰数据时选择最久未被访问的数据。
淘汰过程
:当 Redis 的内存使用量达到 maxmemory 限制时,Redis 会根据 LRU 算法淘汰最久未被访问的设置了逾期时间的键值对,直到内存使用量降到限制以下。
近似实现
:Redis 实现的 LRU 算法是一个近似版本,它通过定期查抄一组随机键,并淘汰其中最久未被访问的键来工作。这样可以在不牺牲太多性能的情况下,近似地实现 LRU 算法。
配置样本巨细
:Redis 允许你通过 maxmemory-samples 配置来调整用于淘汰决策的键样本巨细。增加样本巨细可以提高淘汰决策的准确性,但可能会增加 CPU 的使用率。
duangduangduang 注意一下
数据淘汰
:使用 volatile-lru 策略时,需要意识到那些最近没有被访问且即将逾期的数据可能会被自动淘汰,这可能导致数据丢失。
性能考虑
:虽然 LRU 算法可以提高缓存命中率,但 Redis 需要维护额外的访问时间信息,这可能会对性能产生一定影响。
监控
:建议监控 Redis 的内存使用情况和淘汰事件,以确保系统按预期工作,并及时调整策略或增加内存资源。
业务适配
:在决定使用 volatile-lru 策略之前,应考虑业务需求和数据访问模式,确保该策略与业务目标一致。
数据掩护
:如果你的应用中有重要的数据没有设置逾期时间,需要注意 volatile-lru 策略不会淘汰这些数据,从而可以掩护这些数据不被误淘汰。
volatile-lfu
volatile-lfu 是 Redis 的一种内存淘汰策略,全称为 "volatile keys least frequently used"。这种策略仅针对设置了逾期时间的键,基于最少频率使用算法(LFU)来淘汰数据。
得当的应用场景
缓存与频率限制
:在缓存数据时,如果某些数据项被访问的频率非常低,纵然它们最近被访问过,也可能不是很重要。volatile-lfu 策略可以确保这些不常访问的键被优先淘汰。
临时数据存储
:对于有明白逾期时间的临时数据,如用户会话或缓存的API响应,volatile-lfu 策略可以在内存不敷时,根据访问频率来淘汰这些临时数据。
数据时效性与访问频率
:在数据具有较强时效性且访问频率不匀称的场景中,volatile-lfu 策略可以团结时效性和访问频率来决定命据的保存优先级。
热点数据与临时数据的平衡
:如果你盼望掩护那些频繁访问的临时数据不被轻易淘汰,同时淘汰那些不常访问的临时数据,volatile-lfu 策略可以实现这种平衡。
怎么用
配置文件设置
:在 Redis 配置文件 redis.conf 中,可以通过设置 maxmemory-policy volatile-lfu 来启用 volatile-lfu 策略。
maxmemory-policy volatile-lfu
复制代码
运行时设置
:也可以在 Redis 运行时使用 CONFIG SET 命令来动态更改内存淘汰策略。
127.0.0.1:6379> CONFIG SET maxmemory-policy volatile-lfu
复制代码
命令行设置
:如果你使用的是 Redis 命令行工具,也可以在启动 Redis 服务时通过命令行参数设置。
redis-server --maxmemory-policy volatile-lfu
复制代码
小结一下
LFU 算法
:最少频率使用(LFU)是一种页面置换算法,它基于数据项的访问频率来淘汰数据。LFU 算法会跟踪每个数据项的访问次数,并在需要淘汰数据时选择访问次数最少的数据。
淘汰过程
:当 Redis 的内存使用量达到 maxmemory 限制时,Redis 会根据 LFU 算法淘汰设置了逾期时间但访问次数最少的键值对,直到内存使用量降到限制以下。
近似实现
:Redis 实现的 LFU 算法是一个近似版本,它通过维护一个计数器来跟踪每个键的访问频率,并在需要淘汰数据时选择访问频率最低的键。
配置频率衰减
:Redis 允许通过 lfu-decay-time 配置项来设置访问频率的衰减时间,这有助于平衡最近访问频率和恒久访问频率的重要性。
注意 注意
数据淘汰
:使用 volatile-lfu 策略时,需要意识到那些访问频率较低且即将逾期的数据可能会被自动淘汰,这可能导致数据丢失。
性能考虑
:虽然 LFU 算法可以保存重要的热点数据,但 Redis 需要维护额外的访问计数器,这可能会对性能产生一定影响。
监控
:建议监控 Redis 的内存使用情况和淘汰事件,以确保系统按预期工作,并及时调整策略或增加内存资源。
业务适配
:在决定使用 volatile-lfu 策略之前,应考虑业务需求和数据访问模式,确保该策略与业务目标一致。
算法精度
:Redis 的 LFU 实现是一个近似算法,它通过定期查抄一组随机键,并淘汰其中访问频率最低的键来工作。这样可以在不牺牲太多性能的情况下,近似地实现 LFU 算法。
volatile-random
volatile-random 是 Redis 的一种内存淘汰策略,全称为 "volatile keys random"。这种策略仅针对设置了逾期时间的键,随机淘汰数据。
得当的应用场景
逾期数据的不确定性
:当你盼望在内存不敷时随机淘汰一些即将逾期的数据,而不是基于访问模式或频率时,volatile-random 是一个合适的选择。
简化的淘汰逻辑
:如果你不需要复杂的淘汰逻辑,而只是盼望在内存压力下随机释放一些空间,那么 volatile-random 策略可以满足需求。
临时数据存储
:对于存储临时数据的场景,如缓存的会话信息或临时计算结果,如果这些数据的丢失不会对系统造成巨大影响,可以使用 volatile-random 策略。
制止热点数据误伤
:如果你盼望制止基于访问模式淘汰数据,从而可能误伤热点数据,volatile-random 策略可以提供一个更为“公平”的淘汰机制。
怎么用
配置文件设置
:在 Redis 配置文件 redis.conf 中,可以通过设置 maxmemory-policy volatile-random 来启用 volatile-random 策略。
maxmemory-policy volatile-random
复制代码
运行时设置
:也可以在 Redis 运行时使用 CONFIG SET 命令来动态更改内存淘汰策略。
127.0.0.1:6379> CONFIG SET maxmemory-policy volatile-random
复制代码
命令行设置
:如果你使用的是 Redis 命令行工具,也可以在启动 Redis 服务时通过命令行参数设置。
redis-server --maxmemory-policy volatile-random
复制代码
小结一下
随机淘汰
:volatile-random 策略会在达到内存限制时,从所有设置了逾期时间的键中随机选择一些键进行淘汰。
淘汰过程
:Redis 会维护一个设置了逾期时间的键的列表,当需要淘汰数据时,它会从这个列表中随机选择键来淘汰,直到内存使用量降到限制以下。
简单且快速
:这种策略的实现相对简单,不需要跟踪每个键的访问时间或频率,因此在执行淘汰操纵时可以非常快速。
公平性
:由于淘汰是基于随机性的,因此这种策略在一定水平上可以认为是“公平”的,因为它不方向于任何特定的数据。
注意
数据淘汰的不确定性
:使用 volatile-random 策略时,任何设置了逾期时间的数据都有可能被淘汰,这可能导致一些重要的数据被意外淘汰。
性能考虑
:虽然随机淘汰策略的实现简单且快速,但频繁的淘汰操纵可能会对性能产生一定影响,尤其是在内存使用率较高时。
监控
:建议监控 Redis 的内存使用情况和淘汰事件,以确保系统按预期工作,并及时调整策略或增加内存资源。
业务适配
:在决定使用 volatile-random 策略之前,应考虑业务需求和数据的重要性,确保该策略与业务目标一致。
数据掩护
:如果你的应用中有重要的数据设置了逾期时间,需要注意 volatile-random 策略可能会淘汰这些数据,从而需要考虑额外的数据掩护步伐。
allkeys-random
allkeys-random 是 Redis 的一种内存淘汰策略,全称为 "all keys random"。这种策略会在所有键中,无论是否设置了逾期时间,随机淘汰数据。
得当的应用场景
无差异数据
:如果你的缓存数据没有明显的访问模式差异,即所有数据的访问频率和重要性都差不多,那么 allkeys-random 可以作为一个简单的淘汰策略。
负载均衡
:在分布式缓存环境中,如果所有节点的内存容量都靠近上限,使用 allkeys-random 策略可以确保淘汰操纵在各个节点之间相对均衡。
非关键数据
:如果你缓存的数据是非关键数据,纵然部分数据被随机淘汰也不会对业务造成显著影响,那么这种策略可以淘汰系统的复杂性。
临时解决方案
:在告急情况下,如内存泄漏或其他问题导致内存压力突然增大,allkeys-random 可以作为一个快速反应的淘汰策略。
怎么用
配置文件设置
:在 Redis 配置文件 redis.conf 中,可以通过设置 maxmemory-policy allkeys-random 来启用 allkeys-random 策略。
maxmemory-policy allkeys-random
复制代码
运行时设置
:也可以在 Redis 运行时使用 CONFIG SET 命令来动态更改内存淘汰策略。
127.0.0.1:6379> CONFIG SET maxmemory-policy allkeys-random
复制代码
命令行设置
:如果你使用的是 Redis 命令行工具,也可以在启动 Redis 服务时通过命令行参数设置。
redis-server --maxmemory-policy allkeys-random
复制代码
小结一下
随机淘汰
:allkeys-random 策略会在达到内存限制时,从所有键中随机选择一些键进行淘汰。
淘汰过程
:Redis 会维护一个所有键的列表,当需要淘汰数据时,它会从这个列表中随机选择键来淘汰,直到内存使用量降到限制以下。
简单且快速
:这种策略的实现相对简单,不需要跟踪每个键的访问时间或频率,因此在执行淘汰操纵时可以非常快速。
公平性
:由于淘汰是基于随机性的,因此这种策略在一定水平上可以认为是“公平”的,因为它不方向于任何特定的数据。
注意一下
数据淘汰的不确定性
:使用 allkeys-random 策略时,任何数据都有可能被淘汰,这可能导致一些重要的数据被意外淘汰。
性能考虑
:虽然随机淘汰策略的实现简单且快速,但频繁的淘汰操纵可能会对性能产生一定影响,尤其是在内存使用率较高时。
监控
:建议监控 Redis 的内存使用情况和淘汰事件,以确保系统按预期工作,并及时调整策略或增加内存资源。
业务适配
:在决定使用 allkeys-random 策略之前,应考虑业务需求和数据的重要性,确保该策略与业务目标一致。
数据掩护
:如果你的应用中有重要的数据,需要注意 allkeys-random 策略可能会淘汰这些数据,从而需要考虑额外的数据掩护步伐。
volatile-ttl
volatile-ttl 是 Redis 的一种内存淘汰策略,全称为 "volatile keys with the smallest Time To Live"。这种策略仅针对设置了逾期时间的键,淘汰那些剩余生存时间(TTL)最短的键。
得当的应用场景
临时数据缓存
:对于那些有明白逾期时间的临时数据,如会话信息、定时任务结果等,volatile-ttl 策略可以确保这些数据在内存不敷时按照 TTL 顺序被清除。
数据时效性管理
:在数据具有较强时效性的场景中,如消息快讯或实时报价,volatile-ttl 策略可以确保最靠近逾期的数据首先被移除。
逾期数据优先淘汰
:如果你盼望在内存不敷时优先淘汰那些即将逾期的数据,而不是其他数据,volatile-ttl 提供了一种直接的方式来实现这一目标。
内存优化
:在内存资源有限的情况下,volatile-ttl 策略可以资助优化内存使用,确保内存中的数据尽可能是有用的,即将逾期的数据被及时清除。
怎么用
配置文件设置
:在 Redis 配置文件 redis.conf 中,可以通过设置 maxmemory-policy volatile-ttl 来启用 volatile-ttl 策略。
maxmemory-policy volatile-ttl
复制代码
运行时设置
:也可以在 Redis 运行时使用 CONFIG SET 命令来动态更改内存淘汰策略。
127.0.0.1:6379> CONFIG SET maxmemory-policy volatile-ttl
复制代码
命令行设置
:如果你使用的是 Redis 命令行工具,也可以在启动 Redis 服务时通过命令行参数设置。
redis-server --maxmemory-policy volatile-ttl
复制代码
小结一下
TTL 淘汰
:volatile-ttl 策略会根据键的剩余生存时间来淘汰数据。Redis 会跟踪每个设置了逾期时间的键的 TTL,并在需要淘汰数据时选择 TTL 最短的键。
淘汰过程
:当 Redis 的内存使用量达到 maxmemory 限制时,Redis 会查找所有设置了逾期时间的键,并淘汰那些 TTL 最短的键,直到内存使用量降到限制以下。
实时性
:这种策略可以确保内存中的数据尽可能是最新的,因为它倾向于淘汰那些即将逾期的数据。
配置样本巨细
:虽然 volatile-ttl 策略不涉及 maxmemory-samples 的配置,但它仍然需要定期查抄键的 TTL,以便做出淘汰决策。
要注意的情况
数据淘汰的不确定性
:使用 volatile-ttl 策略时,需要注意纵然某些数据的 TTL 很短,它们也可能在内存不敷时被保存,这取决于其他键的 TTL 值。
性能考虑
:虽然 TTL 淘汰策略的实现相对简单,但频繁的淘汰操纵可能会对性能产生一定影响,尤其是在内存使用率较高时。
监控
:建议监控 Redis 的内存使用情况和淘汰事件,以确保系统按预期工作,并及时调整策略或增加内存资源。
业务适配
:在决定使用 volatile-ttl 策略之前,应考虑业务需求和数据的时效性,确保该策略与业务目标一致。
数据掩护
:如果你的应用中有重要的数据设置了逾期时间,需要注意 volatile-ttl 策略可能会淘汰这些数据,从而需要考虑额外的数据掩护步伐。
最后
以上是 V 哥整理的笔记,分享给你,欢迎关注威哥爱编程,专注技术学习与发展,绝不躺平。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
前进之路
论坛元老
这个人很懒什么都没写!
楼主热帖
UWP/WinUI3 Win2D PixelShaderEffec ...
后台性能测试规范
低代码平台 - 危险的赌注
小小项目-博客系统 - 服务器版本 - jav ...
端午假期整理了仿天猫H5 APP项目vue.js ...
Docker 基础 - 1
Python3程序捕获Ctrl+C终止信号 ...
实用五步法教会你指标体系的设计与加工 ...
Redis常见使用场景
Fastjson反序列化
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表