Redis key的生命周期详解及故障案例描述(三)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis key的生命周期故障案例1.设置key的生命周期查看key生命周期语法格式:ttl key设置key的生命周期:expire key 时间,单位为秒

Redis key的生命周期故障案例

1.设置key的生命周期

查看key生命周期语法格式:ttl key

设置key的生命周期:expire key 时间,单位为秒

key的生命周期常用于优惠券这种活动,仅限于一天内使用,超过一天后优惠券自动消失

当key处于生命周期进行时的时候,如果再创建一模一样的key,会覆盖处于生命周期的key,这时,这个key的生命周期将会变成永不过期

redis key的生命周期到期后会自动把key删除

ttl命令查出来的key生命周期,如果返回值为-1则表示永不过期,返回值为-2则表示键过期,不存在

1.查看k2的生命周期
[root@redis-1 ~]# redis-cli 
127.0.0.1:6379> ttl k2
(integer) -1
2.设置k2的声明周期为100秒
127.0.0.1:6379> EXPIRE k2 100
(integer) 1
3.观察k2的声明周期值
127.0.0.1:6379> ttl k2
(integer) 86
127.0.0.1:6379> ttl k2
(integer) 85
127.0.0.1:6379> ttl k2
(integer) 84
127.0.0.1:6379> ttl k2
(integer) 83
127.0.0.1:6379> ttl k2
(integer) 82
127.0.0.1:6379> ttl k2
(integer) 72
127.0.0.1:6379> ttl k2
(integer) 71
127.0.0.1:6379> ttl k2
(integer) 66
127.0.0.1:6379> ttl k2
(integer) -2

2.key生命周期故障案例

描述:双十一优惠,某电商平台的开发人员操作了创建了一个已经存在生命周期为一天的优惠券key,这时就会把正在进行生命周期消耗的key直接覆盖,从而成为默认的永不过期,当生命周期时长一过,发现优惠券还能使用,造成的损失不计其数,这就是由于新的key把就 的key覆盖了,生命周期也随着变成了永不过期,只要key的生命周期为不过期,那么这个key就不会删除

只有key生命周期到期了,key删除了,第二天优惠券就会变成无法使用

模拟破坏key的生命周期

1.创建优惠券key
127.0.0.1:6379> ttl k2
(integer) -2
2.查看key的生命周期
127.0.0.1:6379> ttl youhuiquan
(integer) -1      #永不过期,默认创建的key是永不过期
3.设置key的生命周期为150s
127.0.0.1:6379> EXPIRE youhuiquan 150
(integer) 1
4.观察生命周期的缩减
正在一点点缩减
127.0.0.1:6379> ttl youhuiquan
(integer) 148
127.0.0.1:6379> ttl youhuiquan
(integer) 147
127.0.0.1:6379> ttl youhuiquan
(integer) 147
127.0.0.1:6379> ttl youhuiquan
(integer) 144
127.0.0.1:6379> ttl youhuiquan
(integer) 140
5.这时开发人员突然创建了一模一样的key,导致了存在生命周期的key被覆盖,从而变成了永不过期的key
127.0.0.1:6379> set youhuiquan 100
OK
127.0.0.1:6379> ttl youhuiquan
(integer) -1

避免key生命周期故障的方法

1.跟开发人员提前明确哪些key存在生命周期,将key的生命周期进行监控,通过zabbix的自定义监控项,监控redis-cli ttl key输出的结果,只要是包含-1就告警,这个key已经是永不过期

2.规范操作,避免背锅

3.将key的生命周期设置为永不过期

persist命令可以将一个快要过期的key设置为永不过期

语法格式:persist key

1.设置k3位100秒生命周期
127.0.0.1:6379> EXPIRE k3 100
(integer) 1
2.查看k3的生命周期缩减
127.0.0.1:6379> ttl k3
(integer) 96
127.0.0.1:6379> ttl k3
(integer) 91
127.0.0.1:6379> ttl k3
(integer) 82
127.0.0.1:6379> ttl k3
(integer) 77
4.设置k3永不过期
127.0.0.1:6379> PERSIST k3
(integer) 1
5.查看k3的生命周期
127.0.0.1:6379> ttl k3
(integer) -1
相关实践学习
基于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
目录
相关文章
|
5月前
|
存储 缓存 NoSQL
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
|
2月前
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
2月前
|
存储 监控 NoSQL
Redis大Key问题如何排查?如何解决?
Redis大Key问题如何排查?如何解决?
86 0
Redis大Key问题如何排查?如何解决?
|
2月前
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?
|
3月前
|
NoSQL Unix Redis
Redis 键(key)
10月更文挑战第15天
44 1
|
2月前
|
缓存 NoSQL 网络协议
【Azure Redis】因为Redis升级引发了故障转移后的问题讨论
3:对于Redis的Server Load指标,每秒创建连接数的并发值,是否有建议呢? 【答】:为了避免将缓存推到 100% 服务器负载,建议将连接创建速率保持在每秒 30 个以下。
|
3月前
|
缓存 监控 负载均衡
如何解决Redis热点Key问题?技术干货分享
【10月更文挑战第2天】在Redis的使用过程中,热点Key问题是一个常见的性能瓶颈。热点Key指的是那些被频繁访问的Key,它们可能导致Redis服务器的负载不均衡,进而影响整体性能。本文将深入探讨热点Key问题的成因、影响以及多种解决方案,帮助读者在实际工作中有效应对这一挑战。
136 3
|
3月前
|
NoSQL Redis
redis 的 key 过期策略是怎么实现的(经典面试题)超级通俗易懂的解释!
本文解释了Redis实现key过期策略的方式,包括定期删除和惰性删除两种机制,并提到了Redis的内存淘汰策略作为补充,以确保过期的key能够被及时删除。
63 1
|
4月前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
60 1
|
4月前
|
存储 缓存 NoSQL
Redis中大Key与热Key的解决方案
在工作中,Redis作为一款高性能缓存数据库被广泛应用,但常遇到“大key”和“热key”问题。“大key”指单个键包含大量数据,导致内存消耗高、性能下降及持久化效率降低;“热key”则是频繁访问的键,会引起CPU占用率高、请求阻塞等问题。本文详细分析了这些问题的定义、影响、原因,并提供了相应的解决方案,如合理设置缓存时间和数据结构、拆分大key、采用热点数据分片等方法。
299 4
Redis中大Key与热Key的解决方案