【redis】键管理

1.键重命名 

192.168.1.7:6379> set python jedis
OK
192.168.1.7:6379> get python 
"jedis"
192.168.1.7:6379> rename python java
OK
192.168.1.7:6379> get python 
(nil)
192.168.1.7:6379> get java
"jedis"

--如果在rename之前java键已经存在,那么它的值将被覆盖。
192.168.1.7:6379> set python "i'm python"
OK
192.168.1.7:6379> get python
"i'm python"
192.168.1.7:6379> get java 
"jedis"
192.168.1.7:6379> rename python java
OK
192.168.1.7:6379> get java
"i'm python"
192.168.1.7:6379> get python
(nil)

--为了防止被强行rename,redis提供了renamenx命令,确保只有newkey不存在时才
--被覆盖。
192.168.1.7:6379> get python 
"python"
192.168.1.7:6379> get java 
"i'm python"
192.168.1.7:6379> renamenx python java 
(integer) 0
--已经存在时不能重命名。
--有效解决已经对象被覆盖。

--重命名需要注意的点。
由于重命名键期间会执行del命令删除旧的键,如果键对应的值比较大,
会存在阻塞redis的可能性。
如果rename和renamenx中的key和newkey时相同的,在redis3.2和之前版本返回结果
略有不同。3.2之前会提示错误,3.2之后允许rename; 

2.随机返回一个键 

192.168.1.7:6379> dbsize 
(integer) 3
192.168.1.7:6379> randomkey
"java"
--从很多键中随机返回一个
192.168.1.7:6379> randomkey
"java"
192.168.1.7:6379> randomkey
"python"

3.键过期 

除了expire,ttl命令以外,redis还提供了expireat,pexpire,pexpireat,pttl,persist
等命令 
expire key seconds:键在seconds秒后过期被删除。
expireat key timestamp:键在秒级时间戳timestamp后过期。

192.168.1.7:6379> set hello world
OK
192.168.1.7:6379> expire hello 10
(integer) 1
192.168.1.7:6379> ttl hello
(integer) 5
192.168.1.7:6379> ttl hello
(integer) 4
192.168.1.7:6379> ttl hello
(integer) 0
192.168.1.7:6379> ttl hello
(integer) -2
--(-2)表示键已经被删除。

ttl和pttl都可以查询键的剩余过期时间,但是pttl精度更高可以达到毫秒级别。
有三种返回值:
大于等于0的整数:键剩余过期时间:ttl是秒,pttl是毫秒。
-1:键没有设置过期时间。
-2:键不存在。

expireat:命令可以设置键的秒级过期时间戳。
2024-06-19 09:00:00 ,需要将时间转换为秒级时间戳。xxxxxx; 
expireat hello xxxxx

--毫秒级过期
pexpire key milliseconds :键在milliseconds毫秒后过期。
pexireat key milliseconds-timestamp:键在毫秒级时间戳timestamp后过期。

无论是使用过期时间还是时间戳,秒级还是毫秒级,在redis内部最终都是使用
pexpireat;

(1)键不存在返回结果为。
192.168.1.7:6379> keys * 
1) "python"
2) "java"
3) "user:ranking:20240619"
192.168.1.7:6379> expire a 30
(integer) 0
(2)键过期时间为负值,将被立即删除。
192.168.1.7:6379> set a 5 
OK
192.168.1.7:6379> 
192.168.1.7:6379> 
192.168.1.7:6379> keys * 
1) "python"
2) "a"
3) "java"
4) "user:ranking:20240619"
192.168.1.7:6379> 
--过期时间为负数,立即被删除。
192.168.1.7:6379> expire a -5
(integer) 1
192.168.1.7:6379> keys * 
1) "python"
2) "java"
3) "user:ranking:20240619"

(3)persist 命令可以将键的过期时间清除。
192.168.1.7:6379> hset hashkey1 f1 v1
(integer) 1
192.168.1.7:6379> hgetall hashkey1
1) "f1"
2) "v1"
192.168.1.7:6379> expire hashkey1 50
(integer) 1
192.168.1.7:6379> ttl hashkey1
(integer) 46
192.168.1.7:6379> persist hashkey1
(integer) 1
192.168.1.7:6379> ttl hashkey1
(integer) -1
--由此可见,persist确实删除键的过期属性。
(4)对于字符串类型的键,执行set命令会去掉过期时间,这个问题容易在开发
中被忽略。
192.168.1.7:6379> set b 10 
OK
192.168.1.7:6379> expire b 100
(integer) 1
192.168.1.7:6379> ttl b 
(integer) 98
192.168.1.7:6379> ttl b 
(integer) 96
192.168.1.7:6379> set b 10
OK
192.168.1.7:6379> ttl b
(integer) -1
--重新set之后果然没有过期属性了。
(5)redis不支持二级数据结构(例如hash,list)内部元素的过期功能,例如不能对列表
类型的一个元素过过期时间设置。

(6)setex 命令作为set+expire的组合,不但是原子执行,同时减少了一次网络通讯时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值