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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
目录
相关文章
|
3月前
|
存储 缓存 NoSQL
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
|
3天前
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
18天前
|
NoSQL Unix Redis
Redis 键(key)
10月更文挑战第15天
29 1
|
25天前
|
缓存 监控 负载均衡
如何解决Redis热点Key问题?技术干货分享
【10月更文挑战第2天】在Redis的使用过程中,热点Key问题是一个常见的性能瓶颈。热点Key指的是那些被频繁访问的Key,它们可能导致Redis服务器的负载不均衡,进而影响整体性能。本文将深入探讨热点Key问题的成因、影响以及多种解决方案,帮助读者在实际工作中有效应对这一挑战。
41 3
|
1月前
|
NoSQL Redis
redis 的 key 过期策略是怎么实现的(经典面试题)超级通俗易懂的解释!
本文解释了Redis实现key过期策略的方式,包括定期删除和惰性删除两种机制,并提到了Redis的内存淘汰策略作为补充,以确保过期的key能够被及时删除。
48 1
|
2月前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
42 1
|
2月前
|
存储 缓存 NoSQL
Redis中大Key与热Key的解决方案
在工作中,Redis作为一款高性能缓存数据库被广泛应用,但常遇到“大key”和“热key”问题。“大key”指单个键包含大量数据,导致内存消耗高、性能下降及持久化效率降低;“热key”则是频繁访问的键,会引起CPU占用率高、请求阻塞等问题。本文详细分析了这些问题的定义、影响、原因,并提供了相应的解决方案,如合理设置缓存时间和数据结构、拆分大key、采用热点数据分片等方法。
211 4
Redis中大Key与热Key的解决方案
|
2月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
62 2
|
29天前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
107 0
|
2月前
|
缓存 NoSQL PHP
使用PHP-redis实现键空间通知监听key失效事件的技术与代码示例
通过上述方法,你可以有效地在PHP中使用Redis来监听键空间通知,特别是针对键失效事件。这可以帮助你更好地管理缓存策略,及时响应键的变化。
92 3