Redis面试——常用命令
一、String
(1)设置值相关命令


1.1.1 SET
- 功能:设置一个键值对,如果键已存在则覆盖旧值
- 语法:
SET key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds:设置键的过期时间为 seconds 秒 PX milliseconds:设置键的过期时间为 milliseconds 毫秒 NX:仅当键不存在时设置 XX:仅当键已存在时设置 - 示例:
127.0.0.1:6379> SET mykey "Hello" OK - 输出解释:OK 表示设置成功
1.1.2 SETNX
- 功能:仅当键不存在时设置键值对
- 语法:
SETNX key value - 示例:
127.0.0.1:6379> SETNX mykey "World" (integer) 0 - 输出解释:因为 mykey 已经存在,所以返回 0 表示设置失败
1.1.3 SETEX
- 功能:设置键值对并同时设置过期时间(以秒为单位)
- 语法:
SETEX key seconds value - 示例:
127.0.0.1:6379> SETEX mykey2 60 "Temporary Value" OK - 输出解释:OK 表示设置成功,mykey2 将在 60 秒后过期
1.1.4 PSETEX
- 功能:设置键值对并同时设置过期时间(以毫秒为单位)
- 语法:
PSETEX key milliseconds value - 示例:
127.0.0.1:6379> PSETEX mykey3 10000 "Short - lived Value" OK - 输出解释:OK 表示设置成功,mykey3 将在 10000 毫秒(即 10 秒)后过期
1.1.5 MSET
- 功能:同时设置多个键值对
- 语法:
MSET key1 value1 [key2 value2 ...] - 示例:
127.0.0.1:6379> MSET key1 "value1" key2 "value2" OK - 输出解释:OK 表示所有键值对都设置成功
1.1.6 MSETNX
- 功能:仅当所有给定键都不存在时,同时设置多个键值对。如果有一个键已存在,则所有键都不会被设置
- 语法:
MSETNX key1 value1 [key2 value2 ...] - 示例:
127.0.0.1:6379> MSETNX key3 "value3" key4 "value4" (integer) 1 - 输出解释:返回 1 表示所有键都不存在,设置成功
(2)获取值相关命令
1.2.1 GET
- 功能:获取指定键的值。如果键不存在,返回 (nil)
- 语法:
GET key - 示例:
127.0.0.1:6379> GET mykey "Hello" - 输出解释:返回键 mykey 对应的值 "Hello"
1.2.2 MGET
- 功能:同时获取多个键的值。如果某个键不存在,对应位置返回 (nil)
- 语法:
MGET key1 [key2 ...] - 示例:
127.0.0.1:6379> MGET key1 key2 key3 1) "value1" 2) "value2" 3) "value3" - 输出解释:依次返回 key1、key2、key3 的值
(3)数值操作相关命令
1.3.1 INCR
- 功能:将键的值递增 1。如果键不存在,则先将其值初始化为 0 再进行递增。键的值必须是整数
- 语法:
INCR key - 示例:
127.0.0.1:6379> SET counter 10 OK 127.0.0.1:6379> INCR counter (integer) 11 - 输出解释:counter 的值从 10 递增到 11
1.3.2 DECR
- 功能:将键的值递减 1。如果键不存在,则先将其值初始化为 0 再进行递减。键的值必须是整数
- 语法:
DECR key - 示例:
127.0.0.1:6379> DECR counter (integer) 10 - 输出解释:counter 的值从 11 递减到 10
1.3.3 INCRBY
- 功能:将键的值增加指定的整数。如果键不存在,则先将其值初始化为 0 再进行增加
- 语法:
INCRBY key increment - 示例:
127.0.0.1:6379> INCRBY counter 5 (integer) 15 - 输出解释:counter 的值增加 5 后变为 15
1.3.4 DECRBY
- 功能:将键的值减少指定的整数。如果键不存在,则先将其值初始化为 0 再进行减少
- 语法:
DECRBY key decrement - 示例:
127.0.0.1:6379> DECRBY counter 3 (integer) 12 - 输出解释:counter 的值减少 3 后变为 12
1.3.5 INCRBYFLOAT
- 功能:将键的值增加指定的浮点数。如果键不存在,则先将其值初始化为 0 再进行增加
- 语法:
INCRBYFLOAT key increment - 示例:
127.0.0.1:6379> SET float_counter 2.5 OK 127.0.0.1:6379> INCRBYFLOAT float_counter 1.5 "4" - 输出解释:float_counter 的值从 2.5 增加 1.5 后变为 4
(4)字符串操作相关命令
1.4.1 APPEND
- 功能:如果键已经存在,将指定的值追加到键的现有值的末尾;如果键不存在,则等同于 SET 命令
- 语法:
APPEND key value - 示例:
127.0.0.1:6379> SET message "Hello" OK 127.0.0.1:6379> APPEND message " World" (integer) 11 - 输出解释:返回追加后字符串的长度,此时 message 的值为 "Hello World"
1.4.2 STRLEN
- 功能:返回键对应值的字符串长度。如果键不存在,返回 0
- 语法:
STRLEN key - 示例:
127.0.0.1:6379> STRLEN message (integer) 11 - 输出解释:message 的值 "Hello World" 长度为 11
1.4.3 GETRANGE
- 功能:返回键对应值的子字符串,通过指定起始和结束索引。索引从 0 开始,负数表示从字符串末尾开始计数
- 语法:
GETRANGE key start end - 示例:
127.0.0.1:6379> GETRANGE message 0 4 "Hello" - 输出解释:返回 message 从索引 0 到 4 的子字符串 "Hello"
1.4.4 SETRANGE
- 功能:从指定的偏移量开始,用指定的值覆盖键对应值的一部分。如果偏移量超过了原字符串的长度,中间会用 0 字节填充
- 语法:
SETRANGE key offset value - 示例:
127.0.0.1:6379> SETRANGE message 6 "Redis" (integer) 11 127.0.0.1:6379> GET message "Hello Redis" - 输出解释:返回修改后字符串的长度,message 的值被修改为 "Hello Redis"
二、List


