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)
返回值:
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)
返回值:
在 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)返回值:
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>