redis 键命令
Redis 键命令用于管理 redis 的键. 原文
语法
COMMAND key [key ...]
键命令
DEL
删除指定键, 返回被删除键的数量, 若键不存在直接忽略. 官方文档
语法
DEL key [key ...]
返回值
- 被删除键的数量
示例
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> DEL key1 key2 key3
(integer) 2
EXISTS
检测指定键是否存在. 官方文档
语法
EXISTS key [key ...]
返回值
- 存在的键的数量
示例
redis> SET key1 "Hello"
"OK"
redis> EXISTS key1
(integer) 1
redis> EXISTS nosuchkey
(integer) 0
redis> SET key2 "World"
"OK"
redis> EXISTS key1 key2 nosuchkey
(integer) 2
EXPIRE
设置键 key 的有效期, 若 key 有效期已存在则更新. 过了有效期后, 键 key 会被自动删除 官方文档
语法
EXPIRE key seconds
- seconds 有效期, 单位秒.
返回值
- 1 有效期被设值成功
- 0 key 不存在
示例
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> TTL mykey -- 10 秒执行
(integer) -2 -- key 不存在返回 -2
redis> SET mykey "Hello World"
"OK"
redis> TTL mykey
(integer) -1 -- key 没有有效期关联返回 -1
PEXPIRE 同 EXPIRE, 区别 PEXPIRE 单位为毫秒
EXPIREAT
功能类似 EXPIRE, 不过此命令设置的有效期是时间点, 值为自1970年1月1日以来的秒数. 官方文档
语法
EXPIREAT key timestamp
- timestamp 时间戳
返回值
- 1 有效期被设值成功
- 0 key 不存在
示例
redis> SET mykey "Hello"
"OK"
redis> EXISTS mykey
(integer) 1
redis> EXPIREAT mykey 1293840000
(integer) 1
redis> EXISTS mykey
(integer) 0
PEXPIREAT 同 EXPIREAT, 区别 PEXPIREAT 单位为毫秒
KEYS
返回所有匹配指定模式的 KEY. 该指令通常用于调试问题, 尽量避免在应用代码中使用, 若有类似需求可以考虑使用 SCAN 命令或者 sets 数据结构. 官方文档
语法
KEYS pattern
支持的模式 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 and hbllo
返回值
- 匹配 key 列表
示例
redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"
MIGATE
迁移指定 KEY. 官方文档
语法
MIGRATE host port key|"" destination-db timeout [COPY] [REPLACE] [KEYS key [key ...]]
选项
- COPY 不删除当前实例中的 KEY
- REPLACE 替换远程实例已存在的 KEY
- KEYS 指定 KEY, 若为空则为所有 KEY
返回值
- OK 命令执行成功
- NOKEY 当前实例为空
实例
MIGRATE 192.168.1.34 6379 "" 0 5000 KEYS key1 key2 key3
MOVE
将指定 KEY 移至指定 DB. 官方文档
语法
MOVE key db
返回值
- 1 指定 KEY 被移动成功
- 0 指定 KEY 不存在
OBJECT
查看 Redis 的内部对象, 通常用于调试. 官方文档
语法
OBJECT subcommand [arguments [arguments ...]]
OBJECT 命令支持的子命令:
- OBJECT REFCOUNT <key> 返回指定 KEY 关联值引用的数量.
- OBJECT ENCODING <key> 返回指定 KEY 关联值存贮的编码方式
- OBJECT IDLETIME <key> 返回指定 KEY 未使用的时长
- OBJECT FREQ <key> 返回指定 KEY 使用频率
- OBJECT HELP 打印该命令帮助信息
示例
redis> lpush mylist "Hello World"
(integer) 4
redis> object refcount mylist
(integer) 1
redis> object encoding mylist
"ziplist"
redis> object idletime mylist
(integer) 10
PERSIST
移除 key 的过期时间. 官方文档
语法
PERSIST key
返回值
- 1 指定 key 的过期时间被移除
- 0 指定 key 不存在或未设置过期时间
示例
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> PERSIST mykey
(integer) 1
redis> TTL mykey
(integer) -1
RANDOMKEY
从当前数据库中返回一个随机 KEY. 官方文档
返回值
- key 一个随机 KEY
- nil 数据库为空时返回
RENAME
重命名 KEY, 若新 KEY 已存在则会被覆盖. 官方文档
语法
RENAME key newkey
示例
redis> SET mykey "Hello"
"OK"
redis> RENAME mykey myotherkey
"OK"
redis> GET myotherkey
"Hello"
RENAME
重命名 KEY, 若新 KEY 已存在则会出错. 官方文档
语法
RENAMENX key newkey
示例
redis> SET mykey "Hello"
"OK"
redis> SET myotherkey "World"
"OK"
redis> RENAMENX mykey myotherkey
(integer) 0
redis> GET myotherkey
"World"
SCAN
遍历当前数据库 key. 官方文档
语法
RENAMENX cursor
- cursor 起始光标
返回值
- cursor 下次 SCAN 的其实位置
示例
redis> SET mykey "Hello"
"OK"
redis> SET myotherkey "World"
"OK"
redis> RENAMENX mykey myotherkey
(integer) 0
redis> GET myotherkey
"World"
SORT
排序数据结构 list, set, sorted set 的 key. 官方文档
示例
SORT mylist # 默认升序 key 为数字
SORT mylist DESC # 降序 key 为数字
SORT mylist ALPHA # 字典序 key 为字符串
SORT mylist LIMIT 0 10 # 分页
SORT mylist LIMIT 0 5 ALPHA DESC # 选项组合
SORT mylist BY weight_* # 外部 KEY 排序 weight_1, weight_2, ...
SORT mylist BY nosort # 跳过排序 KEY, 获取外部 KEY
SORT mylist BY weight_* GET object_* # 获取指定外部 KEY, GET 选项可以使用多次, 获取 GET 本身使用模式符 #, 如: SORT mylist BY weight_* GET object_* GET #
SORT mylist BY weight_* STORE resultkey # 存贮排序结果
SORT mylist BY weight_*->fieldname GET object_*->fieldname # 指定对象排序的 KEY
TOUCH
更新 KEY 的最后访问时间, 若 KEY 不存在则忽略. 官方文档
语法
TOUCH key [key ...]
返回值
- 返回被更新 KEY 的个数.
示例
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> TOUCH key1 key2
(integer) 2
TTL
获取的 KEY 的过期时间. 官方文档
语法
TTL key
返回值
- 指定 key 的过期时间
- -2 指定 key 不存在
- -1 指定 key 未设置过期时间
示例
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
** PTTL 同 TTL, 区别 PTTL 返回时间单位是毫秒**
TYPE
获取指定 KEY 的数据类型. 官方文档
语法
TYPE key
返回值
- 指定 key 的过期时间
- none 指定 key 不存在
示例
redis> SET key1 "value"
"OK"
redis> LPUSH key2 "value"
(integer) 1
redis> SADD key3 "value"
(integer) 1
redis> TYPE key1
"string"
redis> TYPE key2
"list"
redis> TYPE key3
"set"
UNLINK
同 DEL 指令, UNLINK 是从 KEY 空间中移除指定 KEY, 是内存级删除非阻塞. 实际删除将在后续持久化中发生. 官方文档
语法
UNLINK key [key ...]
返回值
- 被移除 KEY 的数量.
示例
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> UNLINK key1 key2 key3
(integer) 2
WAIT (待完善)
阻塞当前客户端直到之前所有写命令被成功备份或到达指定的备份命令的数量, 若指定的超时(单位毫秒)到达将返回还未成功备份的命令数量. 官方文档
语法
WAIT numreplicas timeout
- numreplicas 备份的数量
- timeout 阻塞超时时间
返回值
- 备份的数量
示例
> SET foo bar
OK
> WAIT 1 0
(integer) 1
> WAIT 2 1000
(integer) 1