(1)插入元素命令
2.1.1 LPUSH
- 功能:将一个或多个值插入到列表的头部(左侧)。若列表不存在,会先创建一个空列表再插入
- 语法:
LPUSH key value [value ...] - 示例:
127.0.0.1:6379> LPUSH mylist "apple" (integer) 1 127.0.0.1:6379> LPUSH mylist "banana" "cherry" (integer) 3 - 输出解释:第一次插入后列表长度为 1,第二次插入两个值后列表长度变为 3。当前列表 mylist 元素顺序为 ["cherry", "banana", "apple"]
2.1.2 RPUSH
- 功能:将一个或多个值插入到列表的尾部(右侧)。若列表不存在,会先创建空列表再插入
- 语法:
RPUSH key value [value ...] - 示例:
127.0.0.1:6379> RPUSH mylist "date" (integer) 4 - 输出解释:插入后列表长度变为 4,此时列表 mylist 元素顺序为 ["cherry", "banana", "apple", "date"]
2.1.3 LPUSHX
- 功能:仅当列表存在时,将一个值插入到列表的头部
- 语法:
LPUSHX key value - 示例:
127.0.0.1:6379> LPUSHX mylist "elderberry" (integer) 5 - 输出解释:由于 mylist 存在,插入成功,列表长度变为 5,元素顺序为 ["elderberry", "cherry", "banana", "apple", "date"]
2.1.4 RPUSHX
- 功能:仅当列表存在时,将一个值插入到列表的尾部
- 语法:
RPUSHX key value - 示例:
127.0.0.1:6379> RPUSHX mylist "fig" (integer) 6 - 输出解释:因为 mylist 存在,插入成功,列表长度变为 6,元素顺序为 ["elderberry", "cherry", "banana", "apple", "date", "fig"]
(2)移除元素命令
2.2.1 LPOP
- 功能:移除并返回列表的第一个元素(头部元素)。若列表为空,返回 (nil)
- 语法:
LPOP key - 示例:
127.0.0.1:6379> LPOP mylist "elderberry" - 输出解释:移除并返回了列表 mylist 的头部元素 "elderberry",此时列表元素顺序为 ["cherry", "banana", "apple", "date", "fig"]
2.2.2 RPOP
- 功能:移除并返回列表的最后一个元素(尾部元素)。若列表为空,返回 (nil)
- 语法:
RPOP key - 示例:
127.0.0.1:6379> RPOP mylist "fig" - 输出解释:移除并返回了列表 mylist 的尾部元素 "fig",此时列表元素顺序为 ["cherry", "banana", "apple", "date"]
(3)获取元素命令
2.3.1 LRANGE
- 功能:返回列表中指定范围的元素。索引从 0 开始,负数表示从列表末尾开始计数,如
-1表示最后一个元素 - 语法:
LRANGE key start stop - 示例:
127.0.0.1:6379> LRANGE mylist 0 -1 1) "cherry" 2) "banana" 3) "apple" 4) "date" - 输出解释:返回了列表 mylist 中从索引 0 到最后一个元素的所有元素
2.3.2 LINDEX
- 功能:返回列表中指定索引位置的元素。若索引超出列表范围,返回 (nil)
- 语法:
LINDEX key index - 示例:
127.0.0.1:6379> LINDEX mylist 2 "apple" - 输出解释:返回了列表 mylist 中索引为 2 的元素 "apple"
(4)列表长度命令
2.4.1 LLEN
- 功能:返回列表的长度。若列表不存在,返回 0
- 语法:
LLEN key - 示例:
127.0.0.1:6379> LLEN mylist (integer) 4 - 输出解释:列表 mylist 的长度为 4
(5)列表修剪命令
2.5.1 LTRIM
- 功能:对列表进行修剪,只保留指定范围内的元素,其他元素会被删除
- 语法:
LTRIM key start stop - 示例:
127.0.0.1:6379> LTRIM mylist 1 2 OK 127.0.0.1:6379> LRANGE mylist 0 -1 1) "banana" 2) "apple" - 输出解释:保留了列表 mylist 中索引 1 到 2 的元素,删除了其他元素。修剪后列表元素顺序为 ["banana", "apple"]
(6)阻塞式弹出命令
2.6.1 BLPOP
- 功能:阻塞式地从一个或多个列表的头部弹出元素。若所有列表都为空,客户端会被阻塞,直到有元素被插入到任何一个列表中或者达到指定的超时时间
- 语法:
BLPOP key [key ...] timeout - 示例:假设当前有两个列表 list1 为空,list2 有元素 ["item1"]
127.0.0.1:6379> BLPOP list1 list2 10 1) "list2" 2) "item1" - 输出解释:客户端从 list2 中弹出了头部元素 "item1",因为 list1 为空,list2 有元素。若两个列表都为空,客户端会阻塞最多 10 秒
2.6.2 BRPOP
- 功能:阻塞式地从一个或多个列表的尾部弹出元素。若所有列表都为空,客户端会被阻塞,直到有元素被插入到任何一个列表中或者达到指定的超时时间
- 语法:
BRPOP key [key ...] timeout - 示例:与 BLPOP 类似,只是从尾部弹出元素
(7)列表元素移动命令
2.7.1 RPOPLPUSH
- 功能:移除列表的最后一个元素,并将其插入到另一个列表的头部
- 语法:
RPOPLPUSH source destination - 示例:
127.0.0.1:6379> RPOPLPUSH mylist anotherlist "apple" - 输出解释:将列表 mylist 的尾部元素 "apple" 移除,并插入到列表 anotherlist 的头部
2.7.2 BRPOPLPUSH
- 功能:阻塞式地从一个列表的尾部弹出元素,并将其插入到另一个列表的头部。若源列表为空,客户端会被阻塞,直到有元素被插入到源列表中或者达到指定的超时时间
- 语法:
BRPOPLPUSH source destination timeout - 示例:与 RPOPLPUSH 类似,但具有阻塞功能
三、Hash

