学习

Redis 命令速查表

Prasan Kumar
作者
Prasan Kumar, Redis 技术解决方案开发者
Will Johnston
作者
Will Johnston, Redis 开发者增长经理

连接#

# Syntax
redis-cli -u redis://host:port
redis-cli -u redis://username:password@host:port

# Examples
redis-cli
redis-cli -u redis://localhost:6379
redis-cli -u redis://myuser:mypassword@localhost:6379

# If you run Redis through Docker
docker exec -it <container-id-or-name> redis-cli
注意

要在本地或云端设置 Redis,请参阅 教程

字符串/数字#

命令

语法

示例

输出

SET

SET key value

SET myKey "Hello"

"OK"

描述: 设置指定 key 的字符串值。如果 key 已经存在,其旧值会被覆盖,无论其类型如何。时间复杂度: O(1)

GET

GET key

GET myKey

"Hello"

描述: 获取指定 key 的字符串值。如果 key 不存在,则返回特殊值 nil。时间复杂度: O(1)

MGET

MGET key [key ...]

MGET myKey nonExistentKey

1) "Hello" 2) (nil)

描述: 返回所有指定 key 的值。对于每个不包含字符串值或不存在的 key,都返回特殊值 nil。时间复杂度: O(N)

INCR

INCR key

INCR myCounter

(integer) 1

描述: 将 key 中存储的数字加一。如果 key 不存在,则在执行操作前将其设置为 0。时间复杂度: O(1)

通用#

命令

语法

示例

输出

KEYS

KEYS pattern

KEYS my*

1) "myKey" 2) "myCounter"

描述: 查找所有符合给定模式 pattern 的 key。时间复杂度: O(N)

EXISTS

EXISTS key [key ...]

EXISTS myKey

(integer) 1

描述: 检查一个或多个 key 是否存在。时间复杂度: O(N)

EXPIRE

EXPIRE key seconds

EXPIRE myKey 120

(integer) 1

描述: 为给定 key 设置过期时间,以秒计。过期后,key 会自动删除。时间复杂度:O(1)

TTL

TTL key

TTL myKey

(integer) 113

描述: 以秒为单位,返回给定 key 的剩余生存时间(TTL)。时间复杂度: O(1)

PERSIST

PERSIST key

PERSIST myKey

(integer) 1

描述: 移除给定 key 的过期时间,使其永不过期。时间复杂度:O(1)

SCAN

SCAN cursor [MATCH pattern] [COUNT count]

SCAN 0 MATCH my* COUNT 2

1) "3" 2) 1) "myCounter" 2) "myKey"

描述: 迭代当前 Redis 数据库中的 key。时间复杂度: 每次调用为 O(1)。完整迭代为 O(N)。

DEL

DEL key [key ...]

DEL myKey

(integer) 1

描述: 删除指定的 key。时间复杂度: O(N)

INFO

INFO [section]

INFO server
INFO keyspace

# 服务器

redis_version:6.2.5

redis_git_sha1:00000000

redis_build_id:9893b2a-dirty

redis_mode:standalone

os:Linux 5.4.72-microsoft-standard-WSL2 x86_64

arch_bits:64

...

# 键空间 db0:keys=2,expires=0,avg_ttl=0

描述:返回关于 Redis 服务器的各种信息和统计数据,包含不同部分,如 - server(服务器)、clients(客户端)、memory(内存)、persistence(持久性)、stats(统计)、replication(复制)、cpu、commandstats(命令统计)、latencystats(延迟统计)、sentinel(哨兵)、cluster(集群)、modules(模块)、keyspace(键空间)、errorstats(错误统计)。时间复杂度: O(1)

哈希#

命令

语法

示例

输出

HSET

HSET key field value [field value ...]

HSET h_employee_profile:101 name "Nicol" age 33

(integer) 2

描述: 设置存储在 key 的哈希中指定字段的值。时间复杂度: O(N)

HGET

HGET key field

