redis 通用命令
- redis官方网站:https://redis.io/
- redis官方命令文档:https://redis.io/docs/latest/commands/
- redis是 NoSql 数据库,以键值对的形式存储。
redis 命令行客户端
- Redis 安装完成后就自带了命令行客户端:redis-cli,使用方式如下:
redis-cli [options] [commonds]
- 其中常见的 options 有:
-h 127.0.0.1
:指定要连接的 redis 节点的 IP 地址,默认是 127.0.0.1。-p 6379
:指定要连接的 redis 节点的端口,默认是 6379。-a 123456
:指定redis的访问密码。
- commonds 就是 Redis 的操作命令,例如:
ping
:与redis服务端做心跳测试,服务端正常会返回pong
。
- 不指定commond时,会进入
redis-cli
的交互控制台。 - Redis 默认有16个仓库,编号从0至15。通过配置文件可以设置仓库数量,但是不超过16,并且不能自定义仓库名称。(建议只设置一个数据库)
- 如果是基于 redis-cli 连接 Redis 服务,可以通过 select 命令来选择数据库:select 0。
redis 通用命令
- 通用指令是部分数据类型的,都可以使用的指令。
- 官网地址:https://redis.io/docs/latest/commands/?group=generic
- redis客户端查询命令:
help @generic
。
COPY
-
将一个key的值复制到一个新key。
-
语法:
COPY source destination [DB destination-db] [REPLACE]
- 使用示例:
# 设置key/value
SET dolly "sheep"
# 克隆dolly
COPY dolly clone
GET clone
DEL
-
删除一个或多个key。
-
语法:
DEL key [key ...]
- 使用示例:
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> DEL key1 key2 key3
(integer) 2
DUMP
-
返回存储在键中的值的序列化表示形式。
-
语法:
DUMP key
- 使用示例:
> SET mykey 10
OK
> DUMP mykey
"\x00\xc0\n\n\x00n\x9fWE\x0e\xaec\xbb"
EXISTS
-
确定是否存在一个或多个key。
-
语法:
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
- 以秒为单位设置密钥的过期时间(单位/秒)。
- 语法:
- NX - 仅当key没有过期时间时有效。
- XX - 仅当key有过期时间时有效。
- GT - 仅当新过期时间大于当前过期时间时有效。
- LT - 仅当新过期时间小于当前过期时间时有效。
EXPIRE key seconds [NX | XX | GT | LT]
- 示例:
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> SET mykey "Hello World"
"OK"
redis> TTL mykey
(integer) -1
redis> EXPIRE mykey 10 XX
(integer) 0
redis> TTL mykey
(integer) -1
redis> EXPIRE mykey 10 NX
(integer) 1
redis> TTL mykey
(integer) 10
EXPIREAT
- 将key的过期时间设置为Unix时间戳。
- 语法:
- NX - 仅当key没有过期时间时有效。
- XX - 仅当key有过期时间时有效。
- GT - 仅当新过期时间大于当前过期时间时有效。
- LT - 仅当新过期时间小于当前过期时间时有效。
EXPIREAT key unix-time-seconds [NX | XX | GT | LT]
- 示例:
redis> SET mykey "Hello"
"OK"
redis> EXISTS mykey
(integer) 1
redis> EXPIREAT mykey 1293840000
(integer) 1
redis> EXISTS mykey
(integer) 0
EXPIRETIME
- 以Unix时间戳形式返回key的过期时间。
- 语法:
PEXPIRETIME key
- 示例:
redis> SET mykey "Hello"
"OK"
redis> PEXPIREAT mykey 33177117420000
(integer) 1
redis> PEXPIRETIME mykey
(integer) 33177117420000
KEYS
-
返回与模式匹配的所有key名。(正式环境中不建议使用)
-
语法:
KEYS pattern
- 支持的全局样式模式:
h?llo
matcheshello
,hallo
andhxllo
h*llo
matcheshllo
andheeeello
h[ae]llo
matcheshello
andhallo,
but nothillo
h[^e]llo
matcheshallo
,hbllo
, … but nothello
h[a-b]llo
matcheshallo
andhbllo
果要逐字匹配特殊字符,请使用\
来转义它们。
- 示例:
# 设置firstname Jack、lastname Stuntman、age 35
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) "firstname"
3) "age"
MIGRATE
- 自动将密钥从一个Redis实例传输到另一个Redis实例。
- 语法:
MIGRATE host port <key | ""> destination-db timeout [COPY] [REPLACE]
[AUTH password | AUTH2 username password] [KEYS key [key ...]]
- 示例:
MIGRATE 192.168.1.34 6379 "" 0 5000 KEYS key1 key2 key3
MOVE
- 将key移动到另一个数据库。
- 语法:
MOVE key db
OBJECT ENCODING
- 返回Redis对象的内部编码。(查看key的数据结构)
- 语法:
OBJECT ENCODING key
OBJECT FREQ
- 返回一个Redis对象的对数访问频率计数器。
- 语法:
OBJECT FREQ key
OBJECT IDLETIME
- 返回上一次访问Redis对象后的时间(秒)。
- 语法:
OBJECT IDLETIME key
- 示例:
# 距离上一次访问name经过了多少秒
127.0.0.1:6379> OBJECT idletime name
(integer) 141
127.0.0.1:6379> OBJECT idletime name
(integer) 147
127.0.0.1:6379> OBJECT idletime name
(integer) 149
OBJECT REFCOUNT
- 返回key值的引用计数。
- 语法:
OBJECT REFCOUNT key
- 示例:
127.0.0.1:6379> OBJECT REFCOUNT name
(integer) 1
PERSIST
- 删除key的过期时间。
- 语法:
PERSIST 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
PEXPIRE
- 以毫秒为单位设置key的过期时间。
- 语法:
PEXPIRE key milliseconds [NX | XX | GT | LT]
NX - 仅当key没有过期时间时有效。
XX - 仅当key有过期时间时有效。
GT - 仅当新过期时间大于当前过期时间时有效。
LT - 仅当新过期时间小于当前过期时间时有效。
- 示例:
redis> SET mykey "Hello"
"OK"
redis> PEXPIRE mykey 1500
(integer) 1
redis> TTL mykey
(integer) 2
redis> PTTL mykey
(integer) 1499
redis> PEXPIRE mykey 1000 XX
(integer) 1
redis> TTL mykey
(integer) 1
redis> PEXPIRE mykey 1000 NX
(integer) 0
redis> TTL mykey
(integer) 1
PEXPIREAT
- 将key的过期时间设置为Unix毫秒时间戳。
- 语法:
PEXPIREAT key unix-time-milliseconds [NX | XX | GT | LT]
NX - 仅当key没有过期时间时有效。
XX - 仅当key有过期时间时有效。
GT - 仅当新过期时间大于当前过期时间时有效。
LT - 仅当新过期时间小于当前过期时间时有效。
- 示例:
redis> SET mykey "Hello"
"OK"
redis> PEXPIREAT mykey 1555555555005
(integer) 1
redis> TTL mykey
(integer) -2
redis> PTTL mykey
(integer) -2
PEXPIRETIME
-
以Unix毫秒时间戳的形式返回key的过期时间。
-
语法:
PEXPIRETIME key
- 示例:
redis> SET mykey "Hello"
"OK"
redis> PEXPIREAT mykey 33177117420000
(integer) 1
redis> PEXPIRETIME mykey
(integer) 33177117420000
PTTL
-
以毫秒为单位返回key的过期时间。
-
语法:
PTTL key
- 示例:
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 1
(integer) 1
redis> PTTL mykey
(integer) 999
RANDOMKEY
-
从数据库返回一个随机的key名。
-
语法:
RANDOMKEY
- 示例:
[root@hcss-ecs-7943 ~]# docker exec -it redis redis-cli
127.0.0.1:6379> RANDOMKEY
"name"
RENAME
-
重命名key并覆盖目标。
-
语法:
RENAME key newkey
- 示例:
redis> SET mykey "Hello"
"OK"
redis> RENAME mykey myotherkey
"OK"
redis> GET myotherkey
"Hello"
RENAMENX
-
仅当目标key名(newkey)不存在时才重命名key。
-
语法:
RENAMENX key newkey
- 示例:
redis> SET mykey "Hello"
"OK"
redis> SET myotherkey "World"
"OK"
redis> RENAMENX mykey myotherkey
(integer) 0
redis> GET myotherkey
"World"
RESTORE
-
从值的序列化表示创建key。
-
语法:
RESTORE key ttl serialized-value [REPLACE] [ABSTTL]
[IDLETIME seconds] [FREQ frequency]
- 示例:
redis> DEL mykey
0
redis> RESTORE mykey 0 "\n\x17\x17\x00\x00\x00\x12\x00\x00\x00\x03\x00\
x00\xc0\x01\x00\x04\xc0\x02\x00\x04\xc0\x03\x00\
xff\x04\x00u#<\xc0;.\xe9\xdd"
OK
redis> TYPE mykey
list
redis> LRANGE mykey 0 -1
1) "1"
2) "2"
3) "3"
SCAN
-
遍历数据库中的key名。
-
语法:
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
- 示例:
redis 127.0.0.1:6379> scan 0
1) "17"
2) 1) "key:12"
2) "key:8"
3) "key:4"
4) "key:14"
5) "key:16"
6) "key:17"
7) "key:15"
8) "key:10"
9) "key:3"
10) "key:7"
11) "key:1"
redis 127.0.0.1:6379> scan 17
1) "0"
2) 1) "key:5"
2) "key:18"
3) "key:0"
4) "key:2"
5) "key:19"
6) "key:13"
7) "key:6"
8) "key:9"
9) "key:11"
SORT
-
对列表、集合或已排序集合中的元素进行排序,并可选择存储结果。
-
语法:
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern
...]] [ASC | DESC] [ALPHA] [STORE destination]
SORT_RO
-
返回列表、集合或已排序集合的已排序元素。
-
语法:
SORT_RO key [BY pattern] [LIMIT offset count] [GET pattern [GET
pattern ...]] [ASC | DESC] [ALPHA]
- 示例:
SORT_RO mylist BY weight_*->fieldname GET object_*->fieldname
TOUCH
-
在更新最后一次访问key的时间后,返回指定键中现有key的个数。
-
语法:
TOUCH key [key ...]
- 示例:
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> TOUCH key1 key2
(integer) 2
TTL
-
以秒为单位返回key的过期时间。
-
语法:
TTL key
- 示例:
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
TYPE
-
确定存储在key中的值的类型。
-
语法:
TYPE 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
-
异步删除一个或多个key。
-
语法:
UNLINK key [key ...]
- 示例:
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> UNLINK key1 key2 key3
(integer) 2
WAIT
-
阻塞,直到连接发送的上述所有写命令的异步复制完成。
-
语法:
WAIT numreplicas timeout
- 示例:
> SET foo bar
OK
> WAIT 1 0
(integer) 1
> WAIT 2 1000
(integer) 1
WAITAOF
-
阻塞,直到连接发送的所有上述写命令都被写入主服务器和/或副本的仅追加文件。
-
语法:
WAITAOF numlocal numreplicas timeout
- 示例:
> SET foo bar
OK
> WAITAOF 1 0 0
1) (integer) 1
2) (integer) 0
> WAITAOF 0 1 1000
1) (integer) 1
2) (integer) 0