(1)设置哈希字段
3.1.1 HSET
- 功能:为哈希表中的一个或多个字段设置值。如果哈希表不存在,会创建一个新的哈希表;如果字段已存在,会覆盖旧值
- 语法:
HSET key field value [field value ...] - 示例:
127.0.0.1:6379> HSET user:1 name "Alice" age 25 (integer) 2 - 输出解释:
3.1.2 HSETNX
- 功能:仅当字段不存在时,为哈希表中的字段设置值
- 语法:
HSETNX key field value - 示例:
127.0.0.1:6379> HSETNX user:1 email "alice@example.com" (integer) 1 127.0.0.1:6379> HSETNX user:1 name "Bob" (integer) 0 - 输出解释:第一次执行 HSETNX 时,email 字段不存在,设置成功,返回 1;第二次执行时,name 字段已存在,设置失败,返回 0
(2)获取哈希字段的值
3.2.1 HGET
- 功能:获取哈希表中指定字段的值。如果字段不存在,返回 (nil)
- 语法:
HGET key field - 示例:
127.0.0.1:6379> HGET user:1 name "Alice" - 输出解释:返回哈希表 user:1 中 name 字段的值 "Alice"
3.2.2 HMGET
- 功能:获取哈希表中一个或多个字段的值。如果某个字段不存在,对应位置返回 (nil)
- 语法:
HMGET key field [field ...] - 示例:
127.0.0.1:6379> HMGET user:1 name age email 1) "Alice" 2) "25" 3) "alice@example.com" - 输出解释:依次返回 name、age、email 字段的值
3.2.3 HGETALL
- 功能:获取哈希表中所有的字段和值。返回的结果是字段和值交替出现
- 语法:
HGETALL key - 示例:
127.0.0.1:6379> HGETALL user:1 1) "name" 2) "Alice" 3) "age" 4) "25" 5) "email" 6) "alice@example.com" - 输出解释:返回哈希表 user:1 中所有的字段和对应的值
(3)删除哈希字段
3.3.1 HDEL
- 功能:删除哈希表中一个或多个字段。返回被删除字段的数量
- 语法:
HDEL key field [field ...] - 示例:
127.0.0.1:6379> HDEL user:1 email (integer) 1 - 输出解释:成功删除了 user:1 哈希表中的 email 字段,返回 1
(4)检查哈希字段是否存在
3.4.1 HEXISTS
- 功能:检查哈希表中指定字段是否存在。如果存在,返回 1;否则返回 0
- 语法:
HEXISTS key field - 示例:
127.0.0.1:6379> HEXISTS user:1 name (integer) 1 127.0.0.1:6379> HEXISTS user:1 email (integer) 0 - 输出解释:name 字段存在,返回 1;email 字段已被删除,返回 0
(5)获取哈希表的字段数量
3.5.1 HLEN
- 功能:返回哈希表中字段的数量。如果哈希表不存在,返回 0
- 语法:
HLEN key - 示例:
127.0.0.1:6379> HLEN user:1 (integer) 2 - 输出解释:哈希表 user:1 中目前有 name 和 age 两个字段,所以返回 2
(6)获取哈希表的所有字段或所有值
3.6.1 HKEYS
- 功能:返回哈希表中所有的字段
- 语法:
HKEYS key - 示例:
127.0.0.1:6379> HKEYS user:1 1) "name" 2) "age" - 输出解释:返回哈希表 user:1 中所有的字段名
3.6.2 HVALS
- 功能:返回哈希表中所有的值
- 语法:
HVALS key - 示例:
127.0.0.1:6379> HVALS user:1 1) "Alice" 2) "25" - 输出解释:返回哈希表 user:1 中所有字段对应的值
(7)数值操作
3.7.1 HINCRBY
- 功能:将哈希表中指定字段的值增加指定的整数。如果字段不存在,会先将其值初始化为 0 再进行增加
- 语法:
HINCRBY key field increment - 示例:
127.0.0.1:6379> HINCRBY user:1 age 5 (integer) 30 - 输出解释:将 user:1 哈希表中 age 字段的值增加 5,新的值为 30
3.7.2 HINCRBYFLOAT
- 功能:将哈希表中指定字段的值增加指定的浮点数。如果字段不存在,会先将其值初始化为 0 再进行增加
- 语法:
HINCRBYFLOAT key field increment - 示例:假设 user:1 哈希表中有一个 score 字段,值为 80.5
127.0.0.1:6379> HINCRBYFLOAT user:1 score 5.5 "86" - 输出解释:将 user:1 哈希表中 score 字段的值增加 5.5,新的值为 86
四、Set
(1)添加元素
4.1.1 SADD
- 功能:向集合中添加一个或多个元素。如果元素已经存在于集合中,则忽略该元素;如果集合不存在,则创建一个新集合
- 语法:
SADD key member [member ...] - 示例:
127.0.0.1:6379> SADD myset "apple" "banana" "cherry" (integer) 3 - 输出解释:返回成功添加到集合中的元素数量。这里添加了三个新元素,所以返回 3
(2)移除元素
4.2.1 SREM
- 功能:从集合中移除一个或多个元素。如果元素不存在于集合中,则忽略该元素
- 语法:
SREM key member [member ...] - 示例:
127.0.0.1:6379> SREM myset "banana" (integer) 1 - 输出解释:返回成功从集合中移除的元素数量。这里移除了 "banana" 元素,所以返回 1
(3)获取集合中的所有元素
4.3.1 SMEMBERS
- 功能:返回集合中的所有元素
- 语法:
SMEMBERS key - 示例:
127.0.0.1:6379> SMEMBERS myset 1) "apple" 2) "cherry" - 输出解释:返回集合 myset 中的所有元素
(4)检查元素是否存在于集合中
4.4.1 SISMEMBER
- 功能:检查指定元素是否存在于集合中。如果存在,返回 1;否则返回 0
- 语法:
SISMEMBER key member - 示例:
127.0.0.1:6379> SISMEMBER myset "apple" (integer) 1 127.0.0.1:6379> SISMEMBER myset "banana" (integer) 0 - 输出解释:"apple" 存在于集合中,返回 1;"banana" 已被移除,不存在于集合中,返回 0
(5)获取集合的元素数量
4.5.1 SCARD
- 功能:返回集合中的元素数量。如果集合不存在,返回 0
- 语法:
SCARD key - 示例:
127.0.0.1:6379> SCARD myset (integer) 2 - 输出解释:集合 myset 中目前有两个元素,所以返回 2
(6)集合运算
4.6.1 SINTER
- 功能:返回多个集合的交集,即同时存在于所有集合中的元素
- 语法:
SINTER key [key ...] - 示例:
127.0.0.1:6379> SADD set1 "apple" "banana" "cherry" (integer) 3 127.0.0.1:6379> SADD set2 "apple" "date" (integer) 2 127.0.0.1:6379> SINTER set1 set2 1) "apple" - 输出解释:集合 set1 和 set2 的交集只有 "apple",所以返回该元素
4.6.2 SUNION
- 功能:返回多个集合的并集,即包含所有集合中的所有元素
- 语法:
SUNION key [key ...] - 示例:
127.0.0.1:6379> SUNION set1 set2 1) "apple" 2) "banana" 3) "cherry" 4) "date" - 输出解释:集合 set1 和 set2 的并集包含 "apple"、"banana"、"cherry" 和 "date",所以返回这些元素
4.6.3 SDIFF
- 功能:返回多个集合的差集,即存在于第一个集合但不存在于其他集合中的元素
- 语法:
SDIFF key [key ...] - 示例:
127.0.0.1:6379> SDIFF set1 set2 1) "banana" 2) "cherry" - 输出解释:集合 set1 中存在但集合 set2 中不存在的元素是 "banana" 和 "cherry",所以返回这两个元素
(7)随机获取元素
4.7.1 SRANDMEMBER
- 功能:随机返回集合中的一个或多个元素。如果不指定数量,则默认返回一个元素;如果指定的数量为正数,则返回不重复的元素;如果指定的数量为负数,则可能返回重复的元素
- 语法:
SRANDMEMBER key [count] - 示例:
127.0.0.1:6379> SRANDMEMBER myset "apple" 127.0.0.1:6379> SRANDMEMBER myset 2 1) "apple" 2) "cherry" - 输出解释:第一次调用随机返回了 "apple";第二次调用指定返回两个元素,返回了 "apple" 和 "cherry"
(8)随机移除元素
4.8.1 SPOP
- 功能:随机移除并返回集合中的一个或多个元素
- 语法:
SPOP key [count] - 示例:
127.0.0.1:6379> SPOP myset "cherry" - 输出解释:随机移除并返回了集合 myset 中的 "cherry" 元素。移除后,集合 myset 中只剩下 "apple" 元素
(9)移动元素到另一个集合
4.9.1 SMOVE
- 功能:将一个元素从一个集合移动到另一个集合。如果源集合中不存在该元素,则不进行任何操作;如果目标集合不存在,则创建一个新集合
- 语法:
SMOVE source destination member - 示例:
127.0.0.1:6379> SMOVE myset newset "apple" (integer) 1 - 输出解释:成功将 "apple" 元素从 myset 集合移动到 newset 集合,返回 1。此时 myset 集合为空,newset 集合包含 "apple" 元素
五、Zset

