redis判断key是否存在(过期)的几种方式

本文详细介绍了Redis中EXISTS命令用于检查指定key是否存在及其返回值规则,并讲解了TTL命令如何以秒为单位返回key的剩余生存时间,包括不同情况下的返回值及示例。

exist命令

EXISTS key

检查给定 key 是否存在。
可用版本:>= 1.0.0
时间复杂度:O(1)
返回值:
若 key 存在,返回 1 ,否则返回 0 。

示例:

ip:6379> set ceshi-111-222 wcl
OK
ip:6379> exists ceshi-111-222
(integer) 1
ip:6379> del ceshi-111-222
(integer) 1
ip:6379> exists ceshi-111-222
(integer) 0

ttl命令

注意:还有个类似命令(PTTL)区别是PTTL以毫秒为单位返回key的剩余生存时间,其可用版本为>= 2.6.0

TTL key
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
可用版本:>= 1.0.0
时间复杂度:O(1)
返回值:
当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以秒为单位,返回 key 的剩余生存时间。

示例:

ip:6379> set ceshi-ttl ttl-value
OK
ip:6379> ttl ceshi-ttl 
(integer) -1
ip:6379> expire ceshi-ttl 20
(integer) 1
ip:6379> ttl ceshi-ttl 
(integer) 18
ip:6379> pttl ceshi-ttl
(integer) 13046
ip:6379> ttl ceshi-ttl 
(integer) 10
ip:6379> pttl ceshi-ttl
(integer) 4724
ip:6379> ttl ceshi-ttl 
(integer) -2
ip:6379> pttl ceshi-ttl
(integer) -2
Redis 判断一个 KEY 是否过期主要有以下几种方式: ### 定期删除与惰性删除机制 Redis 采用定期删除和惰性删除两种方式处理过期键。定期删除是指每次抽取一部分键验证过期时间,此过程需足够快;惰性删除则是当访问某个 key 时,先判断是否过期,若过期就删除并返回 nil [^1]。 ### TTL 命令 使用 `TTL` 命令可以查看 key 的剩余生存时间(以秒为单位),如果返回值为 -1 表示 key 存在但没有设置过期时间,返回 -2 表示 key存在或者已过期。示例如下: ```plaintext 127.0.0.1:6379> SET mykey "value" OK 127.0.0.1:6379> EXPIRE mykey 60 (integer) 1 127.0.0.1:6379> TTL mykey (integer) 58 ``` 当 `TTL` 返回 -2 时,可判定该 key过期。 ### PTTL 命令 `PTTL` 命令与 `TTL` 类似,不过它返回的剩余生存时间是以毫秒为单位。示例如下: ```plaintext 127.0.0.1:6379> PTTL mykey (integer) 55000 ``` ### Redis 过期事件通知 通过配置 Redis过期事件通知功能,当 key 过期时,Redis 会发布一个过期事件。可以通过订阅这些事件来得知 key 是否过期。首先,需要在 `redis.conf` 中配置 `notify-keyspace-events Ex`,然后使用 Redis 客户端订阅 `__keyevent@<db>__:expired` 频道(`<db>` 是数据库编号)。示例代码(Python)如下: ```python import redis r = redis.Redis(host='localhost', port=6379, db=0) p = r.pubsub() p.subscribe('__keyevent@0__:expired') for message in p.listen(): if message['type'] == 'message': print(f"Key {message['data']} has expired.") ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值