Redis 是 Remote Dictionary Server(Redis)的缩写,是一个由 Salvatore Sanfilippo 编写的 Key-Value 存储系统,是一个使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型的 Key-Value 数据库,并提供多种语言的 API。
本文归纳了 Redis List、HASH、ZSET、PUB/SUB 相关的命令。
官方文档 Command reference
String
关键字符解释
字符 | 全拼 | 解释 |
---|---|---|
M | Multiple | 多重的 |
EX | Set the specified expire time, in seconds. | 设置秒级过期时间 |
PX | Set the specified expire time, in milliseconds. | 设置毫秒级过期时间 |
NX | Only set the key if it does not already exist. | 不存在时 SET |
XX | Only set the key if it already exist. | 存在时 SET |
INCR | Increment | 增加 |
DECR | Decrement | 减少 |
命令列表
命令 | 用法 | 描述 | 备注 | |
---|---|---|---|---|
GET / MGET | GET key / MGET key [key …] | 返回给定 key 的值 | 不存在返回 nil | |
SET / MSET | SET key value / MSET key value [key value …] | 设置给定 kv,存在则覆盖 | SET key value [EX seconds] [PX milliseconds] [NX\ | XX] |
APPEND | APPEND key value | 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾 | 如 key 不存在,则直接将 key 设置为 value | |
SETEX / PSETEX | SETEX / PSETEX key time value | 设置 秒/毫秒 级过期时间 | ||
SETNX / MSETNX | STENX key value / MSETNX key value | 不存在指定 key 时,设置 value | ||
GETSET | GETSET key value | 返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 nil | ||
GETRANGE | GETRANGE key offset end | 返回 key 中字符串值的子字符 | ||
SETRANGE | SETRANGE key offset end | 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始 | ||
GETBIT | GETBIT key offset | 对 key 所储存的字符串值,获取指定偏移量上的位(bit) | ||
SETBIT | SETBIT key offset value | 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit) | ||
INCR / DECR | INCR key / DECR key | 将 key 中储存的数字值 加/减 一 | 如 key 不存在,则先初始化为 0,再进行计算操作 | |
INCRBY / DECRBY | INCRBY key amount / DECR key amount | 将 key 所储存的值 加/减 给定的值 amount | ||
INCRBYFLOAT | INCRBYFLOAT key increment | 将 key 所储存的值加上给定的浮点增量值(increment) | ||
STRLEN | STRLEN key | 返回 key 所储存的字符串值的长度 |
List
关键字符解释
字符 | 全拼 | 解释 |
---|---|---|
L | Left | 列表头部 |
R | Right | 列表尾部 |
B | Block | 阻塞 |
REM | REMove | 移除 |
命令列表
命令 | 用法 | 描述 | 备注 | |
---|---|---|---|---|
L PUSH/R PUSH | X key element [element …] | 按照对应方向向列表 key 插入一个或多个值。 | 如果列表不存在,一个空列表会被创建并执行 X 操作。 | |
L PUSH X/R PUSH X | X key element [element …] | 按照对应方向向存在的列表 key 插入一个或多个值。 | 如果列表不存在,操作无效。 | |
L POP/R POP | X key | 按照对应方向对列表 key 移除并返回一个元素。 | 移除列表的最后一个元素时,也将空列表一并移除(即不能通过 LPUSHX 等命令添加元素)。 | |
R POP L PUSH | RPOPLPUSH source destination | 命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。 | ||
B L POP/B R POP/B R POP L PUSH | X args timeout | 以阻塞的方式调用命令,timeout(s) 为超时时间。 | Timeout 为 0 代表无限期阻塞 | |
L INDEX | LINDEX key index | 通过索引获取列表中的元素。 | 索引从 0 开始 | |
L RANGE | LRANGE key start end | 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。 | ||
L INSERT | LINSERT key BEFORE\ | AFTER exist_value insert_element | 在列表的元素前或者后插入元素。 | |
L SET | LSET key index value | 通过索引设置列表元素的值。 | ||
L TRIM | LTRIM key start end | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 | ||
L REM | LREM key count value | 移除 count 个与 value 值相同的列表元素。 | count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。 count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。 count = 0 : 移除表中所有与 VALUE 相等的值。 |
|
L LEN | LLEN key | 返回列表 key 的长度。 | 如果 key 不存在,则 key 被解释为一个空列表,返回 0。 |
Hash
关键字符解释
字符 | 全拼 | 解释 |
---|---|---|
M | Multiple | 多重的 |
NX | Not already eXist | 不存在时 |
INCR | INCRement | 增加 |
命令列表
命令 | 用法 | 描述 | 备注 |
---|---|---|---|
H GET | HGET key field | 获取哈希表中指定字段的值 | 如不存在则返回 nil |
H M GET | HMGET key field [field…] | 获取哈希表中所有给定字段的值 | 如某字段不存在,则返回 nil |
H GET ALL | HGETALL key | 获取哈希表中所有字段和值 | 若 key 不存在,返回空列表。 |
H KEYS | HKEYS key | 获取所有哈希表中的字段 | |
H VALS | HVAL key | 获取哈希表中所有值 | |
H SET | HSET key field value | 将哈希表 key 中的字段 field 的值设为 value | 不存在则创建,存在则覆盖。 |
H M SET | HMSET key field value [field value …] | 同时将多个 field-value (域-值)对设置到哈希表 key 中 | 不存在则创建,存在则覆盖。 |
H SET NX | HSETNX key field value | 只有在字段 field 不存在时,设置哈希表字段的值 | |
H DEL | HDEL key field [field…] | 删除一个或多个哈希表字段 | |
H EXISTS | HEXISTS key field | 查看哈希表 key 中,指定的字段是否存在 | |
H LEN | HLEN key | 获取哈希表中字段的数量 | |
H INCRBY | HINCRBY key field incr_by_number | 为哈希表 key 中的指定字段的整数值加上增量 increment | 本操作的值被限制在 64 位(bit)有符号数字表示之内。 |
H INCRBY FLOAT | HINCRBYFLOAT key field incr_by_number | 为哈希表 key 中的指定字段的浮点数值加上增量 increment |
Sorted Set
关键字符解释
字符 | 全拼 | 解释 |
---|---|---|
REV | REVerse | 逆序 |
REM | REMove | 移除 |
LEX | LEXicographical order | 字典序 |
命令列表
命令 | 用法 | 描述 | 备注 | ||
---|---|---|---|---|---|
Z ADD | ZADD key score value [score value …] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 | |||
Z SCORE | ZSCORE key member | 返回有序集中,成员的分数值。 | 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。 | ||
Z CARD | ZCARD key | 计算集合中元素的数量 | |||
Z COUNT | ZCOUNT key min max | 计算有序集合中分数区间(min, max]的成员数量。 | -inf 表示负无穷 float,+inf 表示正无穷 float | ||
Z LEX COUNT | ZLEXCOUNT key min max | 计算有序集合中指定字典区间内成员数量。 | - 表示 string 最小成员,+ 表示 string 最大成员,[string 表示 string range item | ||
Z RANGE/Z REV RANGE | ZRANGE/ZREVRANGE key start stop [WITHSCORES] | 返回有序集中,指定区间内的成员。成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典序(lexicographical order)来排列。ZREVRANGE 返回的是逆序。 | 以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。 | ||
Z RANGE BY SCORE/Z REV RANGE BY SCORE | X key (min max/ max min) [WITHSCORES] [LIMIT offset count] | 返回有序集中指定分数区间内的所有的成员。 | |||
Z RANGE BY LEX | ZRANGEBYLEX key min max [LIMIT offset count] | 通过字典区间返回有序集合的成员。 | |||
Z RANK/Z REV RANK | ZRANK key member | 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。ZREVRANK 返回的是逆序排名。 | 与 index 相同,rank 也是从 0 开始计数的。 | ||
Z REM | ZREM key member | 移除有序集中的一个或多个成员,不存在的成员将被忽略。 | |||
Z REM RANGE BY(RANK \ | SCORE \ | LEX) | X key start stop | 移除有序集中,指定排名(rank)或分数(score)或字典(lexicographical)区间内的所有成员。 | 返回被移除成员的数量。 |
Z SCAN | ZSCAN key cursor [MATCH pattern] [COUNT count] | 用于迭代有序集合中的元素(包括元素成员和元素分值) | |||
Z INCRBY | ZINCRBY key increment member | 对有序集合中指定成员的分数加上增量 increment(增量可为负数)。 | 当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。 | ||
Z UNION STORE | ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM\ | MIN\ | MAX] | 计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。 | 默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 。 |
Z INTER STORE | ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM\ | MIN\ | MAX] | 计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。 | 默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。 |
Pub & Sub
关键字符解释
字符 | 全拼 | 解释 |
---|---|---|
P | Pattern | 模式(匹配模式) |
命令列表
命令 | 用法 | 描述 | 备注 |
---|---|---|---|
SUBSCRIBE | SUBSCRIBE channel [channel …] | 订阅给定的一个或多个频道的信息 | |
PSUBSCRIBE | PSUBSCRIBE pattern [pattern …] | 订阅一个或多个符合给定模式的频道 | * 作为匹配符 |
UNSUBSCRIBE | UNSUBSCRIBE [channel [channel …]] | 指退订给定的频道 | |
PUNSUBSCRIBE | PUNSUBSCRIBE [pattern [pattern …]] | 退订所有给定模式的频道 | |
PUBLISH | PUBLISH channel message | 将信息发送到指定的频道 | |
PUBSUB | PUBSUB subcommand [argument [argument …]] | 查看订阅与发布系统状态 | subcommand: CHANNELS [pattern] 列出当前的活跃频道。 NUMSUB [channel-1 … channel-N] 返回给定频道的订阅者数量。 NUMPAT 返回订阅模式的数量。 |
Stream
数据结构
数据结构 Stream 是一个新的强大的支持多播的可持久化的消息队列,主要借鉴了 Kafka 的设计。
Redis Stream 的结构如上图所示,它有一个消息链表,序列化储存所有加入的消息,每个消息都有一个唯一的 ID 并且会被持久化。
每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用 XADD 指令追加消息时自动创建。
每个 Stream 都可以挂多个消费组(Consumer Group),每个消费组会有个游标 last_delivered_id 在 Stream 数组之上往前移动,表示当前消费组已经消费到哪条消息了。每个消费组都有一个 Stream 内唯一的名称,消费组不会自动创建,它需要单独的指令 XGROUP CREATE 进行创建,需要指定从 Stream 的某个消息 ID 开始消费,这个 ID 用来初始化 last_delivered_id 变量。
每个消费组的状态都是独立的,相互不受影响。也就是说同一份 Stream 内部的消息会被每个消费组都消费到。
同一个消费组可以挂接多个消费者(Consumer),这些消费者之间是竞争关系,任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。每个消费者者有一个组内唯一名称。
消费者内部会有个状态变量 pending_ids,它记录了当前已经被客户端读取的消息,但是还没有 ack(类似 XACK)。如果客户端没有 ack,这个变量里面的消息ID会越来越多,一旦某个消息被 ack,它就开始减少。这个 pending_ids 变量在 Redis 官方被称之为 PEL,也就是 Pending Entries List,这是一个很核心的数据结构,它用来确保客户端至少消费了消息一次,而不会在网络传输的中途丢失了没处理。
如果该消息已经发送给该消费者,并且它只是再次重新获取相同的消息,那么最后送达时间会被更新为当前时间,并且送达次数会加1。你可以使用XPENDING
命令访问这些消息属性。
消息ID和内容
消息 ID 的形式是 TimestampInMillis-Sequence,例如 1527846880572-5,它表示当前的消息在毫米时间戳 1527846880572 时产生,并且是该毫秒内产生的第 5 条消息。消息 ID 可以由服务器自动生成,也可以由客户端自己指定,但是形式必须是整数-整数,而且必须是后面加入的消息的 ID 要大于前面的消息 ID 。
消息内容就是键值对,形如 hash 结构的键值对。
消息队列相关命令
命令 | 用法 | 描述 | 备注 | |||
---|---|---|---|---|---|---|
X ADD | XADD key ID field value [field value …] [MAXLEN\ | MINID [=\ | ~] threshold [LIMIT count]] *\ | ID | 添加消息到末尾,保证有序。 | * 可以自动生成唯一ID。 ~ 代表大约(大于等于)LIMIT count。 |
X TRIM | XTRIM key MAXLEN\ | MINID [=\ | ~] threshold [LIMIT count] | 对流进行修剪,限制长度,必要时丢弃 ID 旧的数据。 | threshold [LIMIT count] 即限制队列的长度。 | |
X DEL | XDEL key ID [ID …] | 删除消息 | ||||
X LEN | XLEN key | 获取流包含的元素数量,即消息长度 | ||||
X RANGE/X REV RANGE | XRANGE key start end [COUNT count] | 返回流中满足给定ID范围的条目。范围由最小和最大ID指定。所有ID在指定的两个ID之间或与其中一个ID相等(闭合区间)的条目将会被返回。该命令会自动过滤已经删除的消息。 | start, end 中 -,+ 可代表流中最小、最大 ID。当然,start 和 end 为同一个 ID 可视作单条查询、 | |||
X READ | XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key …] ID [ID …] | 以阻塞或非阻塞方式获取消息列表(对于每个 Stream 只获取 count 个大于给定 ID 的消息)。count 默认为 1。 | 示例:XREAD STREAMS key $ | |||
X ACK | XACK key group ID [ID …] | 将消息标记为”已处理” | 该命令返回成功确认的消息数。 |
消费者组相关命令
命令 | 用法 | 描述 | 备注 | |
---|---|---|---|---|
X GROUP CREATE | XGROUP CREATE key groupname ID\ | $ | 创建与流关联的新消费者组。如果指定的消费者组已经存在,则该命令将返回-BUSYGROUP错误。 否则将执行该操作并返回OK。你可以为给定的流关联无限多的消费者组,没有硬性限制。 | 最后一个参数是指定消费者的最后交付 ID(下次读取 ID 大于最后交付 ID 的第一个消息),$ 是指读取后到达流的新数据,0 是指从流中第一条消息开始读取。当然也可以直接设置 ID 作为参数。 |
X GROUP DESTORY | XGROUP DESTROY key groupname | 删除消费者组。即使存在活动的消费者和待处理消息,消费者组也将被销毁,因此请确保仅在真正需要时才调用此命令。 | 每当某个命令提到新的消费者名称时,就会自动创建消费者组中的消费者。 但有时候删除旧的消费者可能会有用,因为他们已经不再使用。 以上格式的命令返回消费者在被删除之前所拥有的待处理消息数量。 | |
X GROUP DEL CONSUMER | XGROUP DELCONSUMER key groupname consumer | 删除指定消费者 | ||
X GROUP SETID | XGROUP SETID key groupname ID\ | $ | 为消费者组设置新的最后递送消息 ID | |
X INFO STREAM | XINFO STREAM key | 返回有关存储在特定键的流的一般信息。 | ||
X INFO GROUPS | XINFO GROUPS key | 获取流的消费者组的信息 | ||
X INFO CONSUMERS | XINFO CONSUMERS key groupname | 取得指定消费者组中的消费者列表 | ||
X PENDING | XPENDING key group [[IDLE min-idle-time] start end count [consumer]] | 显示待处理消息的相关信息 | ||
X READ GROUP | XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key …] ID [ID …] | 读取消费者组中大于指定 ID 的消息,并将 id 放入 pending_ids 中,等待 XACK 确认。 | 可以通过给XREADGROUP初始 ID 为 0 并执行相同的循环来访问我们的消息历史。 一旦提供的 ID 为 0 并且回复是一组空的消息,我们就知道我们已经处理并确认完了所有的待处理消息。使用>作为ID,以便获取新消息并重新加入正在处理新消息的消费者。 | |
X CLAIM | XCLAIM key group consumer min-idle-time ID [ID …] [IDLE ms] [TIME ms-unix-time] [RETRYCOUNT count] [FORCE] [JUSTID] | 在流的消费者组上下文中,改变待处理消息的所有权,并等待 XACK 确认。 |
需要注意的特性
从永久性失败中恢复的特性
Redis 消息队列解决方案中,编写多个消费者参与同一个消费者组,每个消费者获取消息的一个子集进行处理,并且在故障恢复时重新读取各自的待处理消息。然而在现实世界中,消费者有可能永久地失败并且永远无法恢复,因此消费者的待处理消息会永远无法处理掉。
Redis 的消费者组提供了一个专门针对这种场景的特性,使用 XPENDING 和 XCLAIM 命令用以认领给定消费者的待处理消息。这个特性是非常明确的,消费者在检查待处理消息列表后,认领待处理的消息,否则服务器将把待处理的消息永久分配给旧消费者。这样不同的应用程序就可以选择是否使用这样的特性,以及使用它的方式。
1. 提供可观察性
第一步是使用 XPENDING 命令,提供消费者组中待处理条目的可观察性。
> XPENDING mystream mygroup
1) (integer) 2 # 给定消费者组的待处理消息总数
2) 1526569498055-0 # 所有待处理消息中的最小ID
3) 1526569506935-0 # 所有待处理消息中的最大ID
4) 1) 1) "Bob" # 消费者列表和每个消费者的待处理消息数量
2) "2"
现在我们有了每一条消息的详细信息:消息ID,消费者名称,空闲时间(单位是毫秒,意思是:自上次将消息传递给某个消费者以来经过了多少毫秒),以及每一条给定的消息被传递了多少次。
2. 认领待处理消息
第二步是使用 XCLAIM 命令,用于复制消费者组的更改。
XCLAIM <key> <group> <consumer> <min-idle-time> <ID-1> <ID-2> ... <ID-N>
当我们认领指定 ID 的消息,仅当消息闲置至少 min-idle-time 且没有原始消费者或其他消费者进行推进(确认或认领它)时,并将所有权分配给消费者 consumer。
Redis 提供了最小空闲时间,只有在上述消息的空闲时间大于指定的空闲时间时,操作才会起作用。这很有用,因为有可能两个客户端会同时尝试认领一条消息:
Client 1: XCLAIM mystream mygroup Alice 3600000 1526569498055-0
Clinet 2: XCLAIM mystream mygroup Lora 3600000 1526569498055-0
然而认领一条消息的副作用是会重置它的闲置时间!并将增加其传递次数的计数器,所以上面第二个客户端的认领会失败。通过这种方式,我们可以避免对消息进行简单的重新处理(即使是在一般情况下,你仍然不能获得准确的一次处理)。
下面是命令执行的结果:
> XCLAIM mystream mygroup Alice 3600000 1526569498055-0
1) 1) 1526569498055-0
2) 1) "message"
2) "orange"
Alice 成功认领了该消息,现在可以处理并确认消息,尽管原来的消费者还没有恢复,也能往前推动。
从上面的例子很明显能看到,作为成功认领了指定消息的副作用,XCLAIM 命令也返回了消息数据本身。但这不是强制性的。可以使用 JUSTID 选项,以便仅返回成功认领的消息的 ID。如果你想减少客户端和服务器之间的带宽使用量的话,以及考虑命令的性能,这会很有用,并且你不会对消息感兴趣,因为稍后你的消费者的实现方式将不时地重新扫描历史待处理消息。
认领也可以通过一个独立的进程来实现:这个进程只负责检查待处理消息列表,并将空闲的消息分配给看似活跃的消费者。可以通过 Redis Stream 的可观察特性获得活跃的消费者。
3. 其他故障处理
在 XPENDING 的输出中,你所看到的计数器是每一条消息的交付次数。这样的计数器以两种方式递增:消息通过 XCLAIM 成功认领时,或者调用 XREADGROUP 访问历史待处理消息时。
当出现故障时,消息被多次传递是很正常的,但最终它们通常会得到处理。但有时候处理特定的消息会出现问题,因为消息会以触发处理代码中的 bug 的方式被损坏或修改。在这种情况下,消费者处理这条特殊的消息会一直失败。因为我们有传递尝试的计数器,所以我们可以使用这个计数器来检测由于某些原因根本无法处理的消息。所以一旦消息的传递计数器达到你给定的值,比较明智的做法是将这些消息放入另外一个 Stream,并给系统管理员发送一条通知。这基本上是 Redis Stream 实现的 dead letter 概念的方式。
与 Kafka 分区机制的区别
Kafka 将数据分成了多个 partition ,在不同的节点中保存。Redis 的 Stream 数据结构只是一个 key,其中的数据分区需要配合其他中间件实现。
持久化,复制和消息安全性
与任何其他 Redis 数据结构一样,Stream会异步复制到从节点,并持久化到 AOF 和 RDB 文件中。但可能不那么明显的是,消费者组的完整状态也会传输到 AOF,RDB 和从节点,因此如果消息在主节点是待处理的状态,在从节点也会是相同的信息。同样,节点重启后,AOF 文件会恢复消费者组的状态。
但是请注意,Redis Stream 和消费者组使用 Redis 默认复制来进行持久化和复制,所以:
- 如果消息的持久性在您的应用程序中很重要,则 AOF 必须与强大的 fsync 策略一起使用。
- 默认情况下,异步复制不能保证复制 XADD 命令或者消费者组的状态更改:在故障转移后,可能会丢失某些内容,具体取决于从节点从主节点接收数据的能力。
- WAIT 命令可以用于强制将更改传输到一组从节点上。但请注意,虽然这使得数据不太可能丢失,但由 Sentinel 或 Redis 集群运行的 Redis 故障转移过程仅执行尽力检查以故障转移到最新的从节点,并且在某些特定故障下可能会选举出缺少一些数据的从节点。 因此,在使用 Redis Stream 和消费者组设计应用程序时,确保了解你的应用程序在故障期间应具有的语义属性,并进行相应地配置,评估它是否足够安全地用于您的用例。
其他命令
Redis 键(key) 命令
命令 | 描述 |
---|---|
Redis Type 命令 | 返回 key 所储存的值的类型。 |
Redis PEXPIREAT 命令 | 设置 key 的过期时间亿以毫秒计。 |
Redis PEXPIREAT 命令 | 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计 |
Redis Rename 命令 | 修改 key 的名称 |
Redis PERSIST 命令 | 移除 key 的过期时间,key 将持久保持。 |
Redis Move 命令 | 将当前数据库的 key 移动到给定的数据库 db 当中。 |
Redis RANDOMKEY 命令 | 从当前数据库中随机返回一个 key 。 |
Redis Dump 命令 | 序列化给定 key ,并返回被序列化的值。 |
Redis TTL 命令 | 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。 |
Redis Expire 命令 | seconds 为给定 key 设置过期时间。 |
Redis DEL 命令 | 该命令用于在 key 存在是删除 key。 |
Redis Pttl 命令 | 以毫秒为单位返回 key 的剩余的过期时间。 |
Redis Renamenx 命令 | 仅当 newkey 不存在时,将 key 改名为 newkey 。 |
Redis EXISTS 命令 | 检查给定 key 是否存在。 |
Redis Expireat 命令 | EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。 |
Redis Keys 命令 | 查找所有符合给定模式( pattern)的 key 。 |
Redis 集合(Set) 命令
命令 | 描述 |
---|---|
Redis Sunion 命令 | 返回所有给定集合的并集 |
Redis Scard 命令 | 获取集合的成员数 |
Redis Srandmember 命令 | 返回集合中一个或多个随机数 |
Redis Smembers 命令 | 返回集合中的所有成员 |
Redis Sinter 命令 | 返回给定所有集合的交集 |
Redis Srem 命令 | 移除集合中一个或多个成员 |
Redis Smove 命令 | 将 member 元素从 source 集合移动到 destination 集合 |
Redis Sadd 命令 | 向集合添加一个或多个成员 |
Redis Sismember 命令 | 判断 member 元素是否是集合 key 的成员 |
Redis Sdiffstore 命令 | 返回给定所有集合的差集并存储在 destination 中 |
Redis Sdiff 命令 | 返回给定所有集合的差集 |
Redis Sscan 命令 | 迭代集合中的元素 |
Redis Sinterstore 命令 | 返回给定所有集合的交集并存储在 destination 中 |
Redis Sunionstore 命令 | 所有给定集合的并集存储在 destination 集合中 |
Redis Spop 命令 | 移除并返回集合中的一个随机元素 |
Redis 连接 命令
命令 | 描述 |
---|---|
Redis Echo 命令 | 打印字符串 |
Redis Select 命令 | 切换到指定的数据库 |
Redis Ping 命令 | 查看服务是否运行 |
Redis Quit 命令 | 关闭当前连接 |
Redis Auth 命令 | 验证密码是否正确 |
Redis 服务器 命令
命令 | 描述 |
---|---|
Redis Client Pause 命令 | 在指定时间内终止运行来自客户端的命令 |
Redis Debug Object 命令 | 获取 key 的调试信息 |
Redis Flushdb 命令 | 删除当前数据库的所有key |
Redis Save 命令 | 异步保存数据到硬盘 |
Redis Showlog 命令 | 管理 redis 的慢日志 |
Redis Lastsave 命令 | 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示 |
Redis Config Get 命令 | 获取指定配置参数的值 |
Redis Command 命令 | 获取 Redis 命令详情数组 |
Redis Slaveof 命令 | 将当前服务器转变为指定服务器的从属服务器(slave server) |
Redis Debug Segfault 命令 | 让 Redis 服务崩溃 |
Redis Flushall 命令 | 删除所有数据库的所有key |
Redis Dbsize 命令 | 返回当前数据库的 key 的数量 |
Redis Bgrewriteaof 命令 | 异步执行一个 AOF(AppendOnly File) 文件重写操作 |
Redis Cluster Slots 命令 | 获取集群节点的映射数组 |
Redis Config Set 命令 | 修改 redis 配置参数,无需重启 |
Redis Command Info 命令 | 获取指定 Redis 命令描述的数组 |
Redis Shutdown 命令 | 异步保存数据到硬盘,并关闭服务器 |
Redis Sync 命令 | 用于复制功能(replication)的内部命令 |
Redis Client Kill 命令 | 关闭客户端连接 |
Redis Role 命令 | 返回主从实例所属的角色 |
Redis Monitor 命令 | 实时打印出 Redis 服务器接收到的命令,调试用 |
Redis Command Getkeys 命令 | 获取给定命令的所有键 |
Redis Client Getname 命令 | 获取连接的名称 |
Redis Config Resetstat 命令 | 重置 INFO 命令中的某些统计数据 |
Redis Command Count 命令 | 获取 Redis 命令总数 |
Redis Time 命令 | 返回当前服务器时间 |
Redis Info 命令 | 获取 Redis 服务器的各种信息和统计数值 |
Redis Config rewrite 命令 | 对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写 |
Redis Client List 命令 | 获取连接到服务器的客户端连接列表 |
Redis Client Setname 命令 | 设置当前连接的名称 |
Redis Bgsave 命令 | 在后台异步保存当前数据库的数据到磁盘 |
Redis 脚本 命令
命令 | 描述 |
---|---|
Redis Script kill 命令 | 杀死当前正在运行的 Lua 脚本。 |
Redis Script Load 命令 | 将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。 |
Redis Eval 命令 | 执行 Lua 脚本。 |
Redis Evalsha 命令 | 执行 Lua 脚本。 |
Redis Script Exists 命令 | 查看指定的脚本是否已经被保存在缓存当中。 |
Redis Script Flush 命令 | 从脚本缓存中移除所有脚本。 |
Redis 事务 命令
命令 | 描述 |
---|---|
Redis Exec 命令 | 执行所有事务块内的命令。 |
Redis Watch 命令 | 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 |
Redis Discard 命令 | 取消事务,放弃执行事务块内的所有命令。 |
Redis Unwatch 命令 | 取消 WATCH 命令对所有 key 的监视。 |
Redis Multi 命令 | 标记一个事务块的开始。 |
Redis HyperLogLog 命令
命令 | 描述 |
---|---|
Redis Pgmerge 命令 | 将多个 HyperLogLog 合并为一个 HyperLogLog |
Redis Pfadd 命令 | 添加指定元素到 HyperLogLog 中。 |
Redis Pfcount 命令 | 返回给定 HyperLogLog 的基数估算值。 |
Redis 地理位置(geo) 命令
命令 | 描述 |
---|---|
Redis GEOHASH 命令 | 返回一个或多个位置元素的 Geohash 表示 |
Redis GEOPOS 命令 | 从key里返回所有给定位置元素的位置(经度和纬度) |
Redis GEODIST 命令 | 返回两个给定位置之间的距离 |
Redis GEORADIUS 命令 | 以给定的经纬度为中心, 找出某一半径内的元素 |
Redis GEOADD 命令 | 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中 |
Redis GEORADIUSBYMEMBER 命令 | 找出位于指定范围内的元素,中心点是由给定的位置元素决定 |