Redis缓存策略:数据过期与淘汰机制深度解析

创始人
2024-12-31 19:07:40
0 次浏览
0 评论

Redis-数据过期清除策略+缓存淘汰策略

使用Redis时,设置缓存大小并考虑数据过期和缓存驱逐策略非常重要。
Redis缓存空间的大小可以使用CONFIGSETmaxmemory4gb命令设置。
当缓存已满时,必须决定如何清除数据。
过期数据的删除策略有两种:定期删除和延迟删除。
在定期删除策略中,Redis每隔100ms随机检查一些有过期时间的key,检查它们是否过期,过期则删除。
该方法避免了定时删除CPU占用率高的问题,但在并发环境下仍需注意对CPU的影响。
延迟删除会检查密钥是否已过期,并在检索到密钥时将其删除。
但这样可能会导致过期的key没有被及时清理,导致内存堆积。
缓存消除策略在Redis中提供了多种选择,包括但不限于volatile-ttl、volatile-random、volatile-lru、volatile-lfu、allkeys-random、allkeys-lru、allkeys-lfu。
其中,建议优先使用“allkeys-lru”策略。
它使用LRU算法来保留最近访问的数据并提高应用程序性能。
“allkeys-lru”适用于冷热数据区分明显的场景,而“allkeys-random”在没有明显区分的情况下效果不佳。
对于没有设置过期时间的键值对,淘汰策略的行为与noeviction类似,不执行任何数据淘汰。

面试官:Redis过期删除策略和内存淘汰策略有什么区别?

Redis的“内存移除策略”和“过期移除策略”是负责管理内存和数据生命周期的两个关键机制。
虽然都涉及数据删除操作,但触发条件和策略有所不同。
接下来我们将一一分析这两种机制,帮助大家清楚地了解它们的区别。
###Redis的过期策略允许您设置密钥过期日期以自动清理不再需要的数据。
过期密钥删除策略是执行此清理工作的机制。
####如何设置密钥的到期日期您可以使用各种命令设置密钥的到期日期,包括但不限于setexpirationstring命令。
####如何确定密钥的有效期。
每当一个键设置为过期时,Redis就会将该键的过期时间存储在“过期字典”中,这是一种用于跟踪文件中所有键的过期日期的数据结构。
数据库。
过期字典用于快速检查密钥是否过期。
####删除过期物品的策略是什么?常见的过期删除策略包括定时删除、延迟删除、定期删除。
每种都有自己的优点和缺点,它们共同组成了Redis的过期机制。
####Redis过期删除策略Redis采用惰性删除+定期删除的策略来平衡合理的CPU使用率和避免内存浪费。
###内存清理策略当Redis内存超过指定上限时,会自动激活内存清理策略,清理数据,保高效运行。
####如何设置最大工作内存。
通过设置配置文件中的`maxmemory`参数,可以确定最大工作内存。
如果超过这个值,内存排除机制将被激活。
####Redis内存清除策略存在八种内存删除策略,分为“不删除数据”和“删除数据”两类。
###总结Redis过期键移除策略侧重于管理过期键的清理,而内存移除策略则在内存超过限制时通过各种策略自动移除数据以维持系统性能。
了解这两种策略之间的区别将帮助您使用Redis更有效地管理数据。

Redis过期淘汰策略实现方法?

Redis中的数据过期策略采用定期删除+惰性删除策略。
定期删除策略:Redis启用了一个定时器,定期监控所有的key,判断该key是否过期,如果过期则将其删除。
这种策略可以保证过期的key最终会被删除,但是它也有严重的缺点:每次都要遍历内存中的所有数据,消耗大量的CPU资源,并且当key已经过期但是定时器还在唤醒中条件下,这段时间内Key仍然可以使用。
惰性删除策略:获取key时,首先判断key是否过期,过期则删除。
这种方法有一个缺点:如果不使用密钥,它就会一直在内存中。
其实已经过期了,会浪费很多空间。
2.常规删除+惰性删除策略是如何实现的?这两种策略天然是互补的,结合起来后,计划中的删除策略发生了一些变化。
不再每次都扫描所有的key,而是随机选择一部分key进行检查,惰性删除策略补充了未检查的key,基本满足了所有要求。
但有时很巧合的是,它既没有从定时器中拉出,也没有被使用。
这些数据如何从内存中消失?没关系,这也是一种记忆消除机制。
当内存不够的时候,内存淘汰机制就会发挥作用。
Redis内存驱逐机制有以下策略:noeviction:当内存不足以容纳新写入的数据时,新的写入操作会报错。
(Redis默认策略)allkeys-lru:当内存不足以容纳新写入的数据时,移除keyspace中最后使用的key。
(推荐)allkeys-random:当内存不足以容纳新写入的数据时,从密钥空间中随机删除一个密钥。
volatile-lru:当内存不足以容纳新写入的数据时,在设置了过期时间的键空间中,移除最后使用的键。
当Redis同时用作缓存和持久存储时,通常会出现这种情况。
易失性随机:当内存不足以容纳新写入的数据时,会在设定的过期时间内从密钥空间中随机删除一个密钥。
volatile-ttl:当内存不足以容纳新写入的数据时,在设置了过期时间的key空间中,过期时间较早的key会先被移除。
要修改内存淘汰机制,只需要在redis.conf配置文件中配置maxmemory-policy参数即可。
热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...