HGET h_employee_profile:101 name

"Nicol"

描述: 获取存储在 key 的哈希中指定字段的值。时间复杂度: O(1)

HGETALL

HGETALL key

HGETALL h_employee_profile:101

1) "name" 2) "Nicol" 3) "age" 4) "33"

描述: 获取存储在 key 的哈希中所有字段和值。时间复杂度: O(N)

HMGET

HMGET key field1 [field2]

HMGET h_employee_profile:101 name age

1) "Nicol" 2) "33"

描述: 获取存储在 key 的哈希中指定字段的值。时间复杂度: O(N)

集合#

命令

语法

示例

输出

SADD

SADD key member [member ...]

SADD mySet "Hello"

(integer) 1

描述: 将指定成员添加到存储在 key 的集合中。时间复杂度:O(N)

SMEMBERS

SMEMBERS key

SMEMBERS mySet

1) "Hello"

描述:返回存储在 key 的集合中的所有成员。时间复杂度:O(N)

SCARD

SCARD key

SCARD mySet

(integer) 1

描述:返回存储在 key 的集合的基数(元素数量)。时间复杂度:O(1)

SISMEMBER

SISMEMBER key member

SISMEMBER mySet "Hello"

(integer) 1

描述:检查 member 是否是存储在 key 的集合的成员。时间复杂度:O(1)

SDIFF

SDIFF key1 [key2]

SDIFF mySet myOtherSet

1) "Hello"

描述:返回第一个集合与其他集合之间的差异所产生的集合的成员。时间复杂度:O(N)

SDIFFSTORE

SDIFFSTORE destination key1 [key2]

SDIFFSTORE myNewSet mySet myOtherSet

(integer) 1

描述:此命令等同于 SDIFF,但结果集不是返回,而是存储在 destination 中。时间复杂度:O(N)

SREM

SREM key member [member ...]

SREM mySet "Hello"

(integer) 1

描述:从存储在 key 的集合中移除指定的成员。

有序集合#

命令

语法

示例

输出

ZADD

ZADD key score member [score member ...]

ZADD myZSet 1 "one" 2 "two"

(integer) 2

描述: 将所有指定成员及其分数添加到存储在 key 的有序集合中。 时间复杂度: O(log(N))

ZRANGE

ZRANGE key start stop [WITHSCORES]

ZRANGE myZSet 0 -1

1) "one" 2)"two"

描述: 返回存储在 key 的有序集合中指定范围的元素。时间复杂度: O(log(N)+M),其中 M 是返回的元素数量

列表#

命令

语法

示例

输出

LPUSH

LPUSH key value [value ...]

LPUSH myList "World"

(integer) 1

描述: 将指定值插入到存储在 key 的列表头部。 时间复杂度: O(N)

RPUSH

RPUSH key value [value ...]

RPUSH myList "Hello"

(integer) 2

描述: 将指定值插入到存储在 key 的列表尾部。时间复杂度: O(N)

LRANGE

LRANGE key start stop

LRANGE myList 0 -1

1) "World" 2) "Hello"

描述: 返回存储在 key 的列表中指定范围的元素。时间复杂度: O(S+N),其中 S 是 start 的偏移量,N 是指定范围内的元素数量。

LLEN

LLEN key

LLEN myList

(integer) 2

描述: 返回存储在 key 的列表的长度。时间复杂度: O(1)

LPOP

LPOP key [count]

LPOP myList

"World"

描述: 移除并返回存储在 key 的列表的第一个元素。时间复杂度: O(N)

RPOP

RPOP key [count]

RPOP myList

"Hello"

描述: 移除并返回存储在 key 的列表的最后一个元素。时间复杂度: O(N)

#

命令

语法

示例

输出

XADD

XADD key field value [field value ...]

XADD myStream * sensorId "1234" temperature "19.8"

1518951480106-0

描述:将指定的流条目附加到指定 key 的流中。时间复杂度:添加新条目时为 O(1)。

XREAD

XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]

XREAD COUNT 2 STREAMS myStream 0

1) 1) "myStream" 2) 1) 1) "1518951480106-0" 2) 1) "sensorId" 2) "1234" 3) "temperature" 4) "19.8"

描述:从一个或多个流中读取数据,仅返回 ID 大于 调用者报告的最后接收 ID 的条目。

XRANGE

XRANGE key start end [COUNT count]

XRANGE myStream 1518951480106-0 1518951480106-0

1) 1) 1) "1518951480106-0" 2) 1) "sensorId" 2) "1234" 3) "temperature" 4) "19.8"

描述:返回流中与 ID 范围匹配的条目。时间复杂度:O(N),其中 N 是返回的元素数量。如果 N 是常数(例如,总是使用 COUNT 请求前 10 个元素),可以视为 O(1)。

XLEN

XLEN key

XLEN myStream

(integer) 1

描述:返回流中的条目数量。时间复杂度:O(1)

XDEL

XDEL key ID [ID ...]

XDEL myStream 1518951480106-0

(integer) 1

描述:从流中移除指定的条目。时间复杂度:流中每个要删除的单个条目为 O(1)

XTRIM

XTRIM key MAXLEN [~] count

XTRIM myStream MAXLEN 0

(integer) 0

描述:将流截断到不同的长度。时间复杂度:O(N),其中 N 是被驱逐的条目数量。然而,常数时间非常小,因为条目组织在包含多个条目的宏节点中,可以通过一次释放全部释放。

REDIS STACK 命令

Redis Stack 扩展了 Redis OSS 的核心功能,例如跨哈希和 JSON 文档的查询、时间序列数据支持、全文搜索等。

JSON#

命令

语法

示例

输出

JSON.SET

JSON.SET key path value

JSON.SET employee_profile:1 . '{"name":"Alice"}'

OK

描述: 在 key 中指定 path 设置 JSON 值。时间复杂度: O(M+N),其中 M 为原始大小,N 为新大小

JSON.GET

JSON.GET key [path [path ...]]

JSON.GET employee_profile:1
{ "name": 'Alice' }

描述: 返回 key 中指定 path 的 JSON 值。时间复杂度: path 评估为单个值时为 O(N),其中 N 是值的大小;path 评估为多个值时为 O(N),其中 N 是 key 的大小

JSON.NUMINCRBY

JSON.NUMINCRBY key path number

JSON.SET employee_profile:1 .age 30
JSON.NUMINCRBY employee_profile:1 .age 5

35

描述: 增加 JSON 文档中的数字。时间复杂度: path 评估为单个值时为 O(1);path 评估为多个值时为 O(N),其中 N 是 key 的大小

JSON.OBJKEYS

JSON.OBJKEYS key [path]

JSON.OBJKEYS employee_profile:1

1) "name" 2) "age"

描述: 返回 path 引用的对象中的 key。 时间复杂度: path 评估为单个值时为 O(N),其中 N 是对象中的 key 数量;path 评估为多个值时为 O(N),其中 N 是 key 的大小

JSON.OBJLEN

JSON.OBJLEN key [path]

JSON.OBJLEN employee_profile:1

(integer) 2

描述: 报告 key 中指定 path 的 JSON 对象中的 key 数量。 时间复杂度: path 评估为单个值时为 O(1);path 评估为多个值时为 O(N),其中 N 是 key 的大小

JSON.ARRAPPEND

JSON.ARRAPPEND key [path] value [value ...]

JSON.SET employee_profile:1 .colors '["red", "green", "blue"]'
JSON.ARRAPPEND employee_profile:1 .colors '"yellow"'

(integer) 4

描述: 将 JSON 值追加到 path 对应数组的最后一个元素之后。 时间复杂度: 添加每个值为 O(1),添加多个值为 O(N),其中 N 是 key 的大小

JSON.ARRINSERT

JSON.ARRINSERT key path index value [value ...]

