Skip to content

key相关命令

Redis的key命令不区分大小写,存储的key数据值区分大小写。

1. keys命令

语法: KEYS pattern
查找所有符合给定模式的key。
其中pattern支持以下格式:

  • h?llo 匹配 hello, hallo, hxllo
  • h*llo 匹配 hllo , heeeello
  • h[ae]llo 匹配 hello , hallo, 过滤 hillo
  • h[^e]llo 匹配 hallo, hbllo, 过滤 hello
  • h[a-b]llo 匹配 hallo , hbllo
sh
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> keys test
(empty array)

警告

keys命令在生产环境避免使用, 在数据存储很大的时候会出现性能问题,查找key的信息可以使用scan命令

2. exists命令

语法:exists key [key ...]
判断某些key是否存在,返回存在的key数量

sh
127.0.0.1:6379> exists age job
(integer) 1
## 如果有重复的key,exists会重复计数
127.0.0.1:6379> exists name name age
(integer) 3

3. type命令

语法:TYPE key
返回key的数据类型,返回值是字符串类型

sh
127.0.0.1:6379> type name
string

4. del命令

语法: DEL key [key ...]
阻塞删除,删除指定key的数据,如果key不存在将忽略

sh
127.0.0.1:6379> del play
(integer) 1
127.0.0.1:6379> del tour
(integer) 0

5. unlink命令

语法: UNLINK key [key ...]
非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作。

sh
127.0.0.1:6379> unlink tour
(integer) 1

6. ttl命令

语法: TTL key
以秒为单位,返回给定key的剩余生存时间,其中返回-1表示永不过期,返回-2表示key不存在

sh
127.0.0.1:6379> ttl tour
(integer) -2
127.0.0.1:6379> ttl name
(integer) -1

7. expire命令

语法: EXPIRE key seconds [NX | XX | GT | LT]
给指定的key设置过期时间, 其中:

  • NX -- 如果key没有设置过期时间会被重置传入的过期时间
  • XX -- 如果key已经设置过期时间会被重置传入的过期时间
  • GT -- 如果传入的过期时间比当前过期时间大会被重置传入的过期时间
  • LT -- 如果传入的过期时间比当前过期时间小会被重置传入的过期时间
sh
127.0.0.1:6379> expire name 100
(integer) 1
127.0.0.1:6379> ttl name
(integer) 97
127.0.0.1:6379> expire name 100 LT
(integer) 0
127.0.0.1:6379> ttl name
(integer) 78

8. move命令

语法: MOVE key dbindex
将当前数据库的key移动到给定的数据库中,其中dbindex指的是Redis数据库数组的下标,当前使用的默认的Redis数据库的数组下标为0, Redis数据库默认一共有16个,数组下标范围0~15, 如果dbindex不在范围内则move操作将将报错。

sh
127.0.0.1:6379> move age 1
(integer) 1
127.0.0.1:6379> get age
(nil)
## 切换Redis数据库到1号数据库
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get age
"13"
127.0.0.1:6379[1]> move age 16
(error) ERR DB index is out of range
127.0.0.1:6379[1]> move age -1
(error) ERR DB index is out of range

9. PERSIST命令

语法: PERSIST
用于删除给定 key 的过期时间,使得 key 永不过期

sh
127.0.0.1:6379[1]> set mykey "hello" EX 20
OK
127.0.0.1:6379[1]> ttl mykey
(integer) 18
127.0.0.1:6379[1]> persist mykey
(integer) 1
127.0.0.1:6379[1]> ttl mykey
(integer) -1

10. RENAME命令

语法: RENAME key newkey
用于修改key的名字为newkey,若newkey已经存在,newkey的旧value将被覆盖,若key不存在返回错误。

sh
127.0.0.1:6379[1]> rename mykey key1
OK
127.0.0.1:6379[1]> get mykey
(nil)
127.0.0.1:6379[1]> get key1
"hello"

警告

RENAME命令底层会执行隐式DEL操作,因此如果删除的key包含一个非常大的value,可能会导致查询的高延迟。

11. RENAMENX命令

语法: RENAMENX key newkey
用于只能newkey不存在时修改key的名称, 若key不存在返回错误。

sh
127.0.0.1:6379[1]> set k2 2
OK
127.0.0.1:6379[1]> set k1 1
OK
## 没有更改成功,因为k2已经被使用
127.0.0.1:6379[1]> renamenx k1 k2
(integer) 0
127.0.0.1:6379[1]> get k1
"1"

12. OBJECT命令

OBJECT 命令有多个子命令:

  • OBJECT REFCOUNT key: 返回给定key引用所储存的值的次数。此命令主要用于除错。
  • OBJECT ENCODING key: 将返回key对应的字符串的字符集类型,如"raw"、"int"、"embstr"、"ht"等。其中"raw"表示字符串的值是非整数类型的二进制数据,"int"表示字符串的值是整数类型,"embstr"表示字符串的值是UTF-8编码的字符串(长度小于等于39字节),"ht"表示字符串的值是UTF-8编码的字符串(长度大于39字节)。
  • OBJECT IDLETIME key: 返回给定key自储存以来的空闲时间(idle, 没有被读取也没有被写入),以秒为单位。
sh
127.0.0.1:6379[1]> set A 100
OK
127.0.0.1:6379[1]> set B A
OK
127.0.0.1:6379[1]> object refcount B
(integer) 1
127.0.0.1:6379[1]> object encoding A
"int"
127.0.0.1:6379[1]> set name "jack"
OK
127.0.0.1:6379[1]> object encoding name
"embstr"
127.0.0.1:6379[1]> object idletime k1
(integer) 516
127.0.0.1:6379[1]> get k1
"1"
127.0.0.1:6379[1]> object idletime k1
(integer) 4

13. DBSIZE命令

语法: DBSIZE
返回当前数据库所有key的数量。

sh
127.0.0.1:6379[1]> dbsize
(integer) 7