Redis的过期策略

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis的过期策略

过期key集合

redis中所有设置了过期时间的key被放入一个独立的字典中,之后会定期扫描该字典,检查已经到期的key并进行删除操作。

定时扫描策略

默认情况下redis每秒钟进行10次过期扫描,但是并不会扫描所有的key,而是采用简单的贪心策略,步骤如下:

  1. 从过期字典中随机选出20个key。
  2. 删除20个key中已过期的key。
  3. 如果过期key的比例超过1/4,重复以上步骤。

问题

如果出现大量过期的话,redis可能会一直重复上面的步骤,导致一个不停循环处理,影响redis服务对外的响应,因此该扫描策略具有扫描时间的上线,默认值是扫描时间不超过25ms。

如果在同一时间内有大量的key过期,redis在短期内将多次循环扫描过期字典,直到过期字典中的key变得稀疏,循环扫描的次数才会下降,这会导致线上读写请求出现卡顿,当然不单是循环扫描导致的卡顿,剔除过期key的同时,内存管理器将频繁回收内存页也会占用CPU的资源引起卡顿,

同时,大量key过期,redis进入过期扫描的处理中,如果此时有来自客户端的请求,将至少需要等待25ms才会进行处理,

如果客户端的超时时间设置的较短,比如10ms,那么该连接就会因为超时关闭,业务端将出现超时的异常,此时在 slowlog 中也无法看到慢查询记录,因为慢查询指的是逻辑处理时间而不是等待时间。

应对策略

在给大量的key设置过期时间时,应尽量将时间随机分散开来,不要集中在一个时间点失效,在真正的到期时间后加上一个随机时间,这么做可以有效的解决大量key同时过期导致的卡顿问题。

# 在目标过期时间上增加一天的随机时间
redis.expire_at(key, random.randint(86400) + expire_ts)

懒惰删除策略

惰性策略指的是,如果客户端访问了一个带有过期时间的key,那么访问时,redis会检查这个key是否已经过期,如果过期了就理解删除。

惰性删除策略可以理解为零散删除,定时扫描策略则是集中删除。

从节点过期策略

从节点不会对过期key进行扫描,当主节点的key到期被处理时,会在AOF日志中增加一个del指令,同时同步到所有从节点中,从节点通过该指令删除自己内存中的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
目录
相关文章
|
14天前
|
NoSQL Redis
05- Redis的数据淘汰策略有哪些 ?
Redis 提供了 8 种数据淘汰策略:挥发性 LRU、LFU 和 TTL(针对有过期时间的数据),挥发性随机淘汰,以及全库的 LRU、LFU 随机淘汰,用于在内存不足时选择删除。另外,还有不淘汰策略(no-eviction),允许新写入操作报错而非删除数据。
170 1
|
26天前
|
缓存 监控 NoSQL
【Redis性能瓶颈揭秘】「调优系列」深入分析热Key的排查策略和解决方案
【Redis性能瓶颈揭秘】「调优系列」深入分析热Key的排查策略和解决方案
145180 2
|
1月前
|
存储 缓存 NoSQL
【Redis】Redis魔法:揭秘Key的自动消失术——过期删除机制解析
【Redis】Redis魔法:揭秘Key的自动消失术——过期删除机制解析
101 0
|
1月前
|
缓存 监控 NoSQL
解析Redis缓存雪崩及应对策略
解析Redis缓存雪崩及应对策略
|
9天前
|
缓存 NoSQL Java
使用Redis进行Java缓存策略设计
【4月更文挑战第16天】在高并发Java应用中,Redis作为缓存中间件提升性能。本文探讨如何使用Redis设计缓存策略。Redis是开源内存数据结构存储系统,支持多种数据结构。Java中常用Redis客户端有Jedis和Lettuce。缓存设计遵循一致性、失效、雪崩、穿透和预热原则。常见缓存模式包括Cache-Aside、Read-Through、Write-Through和Write-Behind。示例展示了使用Jedis实现Cache-Aside模式。优化策略包括分布式锁、缓存预热、随机过期时间、限流和降级,以应对缓存挑战。
|
15天前
|
NoSQL 安全 Redis
redis内存限制与淘汰策略
Redis内存管理包括限制和淘汰策略。`maxmemory`配置参数决定内存上限,无设置时64位系统默认不限制,可能导致系统资源耗尽,生产环境建议设定合理值。当内存满时,未设置淘汰策略会导致写入错误。Redis提供8种淘汰策略,如LRU(最近最少使用)和LFU(最不经常使用),以及随机或基于过期时间的删除。需根据数据重要性、访问频率和一致性选择合适策略。
147 0
|
23天前
|
存储 缓存 NoSQL
Redis的内存淘汰策略是什么?
【4月更文挑战第2天】Redis内存淘汰策略在内存满时,通过删除旧数据为新数据腾空间。策略包括:volatile-lru/LFU(基于LRU/LFU算法淘汰有过期时间的键),volatile-random/ttl(随机/按TTL淘汰),allkeys-lru/LFU(所有键的LRU/LFU),allkeys-random(随机淘汰所有键),以及noeviction(不淘汰,返回错误)。选择策略要考虑访问模式、数据重要性和性能需求。
|
1月前
|
NoSQL 算法 数据管理
【Redis】Redis配置参数详解:优化过期删除机制
【Redis】Redis配置参数详解:优化过期删除机制
77 0
|
2月前
|
存储 NoSQL Redis
Redis淘汰策略、持久化、主从同步与对象模型
Redis淘汰策略、持久化、主从同步与对象模型
90 0
|
2月前
|
NoSQL Java Redis
springboot整合redis过期key监听实现订单过期操作
springboot整合redis过期key监听实现订单过期操作
68 0

热门文章

最新文章