redis 命令行客户端

  1. Redis 安装完成后就自带了命令行客户端:redis-cli,使用方式如下:
redis-cli [options] [commonds]
  1. 其中常见的 options 有:
    • -h 127.0.0.1:指定要连接的 redis 节点的 IP 地址,默认是 127.0.0.1。
    • -p 6379:指定要连接的 redis 节点的端口,默认是 6379。
    • -a 123456:指定redis的访问密码。
  2. commonds 就是 Redis 的操作命令,例如:
    • ping:与redis服务端做心跳测试,服务端正常会返回pong
  3. 不指定commond时,会进入redis-cli的交互控制台。
  4. Redis 默认有16个仓库,编号从0至15。通过配置文件可以设置仓库数量,但是不超过16,并且不能自定义仓库名称。(建议只设置一个数据库)
  5. 如果是基于 redis-cli 连接 Redis 服务,可以通过 select 命令来选择数据库:select 0

redis 通用命令

  1. 通用指令是部分数据类型的,都可以使用的指令。
  2. 官网地址:https://redis.io/docs/latest/commands/?group=generic
  3. redis客户端查询命令:help @generic

COPY

  1. 将一个key的值复制到一个新key。

  2. 语法:

COPY source destination [DB destination-db] [REPLACE]
  1. 使用示例:
# 设置key/value
SET dolly "sheep"

# 克隆dolly
COPY dolly clone
GET clone

DEL

  1. 删除一个或多个key。

  2. 语法:

DEL key [key ...]
  1. 使用示例:
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> DEL key1 key2 key3
(integer) 2

DUMP

  1. 返回存储在键中的值的序列化表示形式。

  2. 语法:

DUMP key
  1. 使用示例:
> SET mykey 10
OK
> DUMP mykey
"\x00\xc0\n\n\x00n\x9fWE\x0e\xaec\xbb"

EXISTS

  1. 确定是否存在一个或多个key。

  2. 语法:

EXISTS key [key ...]
  1. 示例:
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

  1. 以秒为单位设置密钥的过期时间(单位/秒)。
  2. 语法:
    • NX - 仅当key没有过期时间时有效。
    • XX - 仅当key有过期时间时有效。
    • GT - 仅当新过期时间大于当前过期时间时有效。
    • LT - 仅当新过期时间小于当前过期时间时有效。
EXPIRE key seconds [NX | XX | GT | LT]
  1. 示例:
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

  1. 将key的过期时间设置为Unix时间戳。
  2. 语法:
    • NX - 仅当key没有过期时间时有效。
    • XX - 仅当key有过期时间时有效。
    • GT - 仅当新过期时间大于当前过期时间时有效。
    • LT - 仅当新过期时间小于当前过期时间时有效。
EXPIREAT key unix-time-seconds [NX | XX | GT | LT]
  1. 示例:
redis> SET mykey "Hello"
"OK"
redis> EXISTS mykey
(integer) 1
redis> EXPIREAT mykey 1293840000
(integer) 1
redis> EXISTS mykey
(integer) 0

EXPIRETIME

  1. 以Unix时间戳形式返回key的过期时间。
  2. 语法:
PEXPIRETIME key
  1. 示例:
redis> SET mykey "Hello"
"OK"
redis> PEXPIREAT mykey 33177117420000
(integer) 1
redis> PEXPIRETIME mykey
(integer) 33177117420000

KEYS

  1. 返回与模式匹配的所有key名。(正式环境中不建议使用)

  2. 语法:

KEYS pattern
  • 支持的全局样式模式:
    • h?llo matches hello, hallo and hxllo
    • h*llo matches hllo and heeeello
    • h[ae]llo matches hello and hallo, but not hillo
    • h[^e]llo matches hallo, hbllo, … but not hello
    • h[a-b]llo matches hallo and hbllo

果要逐字匹配特殊字符,请使用\来转义它们。

  1. 示例:
# 设置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

  1. 自动将密钥从一个Redis实例传输到另一个Redis实例。
  2. 语法:
MIGRATE host port <key | ""> destination-db timeout [COPY] [REPLACE]
    [AUTH password | AUTH2 username password] [KEYS key [key ...]]
  1. 示例:
MIGRATE 192.168.1.34 6379 "" 0 5000 KEYS key1 key2 key3

MOVE

  1. 将key移动到另一个数据库。
  2. 语法:
MOVE key db

OBJECT ENCODING

  1. 返回Redis对象的内部编码。(查看key的数据结构)
  2. 语法:
OBJECT ENCODING key

OBJECT FREQ

  1. 返回一个Redis对象的对数访问频率计数器。
  2. 语法:
OBJECT FREQ key

OBJECT IDLETIME

  1. 返回上一次访问Redis对象后的时间(秒)。
  2. 语法:
OBJECT IDLETIME key
  1. 示例:
# 距离上一次访问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

  1. 返回key值的引用计数。
  2. 语法:
