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
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数量
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的数据类型,返回值是字符串类型
127.0.0.1:6379> type name
string
4. del命令
语法: DEL key [key ...]
阻塞删除,删除指定key的数据,如果key不存在将忽略
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元数据中删除,真正的删除会在后续异步中操作。
127.0.0.1:6379> unlink tour
(integer) 1
6. ttl命令
语法: TTL key
以秒为单位,返回给定key的剩余生存时间,其中返回-1表示永不过期,返回-2表示key不存在
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 -- 如果传入的过期时间比当前过期时间小会被重置传入的过期时间
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操作将将报错。
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 永不过期
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
不存在返回错误。
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
不存在返回错误。
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, 没有被读取也没有被写入),以秒为单位。
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的数量。
127.0.0.1:6379[1]> dbsize
(integer) 7