命令 | 描述 | 格式 |
---|---|---|
DEL | 删除存储在数据库中的一个或多个键 | DEL key [key …] |
EXISTS | 检查给定键是否存在 | EXISTS key |
EXPIRE | 设置键的过期时间 | EXPIRE key seconds |
EXPIREAT | 设置键的过期时间,该过期时间是一个秒级时间戳 | EXPIREAT key timestamp |
PEXPIRE | 设置键的过期时间,以毫秒为单位。 | PEXPIRE key milliseconds |
PEXPIREAT | 设置键的过期时间,该过期时间是一个毫秒级时间戳 | PEXPIREAT key milliseconds-timestamp |
PERSIST | 移除键的过期时间 | PERSIST key |
KEYS | 获取匹配指定模式的所有键名 | KEYS pattern |
TTL | 获取键的剩余过期时间,以秒为单位 | TTL key |
PTTL | 获取键的剩余过期时间,以毫秒为单位 | PTTL key |
RENAME | 修改键的名称 | RENAME key newkey |
RENAMENX | 修改键的名称,在不覆盖现有键的前提下 | RENAMENX key newkey |
TYPE | 获取键存储的值的数据类型 | TYPE key |
SCAN | 迭代遍历 Redis 数据库中的键集合 | SCAN cursor [MATCH pattern] [COUNT count] |
HSCAN | 迭代遍历 Redis Hash类型中的字段和对应的值 | HSCAN key cursor [MATCH pattern] [COUNT count] |
SSCAN | 迭代遍历 Redis Set集合中的元素 | SSCAN key cursor [MATCH pattern] [COUNT count] |
ZSCAN | 迭代遍历 Redis Zset集合中的成员和对应的分值 | ZSCAN key cursor [MATCH pattern] [COUNT count] |
DUMP | 序列化给定键的值,并以字符串的形式返回序列化后的值 | DUMP key |
删除存储在数据库中的一个或多个键。
语法:
DEL key [key …]
参数:
返回:
DEL 命令返回一个整数值,表示被成功删除的键的数量。
示例:
DEL mykey1
删除名为 “mykey1” 的键,并返回值为 1,表示成功删除了一个键。
DEL mykey2 mykey3
删除名为 “mykey2” 和 “mykey3” 的两个键,并返回值为 2,表示成功删除了两个键。
用于检查给定键是否存在于 Redis 数据库中。该命令的作用类似于在编程语言中使用的检查特定变量是否已定义。
语法:
EXISTS key
参数:
返回:
如果键存在,则 EXISTS 命令返回 1,否则返回 0。
示例:
EXISTS mykey
用于为一个键设置过期时间。一旦设置了过期时间,键将在一定时间内自动过期,Redis 将删除这个键及其关联的值。
语法:
EXPIRE key seconds
参数:
返回:
执行 EXPIRE 命令后,如果过期时间设置成功,则返回 1,否则返回 0(因为此时键不存在或不能设置过期时间)。
示例:
EXPIRE mykey 60
设置mykey”键的过期时间为 60 秒。
用于设置一个键的过期时间,该过期时间是一个秒级时间戳,表示在指定的时间点该键将过期。
语法:
EXPIREAT key timestamp
参数:
返回:
如果成功设置过期时间,则返回 1;如果键不存在或无法设置过期时间,则返回 0。
示例:
EXPIREAT mykey 1700294260
需要注意的是,如果键已经存在并具有过期时间,则 EXPIREAT 命令将覆盖原有的过期时间。另外,需要确保 timestamp 参数的值大于当前 Redis 服务器的时间,否则命令执行时将无法设置过期时间。
设置一个键的过期时间,以毫秒为单位。
语法:
PEXPIRE key milliseconds
参数:
返回:
如果成功设置过期时间,则返回 1;如果键不存在或无法设置过期时间,则返回 0。
示例:
PEXPIRE mykey 500
将键名为 “mykey” 的键设置为 500 毫秒后过期。
需要注意的是,如果键已经存在并具有过期时间,则 PEXPIRE 命令将更新原有的过期时间。另外,需要确保 milliseconds 参数的值大于 0,否则键将立即过期。如果键在设置过期时间之前就被删除或修改了,那么 PEXPIRE 命令将返回 0,表示无法设置过期时间。
设置一个键的过期时间,该过期时间是一个毫秒级时间戳,表示在指定的时间点该键将过期。与 EXPIREAT 命令相比,PEXPIREAT 命令使用毫秒级的时间戳。
语法:
PEXPIREAT key milliseconds-timestamp
参数:
返回:
如果成功设置过期时间,则返回 1;如果键不存在或无法设置过期时间,则返回 0。
示例:
PEXPIREAT mykey 1700294260000
需要注意的是,如果键已经存在并具有过期时间,则 PEXPIREAT 命令将覆盖原有的过期时间。另外,需要确保 milliseconds-timestamp 参数的值大于当前 Redis 服务器的时间,否则命令执行时将无法设置过期时间。
移除键的过期时间,使键持久化,即永远不会过期。
语法:
PERSIST key
参数:
返回:
如果成功移除过期时间,则返回 1;如果键不存在过期时间或无法移除过期时间,则返回 0。
示例:
PERSIST mykey
需要注意的是,如果键不存在过期时间,即键本身就是持久化的,或者键不存在,PERSIST 命令将返回 0。另外,一旦过期时间被移除,该键将永远不会过期,除非显式地设置新的过期时间。
用于获取匹配指定模式的所有键名。这个命令是非常强大的,但在生产环境中使用时需要小心,因为它会遍历整个键空间并返回所有匹配的键名。在大型数据库中使用 KEYS 命令可能会导致性能问题。
语法:
KEYS pattern
参数:
返回:
返回一个数组,包含所有匹配模式的键名。
示例:
KEYS key*
获取所有以 “key” 开头的键名。
需要注意:KEYS 命令会遍历整个 Redis 数据库,如果数据库非常大,执行这个命令可能会导致性能问题。因此,在生产环境中使用 KEYS 命令时,应该谨慎评估其使用场景,并考虑使用其他更高的命令来实现更,如 SCAN 命令。 SCAN 命令可以分批地迭代集合中的键,避免一次性处理大。
获取键的剩余过期时间,以秒为单位。
语法:
TTL key
参数:
返回:
示例:
TTL mykey
需要注意的是,TTL 命令的返回值是以秒为单位的。如果需要以毫秒为单位获取剩余过期时间,可以使用 PTTL 命令。同时,当键过期时,TTL 命令将返回 -2,表示键已经被删除。
获取键的剩余过期时间,以毫秒为单位。
语法:
PTTL key
参数:
返回:
示例:
PTTL mykey
与 TTL 命令不同,PTTL 命令返回的是以毫秒为单位的剩余过期时间。当键过期时,PTTL 命令将返回 -2,表示键已经被删除。
修改键的名称。
语法:
RENAME key newkey
参数:
返回:
示例:
RENAME mykey newkey
需要注意的是,如果新的键名已经存在,那么它将被覆盖。如果键名不存在,则命令将返回错误。此外,RENAME 命令还可以用来移动键,即将键从当前数据库移动到另一个数据库。要实现这个操作,可以将 newkey 指定为目标数据库中的键名。
在不覆盖现有键的情况下,修改键的名称。
语法:
RENAMENX key newkey
参数:
返回:
示例:
RENAMENX mykey newkey
如果 “newkey” 已经存在,则不执行重命名操作并返回 0;如果键名成功修改,则返回 1。
需要注意的是,与 RENAME 命令不同,RENAMENX 命令会检查新键名是否已经存在。如果新键名已经被使用,那么不会执行重命名操作,以避免覆盖已有的键。
获取键存储的值的数据类型。
语法:
TYPE key
参数:
返回:
示例:
TYPE mykey
迭代遍历 Redis 数据库中的键集合。SCAN 命令及其相关的 SSCAN, HSCAN 和 ZSCAN 命令都用于增量迭代key。
语法:
SCAN cursor [MATCH pattern] [COUNT count]
参数:
返回:
返回一个包含两个元素的数组:
示例:
游标为 0 的位置开始,匹配以 “user” 开头的键,每次返回 3 个键。
SCAN 0 MATCH user* COUNT 3
游标值变为 5,下一次迭代从游标为 5 的位置开始,匹配以 “user” 开头的键,每次返回 3 个键。
SCAN 5 MATCH user* COUNT 3
游标值变为 0,这表示遍历已经完成。
KEYS与SCAN使用选择:
当需要获取 Redis 数据库中所有与特定模式匹配的键时,通常可以使用 SCAN 命令和 KEYS 命令。下面是这两个命令之间的一些区别和使用建议:
KEYS 命令是一个阻塞式的命令,多用于开发测试和调试环境,以及小数据量的场景。
它会暂停 Redis 服务去扫描整个数据库,通过给定的模式匹配去返回符合条件的键列表。但是,当匹配规则过于广泛时,会导致 KEYS 命令执行缓慢,阻塞 Redis 服务甚至触发 Redis 自我保护机制,从而影响 Redis 的性能。
SCAN 命令是一个游标迭代式命令,可以在不加重服务器负担的情况下,遍历数据库中指定模式的键值对。
SCAN 命令可以保证不会消耗大量的内存和网络带宽,同时也可以保证遍历过程不会被干扰,且可以多次重复操作,避免较大的MongoDB并发请求。
因此,对于获取大量 Redis 中的键,而且需要保证稳定的性能和响应时间的情况,建议使用 SCAN 命令,因为它可以更加高效地获取键列表。但是,在小规模的 Redis 实例和非关键业务场景下,可以考虑使用 KEYS 命令,是否符合业务实际情况,作出灵活决策。
迭代遍历 Redis 哈希类型中的字段和对应的值。
语法:
HSCAN key cursor [MATCH pattern] [COUNT count]
参数:
返回:
返回一个包含两个元素的数组:
示例:
HSCAN myhash 0
遍历 Redis 哈希中的字段和对应的值。
使用 HSCAN 命令可以逐步遍历哈希中的字段和对应的值,这对于处理大型哈希非常有用,因为它避免了一次性获取整个哈希的开销,并且能够提供更好的性能和效率。
迭代遍历 Redis 无序集合中的元素。
语法:
SSCAN key cursor [MATCH pattern] [COUNT count]
参数:
返回:
返回一个包含两个元素的数组:
示例:
SSCAN myset 0
返回一个数组,第一个元素是下一次迭代时要使用的游标,第二个元素是在游标位置上迭代得到的元素的列表。
使用 SSCAN 命令可以逐步遍历无序集合中的元素,这对于处理大型无序集合非常有用,因为它避免了一次性获取整个无序集合的开销,并且能够提供更好的性能和效率。
迭代遍历 Redis 有序集合中的成员和对应的分值。
语法:
ZSCAN key cursor [MATCH pattern] [COUNT count]
参数:
返回:
返回一个包含两个元素的数组:
示例:
ZSCAN myzset 0
返回一个数组,第一个元素是下一次迭代时要使用的游标,第二个元素是在游标位置上迭代得到的成员和对应的分值对的列表。
通过使用 ZSCAN 命令,你可以逐步遍历有序集合中的成员和对应的分值,从而避免一次性获取整个有序集合的开销,并且能够提供更
用于序列化给定键的值,并以字符串的形式返回序列化后的值。该命令通常用于创建 Redis 中键的备份,以及将键的值转移到其他 Redis 实例。
语法:
DUMP key
参数:
返回:
如果键存在,则 DUMP 命令返回值序列化后的字符串,否则返回 NULL。
示例:
SET mykey "Hello World"
DUMP mykey
返回一个被序列化后的字符串值,例如:\x00\x06Hello World\x06\x00\x00\x00\x00\x00
这个字符串包含了键 “mykey” 的值的所有信息,你可以使用这个字符串恢复键的值,这可以通过使用 Redis RESTORE 命令实现。
需要注意的是,DUMP 命令可能会对 Redis 服务器的性能产生影响,因为它会序列化键的整个值。如果值很大,序列化和传输可能会花费相当长的时间。建议在生产环境中仅在必要时使用。
命令 | 描述 | 格式 |
---|---|---|
SET | 设置指定 key 的值 | SET key value |
GET | 获取指定 key 的值 | GET key |
INCR | 将指定 key 的值增加 1 | INCR key |
DECR | 将指定 key 的值减少 1 | DECR key |
MSET | 同时设置多个 key-value 对 | MSET key1 value1 key2 value2 … |
MGET | 同时获取多个 key 的值 | MGET key1 key2 … |
APPEND | 追加值到指定 key 的值末尾 | APPEND key value |
SETNX | 在指定 key 不存在的情况下设置值 | SETNX key value |
STRLEN | 获取指定 key 的值的长度 | STRLEN key |
INCRBY | 将指定 key 的值增加指定的增量 | INCRBY key increment |
DECRBY | 将指定 key 的值减少指定的减量 | DECRBY key decrement |
INCRBYFLOAT | 将指定 key 的值以浮点数的方式增加 | INCRBYFLOAT key increment |
GETSET | 设置指定 key 的值,并返回原始值 | GETSET key value |
MSETNX | 同时设置多个 key-value 对 | MSETNX key1 value1 key2 value2 … |
SETEX | 设置指定 key 的值,并指定过期时间 | SETEX key seconds value |
PSETEX | 设置指定 key 的值,并指定过期时间 | PSETEX key milliseconds value |
使用 Redis 中的 SET 命令时,可以用于设置指定 key 的值。
语法:
SET key value [EX seconds] [PX milliseconds] [NX|XX]
参数:
返回:
示例:
设置值
SET mykey "Hello Redis"
设置值及过期时间
SET mykey "Hello Redis" EX 60
仅在键不存在时才设置值
SET mykey "Hello Redis" NX
仅在键已经存在时设置值
SET mykey "Hello Redis" XX
SET 命令用于设置指定键的值,并且可以配合过期时间和条件选项来实现更灵活的设置。成功设置值后,SET 命令将返回 OK。
使用 Redis 中的 GET 命令时,可以获取指定 key 的值。
语法:
GET key
参数:
返回:
如果键存在,则返回键的值;如果键不存在,则返回特殊值 nil。
示例:
GET mykey
对指定的 key 的值进行递增操作。
语法:
INCR key
参数:
返回:
示例:
对键值进行递增1
INCR mykey
在执行 INCR 命令之前,键对应的值必须能够被解析为一个 64 位有符号整数。如果键不存在,INCR 命令将会先将键的值设置为 0,然后执行递增操作。
对指定的 key 的值进行递减操作。
语法:
DECR key
参数:
返回:
示例:
对键值进行递减1
DECR mykey
注意:在执行 DECR 命令之前,键对应的值必须能够被解析为一个 64 位有符号整数。如果键不存在,DECR 命令将会先将键的值设置为 0,然后执行递减操作。
设置多个 key 的值。
语法:
MSET key1 value1 [key2 value2 … keyn valuen]
参数:
返回:
在 Redis 2.0.1 以后的版本中,MSET 命令会返回 OK,表示所有键值设定成功。在之前的版本中,MSET 不会返回任何值。
示例:
MSET key1 "Hello" key2 "Redis" key3 "MSET"
需要注意的是,如果其中某个键已经存在,对应的值会被覆盖。
一次性获取多个指定 key 的值。
语法:
MGET key1 [key2 … keyn]
参数:
返回:
返回一个列表,包含了所有指定 key 的值。
示例:
获取了键名为 key1、key2 和 key3 的值
MGET key1 key2 key3
需要注意的是,如果某个键不存在,返回的结果列表中对应的值为 nil。
在指定 key 的字符串值后追加一个或多个值。
语法:
APPEND key value
参数:
返回:
示例:
SET mykey "Hello"
APPEND mykey " Redis"
在 mykey 的值的末尾追加了一个空格和 “Redis”。
需要注意的是,如果键名不存在,APPEND 命令会视为操作一个空字符串,等同于直接设置一个新值。
在指定的 key 不存在时,设置 key 的值。
语法:
SETNX key value
参数:
返回:
如果 key 不存在,设置成功返回 1;如果 key 已经存在,设置失败返回 0。
示例:
SETNX mykey "Hello"
当键名为 mykey 不存在时,SETNX 命令会将值 “Hello” 设置给键名为 mykey
如果键名为 mykey 已经存在,则 SETNX 命令不会进行任何操作,并返回 0 表示设置失败。
获取指定 key 的字符串值的长度。
语法:
STRLEN key
参数:
返回:
指定 key 的字符串值的长度,如果 key 不存在则返回 0。
示例:
SET mykey "Hello"
STRLEN mykey
获取 mykey 的字符串值的长度。
对指定 key 的整数值进行增量操作。
语法:
INCRBY key increment
参数:
返回:
增加后的值
示例:
SET mykey 10
INCRBY mykey 5
将 mykey 的值增加了 5。
需要注意的是:
对指定 key 的整数值进行递减操作。
语法:
DECRBY key decrement
参数:
返回:
递减后的值
在这里插入代码片
示例:
SET mykey 10
DECRBY mykey 5
mykey 的值递减了 5。
需要注意的是:
对指定 key 的浮点数值进行增量操作。
语法:
INCRBYFLOAT key increment
参数:
返回:
增加后的值
示例:
SET mykey 10.5
INCRBYFLOAT mykey 2.1
mykey 的值增加了2.1
如果指定的 key 不存在,INCRBYFLOAT 命令会将 key 的值视为 0 进行增加操作。
当使用 INCRBYFLOAT 命令进行浮点数增加操作时,需要注意可能存在的精度丢失问题,并在需要的情况下进行额外的精度控制和处理。
设置指定 key 的值并返回原来的值。
语法:
GETSET key value
参数:
返回:
原来的值
示例:
SET mykey "Hello"
GETSET mykey "World"
将 mykey 的值设置为 “World” 并返回原来的值"Hello"。
如果指定的 key 不存在,GETSET 命令会将 key 的值视为 nil,并返回 nil。
MSETNX 命令可以设置多个键值对,但只有在所有键都不存在的情况下才执行设置操作。
语法:
MSETNX key1 value1 key2 value2 …
参数:
返回:
如果所有键都设置成功,返回 1;如果至少有一个键已经存在,设置失败返回 0。
示例:
MSETNX key1 "Hello" key2 "World"
在上述示例中:
设置指定 key 的值,并指定该值的过期时间(以秒为单位)。
语法:
SETEX key seconds value
参数:
返回:
无
示例:
SETEX mykey 3600 "Hello"
将 “Hello” 设置给键名为 mykey 的值,并指定该值的过期时间为 3600 秒(即 1 小时)。
需要注意的是,当键名为 mykey 的值被设置后,经过 1 小时后该值将自动被删除。即在 1 小时后,再执行 GET mykey 将返回 nil。
设置指定 key 的值,并指定该值的过期时间(以毫秒为单位)
语法:
PSETEX key milliseconds value
参数:
返回:
无
示例:
PSETEX mykey 1000 "Hello"
将 “Hello” 设置给键名为 mykey 的值,并指定该值的过期时间为 1000 毫秒(即 1 秒)。
需要注意的是,当键名为 mykey 的值被设置后,过了 1 秒后该值将自动被删除。即在 1 秒后,再执行 GET mykey 将返回 nil。
命令 | 描述 | 格式 |
---|---|---|
HSET | 将哈希表中指定字段的值设置为指定的值 | HSET key field value |
HGET | 获取哈希表中指定字段的值 | HGET key field |
HGETALL | 获取哈希表中所有字段和对应的值 | HGETALL key |
HDEL | 从哈希表中删除指定的字段和对应的值 | HDEL key field [field …] |
HSETNX | 将哈希表中指定字段的值设为指定的字符串值,当且仅当该字段不存在 | HSETNX key field value |
HMSET | 设置哈希表中多个字段的值 | HMSET key field1 value1 [field2 value2 …] |
HINCRBY | 将哈希表中指定字段的值增加指定的整数增量 | HINCRBY key field increment |
HKEYS | 获取哈希表中所有字段的键名 | HKEYS key |
HLEN | 获取哈希表中字段的数量 | HLEN key |
HVALS | 获取哈希表中所有字段的值 | HVALS key |
用于将哈希表中指定字段的值设置为指定的值。如果该字段存在,则会更新其值;如果该字段不存在,则会创建并设置值。
语法:
HSET key field value
参数:
返回:
返回一个整数,表示设置成功的字段数量(如果字段已存在,则更新值时返回 0)。
示例:
HSET user:001 username "哈哈"
获取哈希表中指定字段的值。
语法:
HGET key field
参数:
返回:
返回指定字段的值,如果字段不存在,则返回 nil。
示例:
HGET user:001 name
获取key为user:001的哈希表中 “name” 字段的值。
需要注意的是,如果指定的字段名不存在,HGET 命令将返回 nil。
获取哈希表中所有字段和对应的值。
该命令用于操作 Redis 中的哈希数据结构,它将返回哈希表中所有的字段和值,其中字段和值之间以键值对的形式组织返回。
语法:
HGETALL key
参数:
返回:
返回一个数组,包含指定键中的所有字段和值。数组的奇数下标为字段名,偶数下标为对应的值。
示例:
HGETALL user:001
获取key为user:001的哈希表中所有的字段和值。
需要注意的是,如果哈希表中的字段和值非常多,HGETALL 命令返回的数组也会非常大,因此在使用该命令时需要注意返回数据的大小。
用于从哈希表中删除指定的字段和对应的值。
语法:
HDEL key field [field …]
参数:
返回:
返回一个整数,表示成功删除的字段数量
示例:
HDEL user:001 age email
将字段 “age” 和 “email” 从哈希表中删除。
需要注意:如果指定的字段在哈希表中不存在,则会被忽略,不会报错。可以一次性指定多个字段进行删除。
将哈希表中指定字段的值设为指定的字符串值,当且仅当该字段不存在。如果该字段已经存在,该命令不会执行任何操作。
语法:
HSETNX key field value
参数:
返回:
如果字段不存在,则设置成功并返回 1;如果字段已经存在,则不执行任何操作并返回 0。
示例:
HSETNX user:info:001 username 哈哈
同时设置哈希表中多个字段的值。
语法:
HMSET key field1 value1 [field2 value2 …]
参数:
返回:
该命令没有固定的返回值。
示例:
HMSET user:info:001 name John age 30
用于将哈希表中指定字段的值增加指定的整数增量。如果该字段不存在,则会将其值初始化为 0。
语法:
HINCRBY key field increment
参数:
返回:
返回字段增加后的值。
示例:
HINCRBY user:points:001 points 50
将字段 “points” 的值增加 50。
需要注意的是,键对应的数据确实是一个哈希表,并且字段的值可以解释为整数类型。如果字段的值无法解释为整数,则会返回错误。
获取哈希表中所有字段的键名。
语法:
HKEYS key
参数:
返回:
返回一个包含哈希表中所有字段键名的数组。
示例:
HKEYS user:info:001
需要注意:返回的键名数组中的键名的顺序是无序的,即不保证与字段的存放顺序一致。
获取哈希表中字段的数量。
语法:
HLEN key
参数:
返回:
返回一个整数,表示哈希表中字段的数量。如果哈希表不存在,则返回 0。
示例:
HLEN user:info:001
获取哈希表中的字段数量。
获取哈希表中所有字段的值。
语法:
HVALS key
参数:
返回:
返回一个包含哈希表中所有字段值的数组。
示例:
HVALS user:info:001
需要注意:返回的值数组中的值的顺序是无序的,即不保证与字段的存放顺序一致。
在 Redis 中,列表类型的键被用作栈(stack)或队列(queue)数据结构的实现。
命令 | 描述 | 格式 |
---|---|---|
LPUSH | 将一个或多个元素插入列表的头部 | LPUSH key element [element …] |
RPUSH | 将一个或多个元素插入列表的尾部 | RPUSH key element [element …] |
LPUSHX | 将一个或多个元素添加到已存在的列表的头部 | LPUSHX key element [element …] |
RPUSHX | 将一个或多个元素添加到已存在的列表的尾部 | RPUSHX key element [element …] |
LPOP | 移除并返回列表的第一个元素(首部) | LPOP key |
RPOP | 移除并返回列表的最后一个元素(尾部) | RPOP key |
BLPOP |
阻塞式弹出列表第一个元素的命令
它是基于 LPOP 的阻塞式版本,适用于队列场景 |
BLPOP key [key …] timeout |
BRPOP |
阻塞式弹出列表最后一个元素的命令
它是基于 RPOP 的阻塞式版本,适用于队列场景 |
BRPOP key [key …] timeout |
LTRIM | 移除列表中除指定范围以外的所有元素(对列表进行修剪) | LTRIM key start stop |
RPOPLPUSH | 原子性地将列表尾部的元素弹出并推入另一个列表头部的命令 | RPOPLPUSH source destination |
BRPOPLPUSH | 在列表之间移动元素,并且它具有阻塞特性 | BRPOPLPUSH source destination timeout |
LRANGE | 获取列表中指定范围内的元素 | LRANGE key start stop |
LLEN | 获取列表的长度(即列表中的元素数量) | LLEN key |
LINDEX | 获取列表中指定索引位置的元素 | LINDEX key index |
LINSERT | 将指定值插入到列表中另一个元素之前或之后 | LINSERT key BEFORE|AFTER pivot value |
LSET | 设置列表中指定索引位置的元素 | LSET key index value |
LREM | 从列表中移除指定数量的元素 | LREM key count value |
用于将一个或多个元素插入列表的头部。
语法:
LPUSH key element [element …]
参数:
返回:
执行操作后列表的长度。
示例:
LPUSH mylist "Hello"
LPUSH mylist "World"
要注意的是,如果指定的键不存在,LPUSH 命令将创建一个新的列表,并将元素追加到该列表中。如果键存在,但不是列表类型,那么该命令将返回一个错误。
将一个或多个元素插入列表的尾部
语法:
RPUSH key element [element …]
参数:
返回:
执行 RPUSH 命令后,列表中的元素数量。
示例:
RPUSH mylist "apple" "banana" "cherry"
要注意的是,如果指定的键不存在,RPUSH 命令将创建一个新的列表,并将元素追加到该列表中。如果键存在,但不是列表类型,那么该命令将返回一个错误。
用于将一个或多个元素添加到已存在的列表的头部。
语法:
LPUSHX key element [element …]
参数:
返回:
执行 LPUSHX 命令后,列表中的元素数量。
示例:
LPUSHX mylist "apple" "banana" "cherry"
要注意的是,如果指定的键不存在,LPUSHX 命令不会进行任何操作,也不会创建新的列表。LPUSHX 只对已存在的列表进行头部添加操作。
LPUSHX 命令是 LPUSH 命令的扩展,它们的作用类似。LPUSH 命令用于将元素添加到列表的头部,并且如果键不存在,它会自动创建一个列表。
用于将一个或多个元素添加到已存在的列表的尾部。
语法:
RPUSHX key element [element …]
参数:
返回:
执行 RPUSHX 命令后,列表中的元素数量。
示例:
RPUSHX mylist "apple" "banana" "cherry"
要注意的是,如果指定的键不存在,RPUSHX 命令不会进行任何操作,也不会创建新的列表。RPUSHX 只对已存在的列表进行尾部添加操作。
RPUSHX 命令是 RPUSH 命令的扩展,它们的作用类似。RPUSH 命令用于将元素添加到列表的尾部,并且如果键不存在,它会自动创建一个列表。
用于移除并返回列表的第一个元素(头部)。
语法:
LPOP key
参数:
返回:
执行 LPOP 命令后,返回被移除的元素。
示例:
LPOP mylist
要注意的是,如果列表不存在或者是空列表,LPOP 将返回 nil 值。
LPOP 命令用于移除并获取列表的第一个元素,因此在使用 LPOP 命令后,列表的长度会减少1。
用于移除并返回列表的最后一个元素(尾部)。
语法:
LPOP key
参数:
返回:
执行 RPOP 命令后,返回被移除的元素。
示例:
RPOP mylist
要注意的是,如果列表不存在或者是空列表,LPOP 将返回 nil 值。
RPOP 命令用于移除并获取列表的最后一个元素,因此在使用 RPOP 命令后,列表的长度会减少1。
用于阻塞式弹出列表第一个元素的命令,它是基于 LPOP 的阻塞式版本,适用于队列场景。
语法:
BLPOP key [key …] timeout
参数:
返回:
示例:
BLPOP list1 list2 10
BLPOP 命令是基于 LPOP 命令的阻塞式版本, 从给的列表参数中按顺序检查第一个不空的列表,然后从该列表的尾部移除元素 。它会在指定的列表键中等待可弹出的元素出现,或者等待超时。在阻塞期间,客户端连接将被阻塞,直到有元素可被弹出或者超时。
使用 BLPOP 命令可以实现生产者-消费者模式,其中生产者将元素推入列表(LPUSH 或 RPUSH),而消费者通过 BLPOP 命令阻塞式地等待并弹出元素,实现线程安全地消费列表中的数据。
用于阻塞式弹出列表最后一个元素的命令,它是基于 RPOP 的阻塞式版本,适用于队列场景。
语法:
BRPOP key [key …] timeout
参数:
返回:
示例:
BRPOP list1 10
BRPOP 命令是基于 RPOP 命令的阻塞式版本, 从给的列表参数中按顺序检查第一个不空的列表,然后从该列表的尾部移除元素 。它会在指定的列表键中等待可弹出的元素出现,或者等待超时。在阻塞期间,客户端连接将被阻塞,直到有元素可被弹出或者超时。
使用 BRPOP 命令可以实现生产者-消费者模式,其中生产者将元素推入列表(LPUSH 或 RPUSH),而消费者通过 BRPOP 命令阻塞式地等待并弹出元素,实现线程安全地消费列表中的数据。
用于对列表进行修剪,即移除列表中除指定范围以外的所有元素。
语法:
LTRIM key start stop
参数:
返回:
修剪成功时返回 OK。
示例:
LTRIM mylist 0 2
LTRIM 命令用于修剪指定列表的元素范围,即保留指定索引范围内的元素,而移除其他元素。该命令对列表进行就地修改,不会返回修剪后的列表,而是返回修剪操作的结果。
要注意的是,索引是从 0 开始的,且可以是负数。负数索引表示与列表末尾的相对位置,例如 -1 表示列表的最后一个元素,-2 表示倒数第二个元素,依此类推。
通过 LTRIM 命令可以实现对列表的修剪操作,这在一些场景下非常有用,比如保留某个范围内的最新数据,或者控制列表的长度,以避免列表过长导致内存占用过大。
用于原子性地将列表尾部的元素弹出并推入另一个列表头部的命令。
语法:
RPOPLPUSH source destination
参数:
返回:
被弹出并推入的元素值。
示例:
RPOPLPUSH list1 list2
RPOPLPUSH 命令实现了一个原子性操作,确保在执行整个过程中,不会有其他客户端对这两个列表进行修改。这使得 RPOPLPUSH 命令在处理队列和任务分发等场景中非常有用。
在队列场景中,RPOPLPUSH 命令可以确保元素的移动是原子性的,即将元素从一个列表弹出并推入另一个列表的操作是不可分割的,防止其他客户端在此过程中获取相同的元素。这是因为 Redis 是单线程的,一次只能执行一个命令,从而保证了原子性。
要注意的是,RPOPLPUSH 命令在推入元素到目标列表时,会返回被推入的元素值,因此可以根据返回值来进行相应的处理。
BRPOPLPUSH 是 Redis 中的一种原子性命令,用于在列表之间移动元素,并且它具有阻塞特性。
语法:
BRPOPLPUSH source destination timeout
参数:
返回:
如果在指定的时间内成功地将元素从源列表弹出并推入目标列表,将返回被移动的元素。
如果阻塞超时,返回 nil。
示例:
BRPOPLPUSH list1 list2 10
BRPOPLPUSH 命令是 BRPOP 和 RPOPLPUSH 两个命令的组合,它原子性地将源列表中的尾部元素弹出并推入目标列表的头部。同时,它具有阻塞特性,即在源列表中没有可弹出的元素时,会阻塞等待元素的出现,直到超时时间设定或有元素可弹出。
BRPOPLPUSH 命令常被用于实现任务队列或消息队列,确保任务移动的原子性并阻塞等待新任务的到来。由于其原子性,这个命令非常适合多个客户端同时操作同一个队列的场景。
用于获取列表中指定范围内的元素的命令。
语法:
LRANGE key start stop
参数:
返回:
表示指定范围内的元素的列表。
示例:
LRANGE mylist 0 2
LRANGE 命令用于获取列表中指定范围内的元素,起始索引位置和结束索引位置都是基于 0 的索引。第一个元素的索引是 0,第二个是 1,依此类推。
要注意的是,LRANGE 命令返回的元素包括起始和结束索引位置上的元素。如果索引为负数,则表示从列表末尾开始计算的位置。例如,-1 表示列表的最后一个元素,-2 表示倒数第二个元素。
LRANGE 命令允许我们根据需要从列表中获取指定范围内的元素,这在需要获取部分列表数据进行展示或处理时非常有用。通过指定不同的起始和结束索引,可以灵活地获取列表中的子集。
用于获取列表的长度(即列表中的元素数量)的命令。
语法:
LLEN key
参数:
返回:
列表的长度,即列表中的元素数量。
示例:
LLEN mylist
LLEN 命令用于获取列表的长度,即列表中的元素数量。它对于检查列表的大小是否满足要求,或者获取列表的元素数量用于计算和统计非常有用。
在 Redis 中,列表是一个有序的字符串类型数据结构,每个列表可以包含多个元素。通过 LLEN 命令,可以直接获取列表的长度,而无需遍历整个列表。
LLEN 命令的时间复杂度为 O(1),即获取列表长度的操作的时间与列表的大小无关,所以可以在常数时间内完成。
用于获取列表中指定索引位置的元素的命令。
语法:
LINDEX key index
参数:
返回:
表示指定索引位置上的元素的字符串。
示例:
LINDEX mylist 0
LINDEX 命令用于获取列表中指定索引位置的元素。索引位置是基于 0 的,第一个元素的索引为 0,第二个为 1,以此类推。如果索引为负数,则表示从列表末尾开始计算的位置,-1 表示列表的最后一个元素,-2 表示倒数第二个元素。
需要注意的是,如果索引超出列表的范围,即大于等于列表的长度或小于等于负数的列表长度,则 LINDEX 命令返回 nil。
通过 LINDEX 命令,我们可以根据需要获取列表中指定索引位置的元素。这在需要获取特定的列表元素进行展示或处理时非常有用。
用于将指定值插入到列表中另一个元素之前或之后。
语法:
LINSERT key BEFORE|AFTER pivot value
参数:
返回:
返回插入操作完成后的目标列表的长度。
示例:
LINSERT mylist BEFORE "b" "a"
LINSERT 命令用于在列表中的指定元素之前或之后插入新的元素。该命令需要指定插入位置(BEFORE 或 AFTER)、目标元素(pivot)和要插入的值。如果目标元素不存在,则不会执行插入操作。
通过 LINSERT 命令,可以在列表中灵活地插入新的元素,这对于管理和维护列表中的数据非常有用。
需要注意的是,LINSERT 命令的时间复杂度为 O(N),其中 N 为列表的长度,因此执行该命令可能对性能产生影响,特别是对于长度较大的列表。
用于设置列表中指定索引位置的元素的命令。
语法:
LSET key index value
参数:
返回:
无,即不返回任何信息。
示例:
LSET mylist 0 "new value"
LSET 命令用于设置列表中指定索引位置的元素的值。索引位置是基于 0 的,第一个元素的索引为 0,第二个为 1,以此类推。如果索引为负数,则表示从列表末尾开始计算的位置,-1 表示列表的最后一个元素,-2 表示倒数第二个元素。
需要注意的是,如果索引超出列表的范围,即大于等于列表的长度或小于等于负数的列表长度,则 LSET 命令会抛出一个错误。
通过 LSET 命令,我们可以根据需要,将列表中指定索引位置的元素的值进行修改。
用于从列表中移除指定数量的元素的命令。
语法:
LREM key count value
参数:
返回:
返回被移除的元素的数量。
示例:
LREM mylist 2 "value"
LREM 命令用于从列表中移除指定数量的元素。移除的数量可以是正数、零或负数。根据 count 参数的不同取值,LREM 命令有以下几种情况:
count > 0:从表头开始向表尾搜索,移除值为 value 的元素,直到移除 count 个元素为止。
count < 0:从表尾开始向表头搜索,移除值为 value 的元素,直到移除 count 个元素为止。
count = 0:移除所有值为 value 的元素,即没有数量限制。
需要注意的是,如果 count 参数的绝对值大于列表中值为 value 的元素的数量,那么所有匹配的元素都会被移除。
通过 LREM 命令,我们可以根据需要从列表中移除指定数量的元素。
命令 | 描述 | 格式 |
---|---|---|
SADD | 向集合中添加一个或多个元素 | SADD key member [member …] |
SMOVE | 将集合中的一个元素移动到另一个集合中 | SMOVE source destination member |
SCARD | 获取集合中的成员数量 | SCARD key |
SMEMBERS | 获取指定集合的所有成员 | SMEMBERS key |
SISMEMBER | 判断一个元素是否是指定集合的成员 | SISMEMBER key member |
SRANDMEMBER | 从指定集合中随机获取一个或多个元素 | SRANDMEMBER key [count] |
SDIFF | 获取多个集合之间的差集 | SDIFF key [key …] |
SDIFFSTORE | 将多个集合之间的差集存储到一个新的集合中 | SDIFFSTORE destination key [key …] |
SINTER | 获取多个集合之间的交集 | SINTER key [key …] |
SINTERSTORE | 将多个集合之间的交集存储到一个新的集合中 | SINTERSTORE destination key [key …] |
SUNION | 获取多个集合的并集 | SUNION key [key …] |
SUNIONSTORE | 将多个集合的并集存储到一个新的集合中 | SUNIONSTORE destination key [key …] |
SREM | 从集合中移除一个或多个指定的成员 | SREM key member [member …] |
SPOP | 从集合中随机地移除并返回一个或多个成员 | SPOP key [count] |
向集合中添加一个或多个元素。
语法:
SADD key member [member …]
参数:
返回:
添加到集合的元素数量。
示例:
SADD fruits orange banana
注意事项:
SADD 命令在存储唯一值、进行快速成员查找和去重等场景下非常有用。通过将元素添加到集合中,可以将添加的元素与已存在于集合中的元素进行去重,并快速进行成员查询和操作。
将集合中的一个元素移动到另一个集合中。
语法:
SMOVE source destination member
参数:
返回:
如果成功移动元素,则返回 1;如果源集合中不存在该元素或移动失败,则返回 0。
示例:
SMOVE set1 set2 apple
注意事项:
获取集合中的成员数量,即集合的基数(cardinality)。
语法:
SCARD key
参数:
返回:
集合中的成员数量。
示例:
SCARD set1
注意事项:
获取指定集合的所有成员。
语法:
SMEMBERS key
参数:
返回:
集合中的所有成员列表。
示例:
SMEMBERS set1
注意事项:
判断一个元素是否是指定集合的成员。
语法:
SISMEMBER key member
参数:
返回:
示例:
SISMEMBER set1 apple
注意事项:
从指定集合中随机获取一个或多个元素。
语法:
SRANDMEMBER key [count]
参数:
返回:
示例:
SRANDMEMBER set1 2
注意事项:
获取多个集合之间的差集,即获取存在于第一个集合中但不存在于其他集合中的元素。
语法:
SDIFF key [key …]
参数:
返回:
返回一个包含差集元素的结果集(即存在于第一个集合但不存在于其他集合中的元素)。
示例:
SDIFF set1 set2
注意事项:
将多个集合之间的差集存储到一个新的集合中。
语法:
SDIFFSTORE destination key [key …]
参数:
返回:
返回存储到新集合中的差集元素数量。
示例:
SDIFFSTORE diff_set set1 set2
注意事项:
获取多个集合之间的交集,即获取存在于所有集合中的元素。
语法:
SINTER key [key …]
参数:
返回:
返回一个包含交集元素的结果集(即存在于所有集合中的元素)。
示例:
SINTER set1 set2
注意事项:
将多个集合之间的交集存储到一个新的集合中。
语法:
SINTERSTORE destination key [key …]
参数:
返回:
返回存储到新集合中的交集元素数量。
示例:
SINTERSTORE inter_set set1 set2
注意事项:
获取多个集合的并集,即返回包含所有指定集合中元素的集合,每个元素在结果集中只会出现一次。
语法:
SUNION key [key …]
参数:
返回:
返回一个包含并集元素的结果集,其中包含所有指定集合中的不重复元素。
示例:
SUNION set1 set2
注意事项:
将多个集合的并集存储到一个新的集合中。
语法:
SUNIONSTORE destination key [key …]
参数:
返回:
返回存储到新集合中的并集元素数量。
示例:
SUNIONSTORE union_set set1 set2
注意事项:
从集合中移除一个或多个指定的成员。
语法:
SREM key member [member …]
参数:
返回:
返回被成功移除的成员数量,不包括那些不存在的成员。
示例:
SREM set1 orange
注意事项:
从集合中随机地移除并返回一个或多个成员。
语法:
SPOP key [count]
参数:
返回:
示例:
SPOP set1 2
注意事项:
命令 | 描述 | 格式 |
---|---|---|
ZADD | 向有序集合中添加一个或多个成员,或者更新已存在成员的分数 | ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member …] |
ZSCORE | 获取有序集合中指定成员的分数 | ZSCORE key member |
ZINCRBY | 为有序集合中的成员增加指定的分数 | ZINCRBY key increment member |
ZREM | 从有序集合中移除一个或多个成员 | ZREM key member [member …] |
ZREMRANGEBYRANK | 移除有序集合中排名在指定区间内的成员 | ZREMRANGEBYRANK key start stop |
ZREMRANGEBYSCORE | 移除有序集合中分数在指定范围内的成员 | ZREMRANGEBYSCORE key min max |
ZREMRANGEBYLEX | 移除有序集合中指定字典区间内的成员 | ZREMRANGEBYLEX key min max |
ZCARD | 获取有序集合中的成员数量 | ZCARD key |
ZCOUNT | 计算有序集合中分数在指定范围内的成员数量 | ZCOUNT key min max |
ZLEXCOUNT | 获取有序集合中指定字典区间内的成员数量 | ZLEXCOUNT key min max |
ZRANGEBYLEX | 按照字典排序,获取有序集合中指定字典区间内的成员 | ZRANGEBYLEX key min max [LIMIT offset count] |
ZRANK |
获取有序集合中成员的排名
即成员在有序集合中按分数从小到大排序后的索引位置 |
ZRANK key member |
ZRANGE | 按照分数从小到大的顺序,获取有序集合中的指定范围内的成员 | ZRANGE key start stop [WITHSCORES] |
ZRANGEBYSCORE | 按照分数范围获取有序集合中的成员 | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] |
ZREVRANGE | 按照分数从大到小的顺序,获取有序集合中的指定范围内的成员 | ZREVRANGE key start stop [WITHSCORES] |
ZREVRANGEBYSCORE | 按照分数从大到小的顺序,获取有序集合中分数范围内的成员 | ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] |
ZREVRANK |
获取有序集合中成员的排名
即成员在有序集合中按分数从大到小排序后的索引位置 |
ZREVRANK key member |
ZINTERSTORE | 计算并存储一个或多个有序集合的交集,并将结果存储在新的有序集合中 | ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX] |
ZUNIONSTORE | 计算并存储一个或多个有序集合的并集,并将结果存储在新的有序集合中 | ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX] |
向有序集合中添加一个或多个成员,或者更新已存在成员的分数。
语法:
ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member …]
参数:
返回:
返回成功添加或已更新的成员数量。
示例:
ZADD set1 NX CH 80 "Charlie" 95 "David"
向 set1 有序集合中添加了成员 “David” 及其分数,并且采用了 NX 和 CH 参数,成功添加了一个成员。
注意事项:
为有序集合中的成员增加指定的分数。
语法:
ZINCRBY key increment member
参数:
返回:
返回增加后的成员的新分数。
示例:
ZINCRBY set1 5 "Alice"
注意事项:
从有序集合中移除一个或多个成员。
语法:
ZREM key member [member …]
参数:
返回:
返回被成功移除的成员的数量。
示例:
ZREM set1 "Bob" "Charlie"
注意事项:
移除有序集合中排名在指定区间内的成员。
语法:
ZREMRANGEBYRANK key start stop
参数:
返回:
返回被成功移除的成员的数量。
示例:
ZREMRANGEBYRANK set1 1 3
注意事项:
移除有序集合中分数在指定范围内的成员。
语法:
ZREMRANGEBYSCORE key min max
参数:
返回:
返回被成功移除的成员的数量。
示例:
ZREMRANGEBYSCORE set1 5 8
注意事项:
获取有序集合中的成员数量,也就是获取有序集合的基数。
语法:
ZCARD key
参数:
返回:
返回有序集合的成员数量。
示例:
ZCARD set1
注意事项:
计算有序集合中分数在指定范围内的成员数量。
语法:
ZCOUNT key min max
参数:
返回:
返回分数在指定范围内的成员数量。
示例:
ZCOUNT set1 5 8
注意事项:
按照分数从小到大的顺序,获取有序集合中的指定范围内的成员。
语法:
ZRANGE key start stop [WITHSCORES]
参数:
返回:
返回指定范围内的成员列表。
示例:
ZRANGE set1 1 3
注意事项:
按照分数范围获取有序集合中的成员。
语法:
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
参数:
返回:
返回分数在指定范围内的成员列表。
示例:
ZRANGEBYSCORE set1 5 8
注意事项:
获取有序集合中成员的排名(即成员在有序集合中按分数从小到大排序后的索引位置)。
语法:
ZRANK key member
参数:
返回:
返回成员在有序集合中的排名(从 0 开始)。如果成员不存在于有序集合中,返回 nil。
示例:
ZRANK set1 "Bob"
注意事项:
按照分数从大到小的顺序,获取有序集合中的指定范围内的成员。
语法:
ZREVRANGE key start stop [WITHSCORES]
参数:
返回:
返回指定范围内的成员列表。
示例:
ZREVRANGE set1 0 2
注意事项:
按照分数从大到小的顺序,获取有序集合中分数范围内的成员。
语法:
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
参数:
返回:
返回分数范围内的成员列表。
示例:
ZREVRANGEBYSCORE set1 8 5
注意事项:
获取有序集合中成员的排名(即成员在有序集合中按分数从大到小排序后的索引位置)。
语法:
ZREVRANK key member
参数:
返回:
返回成员在有序集合中的排名(从 0 开始)。如果成员不存在于有序集合中,返回 nil。
示例:
ZREVRANK set1 "Bob"
注意事项:
获取有序集合中指定成员的分数。
语法:
ZSCORE key member
参数:
返回:
返回成员在有序集合中的分数。如果成员不存在于有序集合中,返回 nil。
示例:
ZSCORE set1 "Bob"
注意事项:
获取有序集合中指定字典区间内的成员数量。
语法:
ZLEXCOUNT key min max
参数:
返回:
返回指定字典区间内的成员数量。
示例:
ZADD set1 0 "a" 0 "b" 0 "c" 0 "d" 0 "e"
ZLEXCOUNT set1 [b [d
注意事项:
按照字典排序获取有序集合中指定字典区间内的成员。
语法:
ZRANGEBYLEX key min max [LIMIT offset count]
参数:
返回:
返回指定字典区间内的成员列表。
示例:
ZADD set1 0 "a" 0 "b" 0 "c" 0 "d" 0 "e"
ZRANGEBYLEX set1 [b [d
注意事项:
移除有序集合中指定字典区间内的成员。
语法:
ZREMRANGEBYLEX key min max
参数:
返回:
返回被移除的成员数量。
示例:
ZADD set1 0 "a" 0 "b" 0 "c" 0 "d" 0 "e"
ZREMRANGEBYLEX set1 [b [d
注意事项:
计算并存储一个或多个有序集合的交集。它将多个有序集合的成员交集(根据给定的权重进行计算),并将结果存储在新的有序集合中。
语法:
ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
参数:
返回:
返回存储在目标有序集合中的交集成员数量。
示例:
ZADD set1 1 "a" 2 "b" 3 "c"
ZADD set2 2 "b" 3 "c" 4 "d"
ZINTERSTORE set3 2 set1 set2 WEIGHTS 0.5 0.5
注意事项:
计算并存储一个或多个有序集合的并集。它将多个有序集合的成员并集(根据给定的权重进行计算),并将结果存储在新的有序集合中。
语法:
ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
参数:
返回:
返回存储在目标有序集合中的并集成员数量。
示例:
ZADD set1 1 "a" 2 "b" 3 "c"
ZADD set2 2 "b" 3 "c" 4 "d"
ZUNIONSTORE set3 2 set1 set2 WEIGHTS 0.5 0.5
注意事项:
命令 | 描述 | 格式 |
---|---|---|
XADD | 向指定的 Stream 中添加一条消息 | XADD key [MAXLEN [~ |
XTRIM | 在指定的 Stream 中修剪(Trim)消息的长度,以控制消息数量并释放空间 | XTRIM key MAXLEN [~ |
XDEL | 从指定的 Stream 中删除一个或多个消息 | XDEL key ID [ID …] |
XLEN | 获取指定 Stream 的长度(即消息的数量) | XLEN key |
XRANGE | 获取指定范围内的消息(或事件)列表 | XRANGE key start end [COUNT count] |
XREVRANGE | 按照逆序获取指定范围内的消息(或事件)列表 | XREVRANGE key end start [COUNT count] |
XREAD | 从一个或多个流(Stream)中读取(订阅)消息,它可以持续等待新的消息到达 | XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [ID id] |
XGROUP CREATE | 创建一个消费者组 | XGROUP CREATE key groupname id_or_mkconsumer [mkstream] |
XREADGROUP GROUP | 从流(Stream)中读取消息并将其分配给指定的消费者组 | XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [ID gt] |
XACK | 将消息从消费者组中移除 | XACK key group ID [ID …] |
XGROUP SETID | 设置消费者组(Consumer Group)的消费进度 | XGROUP SETID key group id |
XGROUP DELCONSUMER | 从消费者组(Consumer Group)中删除指定的消费者 | XGROUP DELCONSUMER key group consumer |
XGROUP DESTROY | 销毁消费者组(Consumer Group),同时会将消费者组中的所有未处理消息和待处理消息转移到流的未分组区(未消费消息的默认位置) | XGROUP DESTROY key group |
XPENDING | 获取有关消费者组中待处理消息的信息 | XPENDING key group [start end count] [consumer] |
XINFO GROUPS | 获取有关流的消费者组的信息 | XINFO GROUPS key |
XINFO STREAM |
向指定的 Stream 中添加一条消息。
语法:
XADD key [MAXLEN [~|=] count] [MAXLEN mode count] [ID ID] field value [field value …]
参数:
返回:
成功添加消息后,返回新消息的 ID。
示例:
添加一条消息到名为 mystream 的 Stream 中:
XADD mystream * field1 value1 field2 value2
添加一条消息到名为 mystream 的 Stream 中,限制 Stream 的长度为 1000 条消息,超过长度时自动删除最旧的消息:
XADD mystream MAXLEN ~ 1000 field1 value1 field2 value2
注意事项
在指定的 Stream 中修剪(Trim)消息的长度,以控制消息数量并释放空间。
语法:
XTRIM key MAXLEN [~|=] count
参数:
返回:
成功修剪消息后,返回修剪后的 Stream 的长度。
示例:
修剪名为 mystream 的 Stream,保留最近的 1000 条消息:
XTRIM mystream MAXLEN ~ 1000
修剪名为 mystream 的 Stream,保留精确的 5000 条消息,如果超过则删除超出部分的消息:
XTRIM mystream MAXLEN = 5000
注意事项
从指定的 Stream 中删除一个或多个消息。
语法:
XDEL key ID [ID …]
参数:
返回:
返回被删除的消息的数量。
示例:
从名为 mystream 的 Stream 中删除 ID 为 1605728802574-0 的消息:
XDEL mystream 1605728802574-0
从名为 mystream 的 Stream 中删除多个消息的 ID:
XDEL mystream 1605728802574-0 1605728802574-1 1605728802574-2
注意事项
获取指定 Stream 的长度(即消息的数量)。
语法:
XLEN key
参数:
返回:
返回指定 Stream 的长度(即消息的数量)。
示例:
获取名为 mystream 的 Stream 的长度:
XLEN mystream
注意事项
获取指定范围内的消息(或事件)列表,这些消息是存储在一个给定流(Stream)中的。
语法:
XRANGE key start end [COUNT count]
参数:
返回:
返回指定范围内的消息列表,每条消息包括ID和消息内容。
示例:
获取名为 mystream 的 Stream 中所有消息:
XRANGE mystream - +
获取名为 mystream 的 Stream 中最新的 10 条消息:
XRANGE mystream 1605728802574-0 + COUNT 10
注意事项
按照逆序获取指定范围内的消息(或事件)列表,这些消息是存储在一个给定流(Stream)中的。
语法:
XREVRANGE key end start [COUNT count]
参数:
返回:
返回按逆序排列的指定范围内的消息列表,每条消息包括ID和消息内容。
示例:
获取名为 mystream 的 Stream 中所有消息的逆序列表:
XREVRANGE mystream + -
获取名为 mystream 的 Stream 中最新的 10 条消息的逆序列表:
XREVRANGE mystream + 1605728802574-0 COUNT 10
注意事项
从一个或多个流(Stream)中读取(订阅)消息,它可以持续等待新的消息到达。
语法:
XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [ID id]
参数:
返回:
返回一个包含流名称和消息的数组。每个消息包含ID和内容。
示例:
从名为 mystream 的 Stream 中读取消息并等待新消息到达:
XREAD STREAMS mystream 0
从名为 stream1 和 stream2 的 Stream 中读取最新的 5 条消息:
XREAD COUNT 5 STREAMS stream1 stream2 0
注意事项
创建一个消费者组(Consumer Group)。消费者组是用于对流(Stream)进行消费的一种机制,它允许多个消费者协同地处理流中的消息。
语法:
XGROUP CREATE key groupname id_or_mkconsumer [mkstream]
参数:
返回:
返回创建消费者组的结果。
示例:
创建名为 mystream 的流,并创建一个名为 mygroup 的消费者组,并指定消费者为 consumer1:
XGROUP CREATE mystream mygroup consumer1 $
注意事项
从流(Stream)中读取消息并将其分配给指定的消费者组(Consumer Group)。这可以用于实现多个消费者协同处理流中的消息。
语法:
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [ID gt]
参数:
返回:
返回一个包含流名称和消息的数组。每个消息包含ID和内容。
示例:
从名为 mystream 的 Stream 中读取消息并分配给名为 mygroup 的消费者组中的名为 consumer1 的消费者:
XREADGROUP GROUP mygroup consumer1 STREAMS mystream >
从名为 stream1 和 stream2 的 Stream 中读取最新的 5 条消息并分配给消费者组:
XREADGROUP GROUP mygroup consumer1 COUNT 5 BLOCK 1000 STREAMS stream1 stream2 >
注意事项
将消息从消费者组(Consumer Group)中移除。当一个消费者成功处理了一条消息后,可以使用 XACK 命令将该消息标记为已处理,避免其他消费者重复处理。
语法:
XACK key group ID [ID …]
参数:
返回:
返回移除消息的结果,即成功移除的消息数量。
示例:
移除名为 mystream 的流中消费者组 mygroup 中的消息:
XACK mystream mygroup 1537696289909-0
注意事项
设置消费者组(Consumer Group)的消费进度。可以使用 XGROUP SETID 命令来重置或调整消费者组消费的起始位置。
语法:
XGROUP SETID key group id
参数:
返回:
返回设置消费进度的结果。
示例:
设置名为 mystream 的流中消费者组 mygroup 的消费进度为 1605965850628-0:
XGROUP SETID mystream mygroup 1605965850628-0
注意事项
从消费者组(Consumer Group)中删除指定的消费者。这可以用于停止消费者从流中接收消息。
语法:
XGROUP DELCONSUMER key group consumer
参数:
返回:
返回删除消费者的结果。
示例:
从名为 mystream 的流中的消费者组 mygroup 中删除名为 consumer1 的消费者:
XGROUP DELCONSUMER mystream mygroup consumer1
注意事项
销毁消费者组(Consumer Group),同时会将消费者组中的所有未处理消息和待处理消息转移到流的未分组区(未消费消息的默认位置)。
语法:
XGROUP DESTROY key group
参数:
返回:
如果成功销毁消费者组,则返回1;如果消费者组不存在,则返回0。
示例:
XGROUP DESTROY mystream mygroup
注意事项
获取有关消费者组中待处理消息的信息。它可以提供有关待处理消息的数量、最早/最新消息的 ID、不同消费者的挂起消息数量等相关信息。
语法:
XPENDING key group [start end count] [consumer]
参数:
返回:
返回一个列表,包含有关待处理消息的各种信息。
示例:
获取名为 mystream 的流中消费者组 mygroup 中的待处理消息信息:
XPENDING mystream mygroup
获取名为 mystream 的流中消费者组 mygroup 中的 10 条待处理消息信息:
XPENDING mystream mygroup - + 10
获取名为 mystream 的流中消费者组 mygroup 中消费者 consumer1 的待处理消息信息:
XPENDING mystream mygroup - + 10 consumer1
注意事项
获取有关流的消费者组的信息。它提供了有关每个消费者组的名称、正在处理的消息数量、最后一个已经被消费的消息 ID 等相关信息。
语法:
XINFO GROUPS key
参数:
返回:
返回一个包含有关消费者组的信息的列表。
示例:
获取名为 mystream 的流的所有消费者组的信息:
XINFO GROUPS mystream
注意事项
获取有关流的信息。它提供了有关流的长度、第一个和最后一个消息的 ID、消费者组的数量等相关信息。
语法:
XINFO STREAM key
参数:
返回:
返回一个包含有关流的信息的列表。
示例:
获取名为 mystream 的流的信息:
XINFO STREAM mystream
注意事项
命令 | 描述 | 格式 |
---|---|---|
PUBLISH | 向指定频道发布消息 | PUBLISH channel message |
SUBSCRIBE | 订阅一个或多个频道 | SUBSCRIBE channel [channel …] |
PSUBSCRIBE | 订阅与给定模式匹配的一个或多个频道 | PSUBSCRIBE pattern [pattern …] |
UNSUBSCRIBE | 取消订阅一个或多个频道 | UNSUBSCRIBE [channel [channel …]] |
PUNSUBSCRIBE | 取消订阅与给定模式匹配的一个或多个频道 | PUNSUBSCRIBE [pattern [pattern …]] |
PUBSUB | 获取关于发布/订阅消息的信息,如查看订阅者数量、查看频道和模式信息等 | PUBSUB subcommand [argument [argument …]] |
将指定的消息发布到指定的频道。
当有订阅者订阅了相应的频道,它们将收到从该频道发布的消息。
语法:
PUBLISH channel1 “Hello, subscribers!”
参数:
返回:
返回值表示接收到消息的订阅者数量(不包括那些无法接收到消息的订阅者)。
示例:
PUBLISH channel1 "Hello, subscribers!"
注意事项
订阅一个或多个频道,以接收这些频道中发布的消息。
语法:
SUBSCRIBE channel [channel …]
参数:
返回:
在成功执行订阅操作后,SUBSCRIBE 命令将进入订阅模式,不再返回任何结果。当有消息发布到已订阅的频道时,服务器会向客户端发送相应的消息。
示例:
SUBSCRIBE channel1 channel2
注意事项
语法:
参数:
返回:
示例:
取消订阅一个或多个频道。在客户端不再需要接收指定频道的消息时,可以使用该命令取消订阅。
语法:
UNSUBSCRIBE [channel [channel …]]
参数:
返回:
在成功执行取消订阅操作后,服务器将向客户端返回一个相关的 UNSUBSCRIBE 消息,用于通知客户端已成功取消订阅。
示例:
UNSUBSCRIBE channel1 channel2
注意事项
取消订阅模式,即取消与指定模式相关的所有订阅。
语法:
PUNSUBSCRIBE [pattern [pattern …]]
参数:
返回:
在成功执行取消订阅操作后,服务器将向客户端返回一个相关的PUNSUBSCRIBE 消息,以通知客户端已成功取消订阅。
示例:
PUNSUBSCRIBE news.*
注意事项
获取关于发布/订阅消息的信息,如查看订阅者数量、查看频道和模式信息等。
语法:
PUBSUB subcommand [argument [argument …]]
参数:
subcommand: 可以是以下几种子命令之一:
pattern: 可选参数,用于匹配频道的模式。
返回:
根据不同的子命令,返回值也会有所不同:
示例:
PUBSUB CHANNELS // 获取当前至少有一个订阅者的频道
PUBSUB NUMSUB channel1 // 获取指定频道的订阅者数量
PUBSUB NUMPAT // 获取满足指定模式的订阅数
注意事项
命令 | 描述 | 格式 |
---|---|---|
SETBIT | 设置位图指定位置的值 | SETBIT key offset value |
GETBIT | 获取位图指定位置的值 | GETBIT key offset |
BITCOUNT | 统计位图中值为 1 的位的数量 | BITCOUNT key [start end] |
BITOP | 对一个或多个位图进行位运算 | BITOP operation destkey key [key …] |
BITPOS | 在指定范围内查找指定 key 中的第一个位值为 1 或 0 的位置 | BITPOS key bit [start] [end] |
BITFIELD | 对位图执行多个位操作 | BITFIELD key [GET |
设置指定位图(Bitmap)中指定偏移量(offset)的位的值。
语法:
SETBIT key offset value
参数:
返回:
设置前位图中偏移量对应的位的值。
示例:
SETBIT mybitmap 5 1
注意事项:
获取指定位图(Bitmap)中指定偏移量(offset)的位的值。
语法:
GETBIT key offset
参数:
返回:
指定位图中偏移量对应的位的值,0 或 1。
示例:
GETBIT mybitmap 5
注意事项:
计算指定 key 中位值为 1 的个数。这个命令通常用于处理位数组、进行特定数据集的统计分析或者计算位图的相关信息。
语法:
BITCOUNT key [start end]
参数:
返回:
示例:
BITCOUNT mykey // 统计 mykey 的字符串值中被设置为 1 的比特位的数量
BITCOUNT mykey 0 1 // 计数从第 0 个到第 1 个位
BITCOUNT mykey 0 -1 // 计数从第 0 个到最后一个位
BITCOUNT mykey -3 -1 // 计数从倒数第 3 个到最后一个位
注意事项
对多个 key 进行位操作,并将结果保存到指定的目标 key 中。
该命令支持的位操作包括 AND、OR、XOR 和 NOT。
语法:
BITOP operation destkey key [key …]
参数:
返回:
示例:
BITOP AND destkey key1 key2 // 对 key1 和 key2 进行按位 AND 操作,结果存储在 destkey 中
注意事项
在指定范围内查找指定 key 中的第一个位值为 1 或 0 的位置。
该命令可以用于位图、索引和位集合的操作。
语法:
BITPOS key bit [start] [end]
参数:
返回:
如果在指定范围内找到指定的位值,返回其索引位置;如果未找到,返回 -1。
如果 key 不存在,也返回 -1。
示例:
BITPOS key 1 2 2 // 在指定范围内未找到位值为 1 的位置
注意事项
执行复杂的位级操作,可以对指定偏移量的位进行读取、设置或修改,还可以进行多个位域的组合操作。
语法:
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
参数:
返回:
根据执行的操作不同,返回不同的结果。执行成功时返回相应的执行结果。
示例:
BITFIELD mykey GET u4 0 // 读取 mykey 中索引为 0 的 4 位的无符号整数
BITFIELD mykey SET u4 0 5 // 将 mykey 中索引为 0 的 4 位设置为无符号整数 5
BITFIELD mykey INCRBY i4 4 2 // 将 mykey 中索引为 4 的 4 位的有符号整数增加 2
BITFIELD mykey OVERFLOW WRAP // 设置溢出时的处理方式为环绕
注意事项
Redis 本身并没有提供布隆过滤器(Bloom Filter)功能。
如果需要使用,需要安装 RedisBloom 模块,这是一个由 Redis 社区开发的开源模块,为 Redis 提供了布隆过滤器的功能。一旦安装了 RedisBloom 模块,你就能够使用相关的命令进行布隆过滤器的管理和操作。
命令 | 描述 | 格式 |
---|---|---|
BF.ADD | 将元素添加到布隆过滤器中 | BF.ADD key element [element …] |
BF.MADD | 向布隆过滤器中批量添加多个元素 | BF.MADD key item [item …] |
BF.EXISTS | 检查给定元素是否存在于布隆过滤器中 | BF.EXISTS key item [ITEM …] |
BF.MEXISTS | 性检查多个元素是否存在于布隆过滤器中 | BF.MEXISTS key item [item …] |
BF.INFO | 获取布隆过滤器的信息,包括错误率、容量、哈希函数数量等 | BF.INFO key |
BF.INSERT | 在布隆过滤器中插入指定元素 | BF.INSERT key [ITEMS item [item …]] [CAPACITY capacity] [ERROR error] [EXPANSION expansion] [NO_CREATE] [NONSCALING] |
BF.RESRVE | 创建一个空的布隆过滤器,设置其预期容量和错误率 | BF.RESERVE key capacity error [EXPANSION expansion] |
BF.LOADCHUNK | 在布隆过滤器中生成一个迭代器,可以用于逐步遍历过滤器中的所有元素 | BF.SCANDUMP key iter |
BF.SCANDUMP | 将布隆过滤器的一块数据(chunk)加载到 RedisBloom 过滤器中 | BF.LOADCHUNK key id chunk |
将元素添加到布隆过滤器中。
语法:
BF.ADD key element [element …]
参数:
返回:
返回一个整数值,表示成功添加到布隆过滤器中的元素数量。
示例:
BF.ADD bloomfilter alice
注意事项:
向布隆过滤器中批量添加多个元素。
语法:
BF.MADD key item [item …]
参数:
返回:
返回一个整数值,表示成功添加到布隆过滤器中的元素数量。
示例:
BF.MADD bloomfilter alice bob carol
注意事项:
检查给定元素是否存在于布隆过滤器中。
语法:
BF.EXISTS key item [ITEM …]
参数:
返回:
返回一个整数值,表示给定元素是否存在于布隆过滤器中。如果返回值为 1,则表示元素可能存在于布隆过滤器中;如果返回值为 0,则表示元素肯定不存在于布隆过滤器中。
示例:
BF.EXISTS bloomfilter alice
注意事项:
一次性检查多个元素是否存在于布隆过滤器中。
语法:
BF.MEXISTS key item [item …]
参数:
返回:
布尔值的数组,每个元素代表对应位置的元素是否存在于布隆过滤器中
示例:
BF.MEXISTS myfilter hello world nonexist
注意事项:
获取布隆过滤器的信息,包括错误率、容量、哈希函数数量等。
语法:
BF.INFO key
参数:
返回:
字符串,包含有关布隆过滤器的信息。
示例:
BF.INFO myfilter
注意事项:
在布隆过滤器中插入指定元素。
语法:
BF.INSERT key [ITEMS item [item …]] [CAPACITY capacity] [ERROR error] [EXPANSION expansion] [NO_CREATE] [NONSCALING]
参数:
返回:
插入成功的元素的数量。
示例:
BF.INSERT myfilter hello world
注意事项:
创建一个空的布隆过滤器,设置其预期容量和错误率。
语法:
BF.RESERVE key capacity error [EXPANSION expansion]
参数:
返回:
字符串,表示成功创建的布隆过滤器的信息。
示例:
BF.RESERVE myfilter 100 0.01
注意事项:
在布隆过滤器中生成一个迭代器,可以用于逐步遍历过滤器中的所有元素。
语法:
BF.SCANDUMP key iter
参数:
返回:
迭代器(iterator)值,用于后续的 BF.SCANITER 命令。
示例:
BF.SCANDUMP myfilter 0
注意事项:
将布隆过滤器的一块数据(chunk)加载到 RedisBloom 过滤器中。
语法:
BF.LOADCHUNK key id chunk
参数:
返回:
字符串,表示命令执行的状态。
示例:
BF.LOADCHUNK myfilter 0 0123456789ABCDEF
注意事项:
命令 | 描述 | 格式 |
---|---|---|
PFADD | 添加一个或多个元素到 HyperLogLog 中 | PFADD key element [element …] |
PFCOUNT | 统计 HyperLogLog 中的唯一元素的数量 | PFCOUNT key [key …] |
PFMERGE | 合并多个 HyperLogLog | PFMERGE destkey sourcekey [sourcekey …] |
向 HyperLogLog 结构添加一个或多个元素,用于估计集合的基数(不重复元素的数量)。
它的操作速度非常快,并且占用的空间很小。
语法:
PFADD key element [element …]
参数:
返回:
示例:
PFADD hllkey "element1" "element2" "element3"
注意事项
计算 HyperLogLog 结构的基数(不重复元素的数量)。
它可以用于统计、估计集合的大小,具有快速运算和占用较小内存的特点。
语法:
PFCOUNT key [key …]
参数:
返回:
返回值表示计算得到的基数(不重复元素的数量)。
示例:
PFCOUNT hllkey
注意事项
合并多个 HyperLogLog 结构,得到一个新的 HyperLogLog 结构,新结构的基数估计值接近于合并前各个结构基数估计值的总和。
语法:
PFMERGE destkey sourcekey [sourcekey …]
参数:
返回:
无返回值,在执行成功后,会将合并的结果存储在 destkey 中。
示例:
PFMERGE hllkey-merged hllkey1 hllkey2
注意事项
命令 | 描述 | 格式 |
---|---|---|
GEOADD | 向一个地理位置集合中添加一个或多个地理位置对象,并在地理位置集合中建立索引 | GEOADD key longitude latitude member [longitude latitude member …] |
GEOPOS | 获取一个或多个地理位置对象在地理位置集合中的经纬度坐标 | GEOPOS key member [member …] |
GEOHASH | 获取一个或多个地理位置对象在地理位置集合中的 Geohash 值 | GEOHASH key member [member …] |
GEODIST | 计算地理位置集合中两个地理位置对象之间的距离 | GEODIST key member1 member2 [unit] |
GEORADIUS | 从地理位置集合中查找指定中心点范围内的地理位置对象 | GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key] |
GEORADIUSBYMEMBER | 从地理位置集合中查找与指定地理位置对象邻近的地理位置对象 | GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key] |
向一个地理位置集合(GeoSet)中添加一个或多个地理位置对象,并在地理位置集合中建立索引。
语法:
GEOADD key longitude latitude member [longitude latitude member …]
参数:
返回:
返回添加到地理位置集合中的成员数量。
示例:
GEOADD cities 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
使用 GEOADD 命令向 cities 地理位置集合中添加了两个地理位置对象,分别是 “Palermo” 和 “Catania”。其中 “Palermo” 的经度为 13.361389,纬度为 38.115556;“Catania” 的经度为 15.087269,纬度为 37.502669。
注意事项:
获取一个或多个地理位置对象在地理位置集合中的经纬度坐标。
语法:
GEOPOS key member [member …]
参数:
返回:
返回一个或多个地理位置对象的经纬度坐标。
示例:
GEOPOS cities "Palermo" "Catania"
使用 GEOPOS 命令获取了地理位置集合 cities 中 “Palermo” 和 “Catania” 两个地理位置对象的经纬度坐标。
注意事项:
获取一个或多个地理位置对象在地理位置集合中的 Geohash 值。
语法:
GEOHASH key member [member …]
参数:
返回:
返回一个或多个地理位置对象的 Geohash 值。
示例:
GEOHASH cities "Palermo" "Catania"
使用 GEOHASH 命令获取了地理位置集合 cities 中 “Palermo” 和 “Catania” 两个地理位置对象的 Geohash 值。
注意事项:
计算地理位置集合中两个地理位置对象之间的距离。
语法:
GEODIST key member1 member2 [unit]
参数:
返回:
返回两个地理位置对象之间的距离。
示例:
GEODIST cities "Palermo" "Catania" km
使用 GEODIST 命令计算了地理位置集合 cities 中 “Palermo” 和 “Catania” 两个地理位置对象之间的距离,并指定距离单位为千米。
注意事项:
从地理位置集合中查找指定中心点范围内的地理位置对象。
语法:
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
参数:
返回:
根据命令参数的设置,返回符合条件的地理位置对象的列表或存储结果的键名。
示例:
GEORADIUS cities 13.361389 38.115556 200 km WITHDIST WITHCOORD COUNT 10
使用 GEORADIUS 命令查找了地理位置集合 cities 中距离经度 13.361389、纬度 38.115556 点200千米范围内的地理位置对象,并返回了距禿中心点距离、经纬度坐标,并限制了返回结果的数量为 10。
GEORADIUS cities 13.361389 38.115556 200 km COUNT 10 ASC STORE cities1
GEORADIUS cities 13.361389 38.115556 200 km COUNT 10 ASC STOREDIST cities1
注意事项:
从地理位置集合中查找与指定地理位置对象邻近的地理位置对象。
语法:
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
参数:
返回:
根据命令参数的设置,返回符合条件的地理位置对象的列表或存储结果的键名。
示例:
GEORADIUSBYMEMBER cities "Palermo" 200 km WITHDIST WITHCOORD COUNT 10
使用 GEORADIUSBYMEMBER 命令查找了地理位置集合 cities 中与地理位置对象 “Palermo” 邻近的地理位置对象,并返回了距离和经纬度坐标,并限制了返回结果的数量为 10。
GEORADIUSBYMEMBER cities "Palermo" 200 km COUNT 10 ASC STORE cities1
GEORADIUSBYMEMBER cities "Palermo" 200 km COUNT 10 ASC STOREDIST cities1
注意事项:
命令 | 描述 | 格式 | 示例 |
---|---|---|---|
MULTI | 标记一个事务块的开始。 | MULTI | MULTI |
EXEC | 执行事务块中的所有命令。 | EXEC | EXEC |
WATCH | 监视一个或多个键,用于在事务执行期间检测到键发生变化时取消事务。 | WATCH key1 [key2 …] | WATCH key1 key2 |
UNWATCH | 取消对所有键的监视。 | UNWATCH | UNWATCH |
DISCARD | 取消当前事务。 | DISCARD | DISCARD |
使用示例:
MULTI # 标记一个事务的开始
GET mykey # 读取当前mykey的值
SET mykey "NewValue" # 修改mykey的值
EXEC # 执行事务
在MULTI和EXEC之间的命令会被作为一个事务执行,如果某个命令执行失败,那么整个事务都会回滚。
Redis支持使用Lua脚本执行原子操作,Lua脚本在Redis服务器端执行,可以避免多次网络往返。通过执行Lua脚本,可以实现复杂的逻辑和操作,例如条件判断和循环等。
使用Lua脚本,可以使用EVAL或者EVALSHA命令来执行脚本。EVAL命令接受完整的Lua脚本作为参数,而EVALSHA命令接受已经执行过的脚本的SHA1哈希值作为参数。
命令 | 描述 | 格式 |
---|---|---|
EVAL | 执行给定的Lua脚本 | EVAL script numkeys key [key …] arg [arg …] |
EVALSHA | 执行预先缓存的Lua脚本,通过脚本的SHA1哈希值来标识脚本 | EVALSHA sha1 numkeys key [key …] arg [arg …] |
示例:
EVAL "return 2+2" 0
执行了一个简单的Lua脚本,计算了2+2的值。
EVALSHA abf7ef848f97a50d28e452df8e3f131732f36bcf 0
执行了一个已经缓存的Lua脚本,该脚本的SHA1哈希值为abf7ef848f97a50d28e452df8e3f131732f36bcf。
参考: https://redis.com.cn/commands.html