(1)添加元素
5.1.1 ZADD
- 功能:向有序集合中添加一个或多个成员及其分数。如果成员已存在,则更新其分数;如果有序集合不存在,则创建一个新的有序集合
- 语法:
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]NX:仅当成员不存在时添加 XX:仅当成员已存在时更新分数 CH:返回被修改的成员数量,包括新添加和分数更新的成员 INCR:对已存在成员的分数进行增量操作,此时只能指定一个成员 - 示例:
127.0.0.1:6379> ZADD myzset 10 "member1" 20 "member2" 30 "member3" (integer) 3 - 输出解释:成功添加了三个成员,返回 3。此时有序集合 myzset 包含 ("member1", 10)、("member2", 20)、("member3", 30)
(2)获取成员分数
5.2.1 ZSCORE
- 功能:返回有序集合中指定成员的分数。如果成员不存在,返回 (nil)
- 语法:
ZSCORE key member - 示例:
127.0.0.1:6379> ZSCORE myzset "member2" "20" - 输出解释:返回成员 "member2" 的分数 20
(3)获取成员排名
5.3.1 ZRANK
- 功能:返回有序集合中指定成员的排名(按分数从小到大排序),排名从 0 开始。如果成员不存在,返回 (nil)
- 语法:
ZRANK key member - 示例:
127.0.0.1:6379> ZRANK myzset "member2" (integer) 1 - 输出解释:成员 "member2" 在有序集合中按分数从小到大排第 1(排名从 0 开始)
5.3.2 ZREVRANK
- 功能:返回有序集合中指定成员的排名(按分数从大到小排序),排名从 0 开始。如果成员不存在,返回 (nil)
- 语法:
ZREVRANK key member - 示例:
127.0.0.1:6379> ZREVRANK myzset "member2" (integer) 1 - 输出解释:成员 "member2" 在有序集合中按分数从大到小排第 1(排名从 0 开始)
(4)获取指定范围的成员
5.4.1 ZRANGE
- 功能:返回有序集合中指定排名范围(按分数从小到大)的成员。可以选择同时返回成员的分数
- 语法:
ZRANGE key start stop [WITHSCORES] - 示例:
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES 1) "member1" 2) "10" 3) "member2" 4) "20" 5) "member3" 6) "30" - 输出解释:返回有序集合 myzset 中所有成员及其分数,按分数从小到大排序
5.4.2 ZREVRANGE
- 功能:返回有序集合中指定排名范围(按分数从大到小)的成员。可以选择同时返回成员的分数
- 语法:
ZREVRANGE key start stop [WITHSCORES] - 示例:
127.0.0.1:6379> ZREVRANGE myzset 0 -1 WITHSCORES 1) "member3" 2) "30" 3) "member2" 4) "20" 5) "member1" 6) "10" - 输出解释:返回有序集合 myzset 中所有成员及其分数,按分数从大到小排序
(5)获取指定分数范围的成员
5.5.1 ZRANGEBYSCORE
- 功能:返回有序集合中指定分数范围(按分数从小到大)的成员。可以选择同时返回成员的分数
- 语法:
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] - 示例:
127.0.0.1:6379> ZRANGEBYSCORE myzset 10 20 WITHSCORES 1) "member1" 2) "10" 3) "member2" 4) "20" - 输出解释:返回有序集合 myzset 中分数在 10 到 20 之间的成员及其分数,按分数从小到大排序
5.5.2 ZREVRANGEBYSCORE
- 功能:返回有序集合中指定分数范围(按分数从大到小)的成员。可以选择同时返回成员的分数
- 语法:
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] - 示例:
127.0.0.1:6379> ZREVRANGEBYSCORE myzset 20 10 WITHSCORES 1) "member2" 2) "20" 3) "member1" 4) "10" - 输出解释:返回有序集合 myzset 中分数在 10 到 20 之间的成员及其分数,按分数从大到小排序
(6)移除成员
5.6.1 ZREM
- 功能:从有序集合中移除一个或多个成员。返回成功移除的成员数量
- 语法:
ZREM key member [member ...] - 示例:
127.0.0.1:6379> ZREM myzset "member2" (integer) 1 - 输出解释:成功移除了成员 "member2",返回 1
(7)增加成员分数
5.7.1 ZINCRBY
- 功能:为有序集合中指定成员的分数增加指定的增量。如果成员不存在,则先添加该成员并将分数初始化为增量值
- 语法:
ZINCRBY key increment member - 示例:
127.0.0.1:6379> ZINCRBY myzset 5 "member1" "15" - 输出解释:成员 "member1" 的分数增加 5 后变为 15
(8)获取有序集合的成员数量
5.8.1 ZCARD
- 功能:返回有序集合中的成员数量。如果有序集合不存在,返回 0
- 语法:
ZCARD key - 示例:
127.0.0.1:6379> ZCARD myzset (integer) 2 - 输出解释:有序集合 myzset 中目前有 2 个成员
(9)获取指定分数范围内的成员数量
5.9.1 ZCOUNT
- 功能:返回有序集合中指定分数范围内的成员数量
- 语法:
ZCOUNT key min max - 示例:
127.0.0.1:6379> ZCOUNT myzset 10 20 (integer) 1 - 输出解释:有序集合 myzset 中分数在 10 到 20 之间的成员有 1 个
(10)移除指定排名范围的成员
5.10.1 ZREMRANGEBYRANK
- 功能:移除有序集合中指定排名范围(按分数从小到大)的成员。返回被移除的成员数量
- 语法:
ZREMRANGEBYRANK key start stop - 示例:
127.0.0.1:6379> ZREMRANGEBYRANK myzset 0 0 (integer) 1 - 输出解释:移除了有序集合 myzset 中排名第 0 的成员,返回 1
(11)移除指定分数范围的成员
5.11.1 ZREMRANGEBYSCORE
- 功能:移除有序集合中指定分数范围的成员。返回被移除的成员数量
- 语法:
ZREMRANGEBYSCORE key min max - 示例:
127.0.0.1:6379> ZREMRANGEBYSCORE myzset 10 20 (integer) 0 - 输出解释:由于之前移除操作后,分数在 10 到 20 之间已无成员,所以返回 0
相关文章:
Redis面试——常用命令
一、String (1)设置值相关命令 1.1.1 SET 功能:设置一个键值对,如果键已存在则覆盖旧值语法: SET key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds:设置键的过期时间为 seconds 秒 PX milli…...
Swin-Transformer-UNet改进:融合Global-Local Spatial Attention (GLSA) 模块详解
目录 1.模块概述 2.swinUNet网络 3. 完整代码 1.模块概述 Global-Local Spatial Attention (GLSA) 是一种先进的注意力机制模块,专为计算机视觉任务设计,能够同时捕捉全局上下文信息和局部细节特征。 该模块通过创新的双分支结构和自适应融合机制,显著提升了特征表示能…...
ubuntu 向右拖动窗口后消失了、找不到了
这是目前单显示器的设置,因为实际只有1个显示器,之前的设置如下图所示,有2个显示器,一个主显示器,一个23寸的显示器 ubuntu 22.04 系统 今天在操作窗口时,向右一滑,发现这个窗口再也不显示了、找…...
大语言模型(LLMs)中的强化学习(Reinforcement Learning, RL)
第一部分:强化学习基础回顾 在深入探讨LLMs中的强化学习之前,我们先快速回顾一下强化学习的核心概念,确保基础扎实。 1. 强化学习是什么? 强化学习是一种机器学习范式,目标是让智能体(Agent)…...
2025最新版微软GraphRAG 2.0.0本地部署教程:基于Ollama快速构建知识图谱
一、前言 微软近期发布了知识图谱工具 GraphRAG 2.0.0,支持基于本地大模型(Ollama)快速构建知识图谱,显著提升了RAG(检索增强生成)的效果。本文手把手教你如何从零部署,并附踩坑记录和性能实测…...
泛型算法——只读算法(一)
在 C 标准库中,泛型算法的“只读算法”指那些 不会改变它们所操作的容器中的元素,仅用于访问或获取信息的算法,例如查找、计数、遍历等操作。 accumulate std::accumulate()是 C 标准库**numeric**头文件中提供的算法,用于对序列…...
Redis的常见数据类型
Redis 提供了多种数据类型,以满足不同的应用场景。以下是 Redis 的主要数据类型及其应用场景: 字符串(String): 描述:最基本的数据类型,存储单个键值对,值可以是字符串、整数或浮点数…...
Mybatis中dao(mapper)层几种传参方式
一、SQL语句中接收参数的方式有两种: 1、 #{}预编译 (可防止sql注入) 2、${}非预编译(直接拼接sql,不能防止sql注入) #{}和${}的区别是什么? #{} 占位符,相当于?,sql预编译&…...
网络安全知识点2
1.虚拟专用网VPN:VPN用户在此虚拟网络中传输私网流量,在不改变网络现状的情况下实现安全,可靠的连接 2.VPN技术的基本原理是利用隧道技术,对传输报文进行封装,利用VPN骨干网建立专用数据传输通道,实现报文…...
libevent服务器附带qt界面开发(附带源码)
本章是入门章节,讲解如何实现一个附带界面的服务器,后续会完善与优化 使用qt编译libevent源码演示视频qt的一些知识 1.主要功能有登录界面 2.基于libevent实现的服务器的业务功能 使用qt编译libevent 下载这个,其他版本也可以 主要是github上…...
智能体数据分析
数据概览: 展示智能体的累计对话次数、累计对话用户数、对话满意度、累计曝光次数。数据分析: 统计对话分析、流量分析、用户分析、行为分析数据指标,帮助开发者完成精准的全面分析。 ps:数据T1更新,当日12点更新前一天…...
[特殊字符] UnionFS(联合文件系统)原理解析:容器背后的存储技术
🔍 UnionFS(联合文件系统)原理解析:容器背后的存储技术 💡 什么是 UnionFS? UnionFS(联合文件系统) 是一种可以将多个不同来源的文件系统“合并”在一起的技术。它的核心思想是&am…...
STM32(M4)入门: 概述、keil5安装与模板建立(价值 3w + 的嵌入式开发指南)
前言:本教程内容源自信盈达教培资料,价值3w,使用的是信盈达的405开发版,涵盖面很广,流程清晰,学完保证能从新手入门到小高手,软件方面可以无基础学习,硬件学习支持两种模式ÿ…...
采用若依vue 快速开发系统功能模块
文章目录 运行若依项目 科室管理科室查询-后端代码实现科室查询-前端代码实现科室名称状态搜索科室删除-后端代码实现科室删除-前端代码实现科室新增-后端代码实现科室新增-前端代码实现科室修改-后端代码实现前端代码实现角色权限实现 运行若依项目 运行redis 创建数据库 修改…...
HTML:表格数据展示区
<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>人员信息表</title><link rel"styl…...
WIN11运行游戏时出现“ms-gamingoverlay”弹框的问题
针对WIN11运行游戏时出现“ms-gamingoverlay”弹框的问题,以下是经过验证的多种解决方法,结合不同场景需求提供对应方案: 一、关闭系统内置的游戏录制功能 禁用Xbox Game Bar及游戏录制 • 进入系统设置(WinI)→ 左侧选…...
Oracle测试题目及笔记(单选)
所有题目来自于互联网搜索 当 Oracle 服务器启动时,下列哪种文件不是必须的(D)。 A.数据文件 B.控制文件 C.日志文件 D.归档日志文件 数据文件、日志文件-在数据库的打开阶段使用 控制文件-在数…...
Jmeter创建使用变量——能够递增递减的计数器
Jmeter创建使用变量——能够递增递减的计数器 如下图所示,创建一个 取值需限定为0 2 4这三个值内的变量。 Increment:每次迭代后 递增的值,给计数器增加的值 Maximum value:计数器的最大值,如果超过最大值࿰…...
【LeetCode基础算法】滑动窗口与双指针
定长滑动窗口 总结:入-更新-出。 入:下标为 i 的元素进入窗口,更新相关统计量。如果 i<k−1 则重复第一步。 更新:更新答案。一般是更新最大值/最小值。 出:下标为 i−k1 的元素离开窗口,更新相关统计量…...
数据结构之BFS广度优先算法(腐烂的苹果)
队列这个数据结构在很多场景下都有使用,比如在实现二叉树的层序遍历,floodfill问题(等等未完成)中,都需要借助队列的先进先出特性,下面给出这几个问题的解法 经典的二叉树的层序遍历 算法图示,以下图所示的二叉树为例…...
道可云人工智能每日资讯|首届世界人工智能电影节在法国尼斯举行
道可云元宇宙每日简报(2025年4月15日)讯,今日元宇宙新鲜事有: 杭州《西湖区打造元宇宙产业高地的扶持意见》发布 杭州西湖区人民政府印发《西湖区打造元宇宙产业高地的扶持意见》。该意见已于4月4日正式施行,有效期至…...
火车头采集动态加载Ajax数据(无分页瀑布流网站)
为了先填充好数据在上线,在本地搭建了一个网站,并用火车头采集数据填充到里面。 开始很上手,因为找的网站的分类中是有分页的。很快捷的找到页面标识。 但是问题来了,如今很多网站都是采用的Ajax加载数据,根本没有分…...
Android Jetpack是什么与原生android 有什么区别
Android Jetpack是什么 Android Jetpack是Google推出的一套开发组件工具集,旨在帮助开发者更高效地构建高质量的Android应用。它包含多个库和工具,被分为架构、用户界面、行为和基础四大类。以下是一些Android Jetpack的示例: 架构组件 ViewModel:用于以生命周期的方式管理…...
Android Retrofit 框架适配器模块深入源码分析(五)
Android Retrofit 框架适配器模块深入源码分析 一、引言 在 Android 开发中,网络请求是一个常见且重要的功能。Retrofit 作为一个强大的网络请求框架,以其简洁的 API 和高度的可定制性受到了广泛的欢迎。适配器模块(CallAdapter)…...
Node.js模块化与npm
目录 一、模块化简介 二、CommonJS 规范 1. 基本语法 2. 导出模块 3. 导入模块 三、ECMAScript 标准(ESM) 1. 启用 ESM 一、默认导出与导入 1. 基本语法 2. 默认导出(每个模块仅一个) 3. 默认导入 二、命名导出与导入…...
nginx中的代理缓存
1.缓存存放路径 对key取哈希值之后,设置cache内容,然后得到的哈希值的倒数第一位作为第一个子目录,倒数第三位和倒数第二位组成的字符串作为第二个子目录,如图。 proxy_cache_path /xxxx/ levels1:2 2.文件名哈希值...
【前端vue生成二维码和条形码——MQ】
前端vue生成二维码和条形码——MQ 前端vue生成二维码和条形码——MQ一、安装所需要的库1、安装qrcode2、安装jsbarcode 二、使用步骤1、二维码生成2、条形码生成 至此,大功告成! 前端vue生成二维码和条形码——MQ 一、安装所需要的库 1、安装qrcode 1…...
flutter 桌面应用之窗口自定义
在开发桌面软件的时候我们经常需要配置软件的窗口的大小以及位置 我们有两个框架选择:window_manager和bitsdojo_window 对比bitsdojo_window 特性bitsdojo_windowwindow_manager自定义标题栏✅ 支持❌ 不支持控制窗口行为(大小/位置)✅(基本…...
华为OD机试真题——MELON的难题(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录全流程解析/备考攻略/经验分享 华为OD机试真题《MELON的…...
【C++】深入浅出之继承
目录 继承的概念及定义继承的定义继承方式和访问限定符protected与private的区别 默认继承方式继承类模板基类和派生类对象赋值兼容转换继承中的作⽤域(隐藏关系)相关面试题⭐ 派生类的默认成员函数⭐构造函数拷贝构造赋值重载析构函数 继承与友元继承与静态成员继承的方式菱形…...
