Redis教程7-键(key)常用命令使用参考2

1.MOVE

MOVE key db

将当前数据库的 key 移动到给定的数据库 db 当中。

如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。

因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)。

可用版本:>= 1.0.0

时间复杂度:O(1)

返回值:移动成功返回 1 ,失败则返回 0 。

127.0.0.1:6379> keys name    // 默认db 0数据库
(empty list or set)
127.0.0.1:6379> set name redis666    // 设置name
OK
127.0.0.1:6379> get name
"redis666"
127.0.0.1:6379> select 1    // 切换到db 1
OK
127.0.0.1:6379[1]> get name    // db 1中没有name
(nil)
127.0.0.1:6379[1]> select 0    // 切换回db 0
OK
127.0.0.1:6379> move name 1    // move name -> db 1
(integer) 1
127.0.0.1:6379> exists name    // db 0中name已经没了
(integer) 0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get name    // db 1中有了刚才的name
"redis666"
127.0.0.1:6379[1]>

从db 1 move一个不存在的key到db 0

127.0.0.1:6379[1]> keys *    // db 1中只有name
1) "name"
127.0.0.1:6379[1]> move age 0    // move age 到 db 0, 返回0, 不成功
(integer) 0

当db 1 和 db 0 都有相同key的时候

127.0.0.1:6379[1]> keys *    // db 1中有name
1) "name"
127.0.0.1:6379[1]> select 0    // 切换到 db 0
OK
127.0.0.1:6379> get name    // db 0 中没有name
(nil)
127.0.0.1:6379> set name redis888    // set 一个 name
OK
127.0.0.1:6379> move name 1     // 从db 0 move 到 db 1, 不成功, 因为db0 和 db 1 都有name
(integer) 0

2.PERSIST

PERSIST key

移除给定 key 的生存时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』(一个不带生存时间、永不过期的 key )。

可用版本:>= 2.2.0

时间复杂度:O(1)

返回值:

当生存时间移除成功时,返回 1 .

如果 key 不存在或 key 没有设置生存时间,返回 0 。

127.0.0.1:6379> get name
"redis888"
127.0.0.1:6379> expire name 5000    // 设置name过期时间5000s
(integer) 1
127.0.0.1:6379> ttl name    // 剩余过期时间4997s
(integer) 4997
127.0.0.1:6379> persist name    // 移除过期时间的限制
(integer) 1
127.0.0.1:6379> ttl name    // 剩余过期时间已经没了
(integer) -1
127.0.0.1:6379> persist name    // 移除一个没有过期时间的, 返回0
(integer) 0
127.0.0.1:6379> persist age    // 移除一个不存在的key, 返回0
(integer) 0
127.0.0.1:6379>

3.PEXPIRE

PEXPIRE key milliseconds

这个命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位

可用版本:>= 2.6.0

时间复杂度:O(1)

返回值:

设置成功,返回 1
key 不存在或设置失败,返回 0
127.0.0.1:6379> pexpire name 20000    // 设置name的过期时间20s
(integer) 1
127.0.0.1:6379> ttl name    // ttl查看剩余过期时间, 查看的是s
(integer) 18
127.0.0.1:6379> pttl name    // pttl查看剩余过期时间, 查看的是ms
(integer) 12623
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name    // 已经过期了
(integer) -2
127.0.0.1:6379> get name    // name不存在了
(nil)
127.0.0.1:6379> keys name    // name不存在
(empty list or set)
127.0.0.1:6379>

4.PEXPIREAT

PEXPIREAT key milliseconds-timestamp

这个命令和 EXPIRE, PEXPIRE 命令类似,但它以毫秒为单位设置 key 的过期 unix 时间戳,而不是像 EXPIRE 那样,以秒为单位(PEXPIRE为毫秒为单位)。

可用版本:>= 2.6.0

时间复杂度:O(1)

返回值:

如果生存时间设置成功,返回 1 。

当 key 不存在或没办法设置生存时间时,返回 0 。(查看 上面 EXPIRE 命令获取更多信息)

127.0.0.1:6379> set name redis666
OK
127.0.0.1:6379> pexpireat name 1600481820000    // 设置name过期时间为2020/9/19 10:17:00的unix时间戳1600481820000, 现在是2020/9/19 10:15:00
(integer) 1
127.0.0.1:6379> ttl name    // 剩余过期时间30s
(integer) 30
127.0.0.1:6379> pttl name    // 剩余过期时间 ms
(integer) 27723
127.0.0.1:6379> ttl name
(integer) 9
127.0.0.1:6379> ttl name    // 已过期
(integer) -2
127.0.0.1:6379> exists name    // name不存在了
(integer) 0
127.0.0.1:6379>

5.PTTL

PTTL key

这个命令类似于 TTL 命令,但它以毫秒为单位返回 key 的剩余生存时间,而不是像 TTL 命令那样,以秒为单位。

可用版本:>= 2.6.0

复杂度:O(1)

返回值:

当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以毫秒为单位,返回 key 的剩余生存时间。
在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1
127.0.0.1:6379> set name redis666
OK
127.0.0.1:6379> pttl name    // key存在但是没有设置过期时间
(integer) -1
127.0.0.1:6379> pttl age    // key不存在
(integer) -2
127.0.0.1:6379> pexpire name 10000
(integer) 1
127.0.0.1:6379> pttl name    // 返回剩余过期时间ms
(integer) 7084
127.0.0.1:6379> ttl name    // ttl返回剩余过期时间s
(integer) 5
127.0.0.1:6379>

6.RANDOMKEY

RANDOMKEY

从当前数据库中随机返回(不删除)一个 key 。

可用版本:>= 1.0.0

时间复杂度:O(1)返回值:

当数据库不为空时,返回一个 key 
当数据库为空时,返回 nil 
127.0.0.1:6379> keys *    // 空的db
(empty list or set)
127.0.0.1:6379> randomkey    // 返回nil
(nil)
127.0.0.1:6379> set name redis666    // set 三个值
OK
127.0.0.1:6379> set age 66
OK
127.0.0.1:6379> set tel 111111
OK
127.0.0.1:6379> randomkey    // 随机返回
"tel"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"tel"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"tel"
127.0.0.1:6379> randomkey
"tel"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"tel"
127.0.0.1:6379> randomkey
"name"
127.0.0.1:6379> randomkey
"tel"

7.RENAME

RENAME KEY newkey

将key改名为newkey。

当key不存在时, 返回一个错误.

当newkey已经存在时, rename命令将覆盖旧值

可用版本:>= 1.0.0

时间复杂度:O(1)

返回值:改名成功时提示 OK ,失败时候返回一个错误。

 

127.0.0.1:6379> set name redis666
OK
127.0.0.1:6379> set name2 redis888
OK
127.0.0.1:6379> rename age newage    // 1.当key不存在时, 报错
(error) ERR no such key
127.0.0.1:6379> rename name name3    // 2.当key存在, newkey不存在
OK
127.0.0.1:6379> exists name  // key不存在了
(integer) 0
127.0.0.1:6379> get name3  // newkey
"redis666"
127.0.0.1:6379> rename name3 name2    // 3.当newkey已经存在, key覆盖newkey
OK
127.0.0.1:6379> exists name3    // key不存在了
(integer) 0
127.0.0.1:6379> get name2    // newkey值被覆盖了
"redis666"
127.0.0.1:6379>
posted @ 2020-09-19 10:35  KILLNPE  阅读(187)  评论(0编辑  收藏  举报