JSON.ARRINSERT employee_profile:1 .colors 2 '"purple"'

(integer) 5

描述: 将 JSON 值插入到 path 对应数组的 index 位置之前(现有元素向右移动)。 时间复杂度: path 评估为单个值时为 O(N),其中 N 是数组大小;path 评估为多个值时为 O(N),其中 N 是 key 的大小

JSON.ARRINDEX

JSON.ARRINDEX key path value [start [stop]]

JSON.ARRINDEX employee_profile:1 .colors '"purple"'

(integer) 2

描述: 在数组中搜索 JSON 值第一次出现的位置。 时间复杂度: path 评估为单个值时为 O(N),其中 N 是数组大小;path 评估为多个值时为 O(N),其中 N 是 key 的大小

搜索与查询#

命令

语法

示例

输出

FT.CREATE

FT.CREATE index
  [ON HASH | JSON]
  [PREFIX count prefix [prefix ...]]
  [FILTER {filter}]
  SCHEMA
  field_name [AS alias] TEXT | TAG | NUMERIC | GEO | VECTOR | GEOSHAPE [ SORTABLE [UNF]]
  [NOINDEX]
   ...

FT.CREATE staff:index
    ON JSON
    PREFIX 1 staff:
    SCHEMA
    "$.name" AS name TEXT
    "$.age" AS age NUMERIC
    "$.isSingle"  AS isSingle TAG
    '$["skills"][*]' AS skills TAG SEPARATOR "|"

OK

描述: 使用给定的规范创建一个索引。时间复杂度: O(K) 其中 K 是文档中的字段数,O(N) 适用于键空间中的键

FT.SEARCH

FT.SEARCH index query
  [FILTER numeric_field min max [ FILTER numeric_field min max ...]]
  [RETURN count identifier [AS property] [ identifier [AS property] ...]]
  [SORTBY sortby [ ASC | DESC] [WITHCOUNT]]
  [LIMIT offset num]
  [PARAMS nargs name value [ name value ...]]
JSON.SET "staff:1" "$" '{"name":"Bob","age":22,"isSingle":true,"skills":["NodeJS","MongoDB","React"]}' 

JSON.SET "staff:2" "$" '{"name":"Alex","age":45,"isSingle":true,"skills":["Python","MySQL","Angular"]}' 

FT.SEARCH staff:index
  "(@name:'alex')"
  RETURN 1 $ LIMIT 0 10 

FT.SEARCH staff:index
  "((@isSingle:{true}) (@age:[(18 +inf]))"
  RETURN 1 $ LIMIT 0 10

匹配文档数据

描述: 使用查询搜索索引,返回文档或仅返回 ID。 时间复杂度: O(N)

FT.AGGREGATE

FT.AGGREGATE index query
  [LOAD count field [field ...]]
  [ GROUPBY nargs property [property ...] [ REDUCE function nargs arg [arg ...] [AS name] ...
  [ SORTBY nargs [ property ASC | DESC [ property ASC | DESC ...]] [MAX num] [WITHCOUNT]
  [ APPLY expression AS name  ...
  [ LIMIT offset num]
  [FILTER filter]
  [ PARAMS nargs name value [ name value ...]]
FT.AGGREGATE staff:index "(@age:[(18 +inf])"
  GROUPBY 1 @age
  	REDUCE COUNT_DISTINCT 1 @name AS staff_count
    | age | staff_count |
    | ----| ------------|
    | 22  | 1           |
    | 45  | 1           |

描述: 在索引上运行搜索查询,并对结果执行聚合转换。

FT.INFO

FT.INFO index

FT.INFO staff:index

索引的配置参数和统计信息列表。

描述: 返回索引的信息和统计信息。时间复杂度: O(1)

FT.DROPINDEX

FT.DROPINDEX index [DD]

FT.DROPINDEX staff:index

OK

描述: 删除现有索引。时间复杂度:O(1) 或 O(N) 如果文档被删除,其中 N 是键空间中的键数量