OBJECT REFCOUNT key
  1. 示例:
127.0.0.1:6379> OBJECT REFCOUNT name
(integer) 1

PERSIST

  1. 删除key的过期时间。
  2. 语法:
PERSIST key
  1. 示例:
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

  1. 以毫秒为单位设置key的过期时间。
  2. 语法:
PEXPIRE key milliseconds [NX | XX | GT | LT]

NX - 仅当key没有过期时间时有效。

XX - 仅当key有过期时间时有效。

GT - 仅当新过期时间大于当前过期时间时有效。

LT - 仅当新过期时间小于当前过期时间时有效。

  1. 示例:
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

  1. 将key的过期时间设置为Unix毫秒时间戳。
  2. 语法:
PEXPIREAT key unix-time-milliseconds [NX | XX | GT | LT]

NX - 仅当key没有过期时间时有效。

XX - 仅当key有过期时间时有效。

GT - 仅当新过期时间大于当前过期时间时有效。

LT - 仅当新过期时间小于当前过期时间时有效。

  1. 示例:
redis> SET mykey "Hello"
"OK"
redis> PEXPIREAT mykey 1555555555005
(integer) 1
redis> TTL mykey
(integer) -2
redis> PTTL mykey
(integer) -2

PEXPIRETIME

  1. 以Unix毫秒时间戳的形式返回key的过期时间。

  2. 语法:

PEXPIRETIME key
  1. 示例:
redis> SET mykey "Hello"
"OK"
redis> PEXPIREAT mykey 33177117420000
(integer) 1
redis> PEXPIRETIME mykey
(integer) 33177117420000

PTTL

  1. 以毫秒为单位返回key的过期时间。

  2. 语法:

PTTL key
  1. 示例:
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 1
(integer) 1
redis> PTTL mykey
(integer) 999

RANDOMKEY

  1. 从数据库返回一个随机的key名。

  2. 语法:

RANDOMKEY
  1. 示例:
[root@hcss-ecs-7943 ~]# docker exec -it redis redis-cli
127.0.0.1:6379> RANDOMKEY
"name"

RENAME

  1. 重命名key并覆盖目标。

  2. 语法:

RENAME key newkey
  1. 示例:
redis> SET mykey "Hello"
"OK"
redis> RENAME mykey myotherkey
"OK"
redis> GET myotherkey
"Hello"

RENAMENX

  1. 仅当目标key名(newkey)不存在时才重命名key。

  2. 语法:

RENAMENX key newkey
  1. 示例:
redis> SET mykey "Hello"
"OK"
redis> SET myotherkey "World"
"OK"
redis> RENAMENX mykey myotherkey
(integer) 0
redis> GET myotherkey
"World"

RESTORE

  1. 从值的序列化表示创建key。

  2. 语法:

RESTORE key ttl serialized-value [REPLACE] [ABSTTL]
    [IDLETIME seconds] [FREQ frequency]
  1. 示例:
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

  1. 遍历数据库中的key名。

  2. 语法:

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
  1. 示例:
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

  1. 对列表、集合或已排序集合中的元素进行排序,并可选择存储结果。

  2. 语法:

SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern
    ...]] [ASC | DESC] [ALPHA] [STORE destination]

SORT_RO

  1. 返回列表、集合或已排序集合的已排序元素。

  2. 语法:

SORT_RO key [BY pattern] [LIMIT offset count] [GET pattern [GET
    pattern ...]] [ASC | DESC] [ALPHA]
  1. 示例:
SORT_RO mylist BY weight_*->fieldname GET object_*->fieldname

TOUCH

  1. 在更新最后一次访问key的时间后,返回指定键中现有key的个数。

  2. 语法:

TOUCH key [key ...]
  1. 示例:
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> TOUCH key1 key2
(integer) 2

TTL

  1. 以秒为单位返回key的过期时间。

  2. 语法:

TTL key
  1. 示例:
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10

TYPE

  1. 确定存储在key中的值的类型。

  2. 语法:

TYPE key
  1. 示例:
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"
  1. 异步删除一个或多个key。

  2. 语法:

UNLINK key [key ...]
  1. 示例:
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> UNLINK key1 key2 key3
(integer) 2

WAIT

  1. 阻塞,直到连接发送的上述所有写命令的异步复制完成。

  2. 语法:

WAIT numreplicas timeout
  1. 示例:
> SET foo bar
OK
> WAIT 1 0
(integer) 1
> WAIT 2 1000
(integer) 1

WAITAOF

  1. 阻塞,直到连接发送的所有上述写命令都被写入主服务器和/或副本的仅追加文件。

  2. 语法:

WAITAOF numlocal numreplicas timeout
  1. 示例:
> SET foo bar
OK
> WAITAOF 1 0 0
1) (integer) 1
2) (integer) 0
> WAITAOF 0 1 1000
1) (integer) 1
2) (integer) 0