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…...
告别定时任务!用Dagster监听器实现秒级数据响应自动化
在数据管道开发中,我们经常面临需要根据外部事件触发计算任务的场景。传统基于时间的调度方式存在资源浪费和时效性不足的问题。本文将通过Dagster的**传感器(Sensor)**功能,演示如何构建事件驱动的数据处理流程。 场景模拟&…...
测试用例的生命周期:从诞生到退役的全过程管理
测试用例不是一成不变的标本 在敏捷开发时代,测试用例就像有机生命体一样会经历完整的生命周期。据Microsoft Research调查,良好管理的测试用例可使缺陷发现率提升40%,而缺乏管理的用例库在6个月后失效比例高达65%,本文将深入解析…...
【并行分布计算】Hadoop单机分布搭建
Hadoop单机分布搭建 环境:VMware Workstation虚拟机centos7镜像MobaXterm远程连接工具 为了使机器都处于同一个局域网中,先要修改机器的ip地址分配方式为固定ip,并为其固定分配一个ip地址。 [rootlocalhost ~]# vi /etc/sysconfig/network-…...
Android studio前沿开发--利用socket服务器连接AI实现前后端交互(全站首发思路)
我们在前几期学习了利用socket进行前后端的交互,但那只是基础性知识,这次,通过参考讯飞星火的java参考文档,再结合之前所学的socket服务,成功实现了通过后端将AI的调用实现在了自己的APP中。 本次的学习内容 1.真机的…...
Redis的下载安装和使用(超详细)
目录 一、所需的安装包资源小编放下述网盘了,提取码:wshf 二、双击打开文件redis.desktop.manager.exe 三、点击next后,再点击i agree 四、点击箭头指向,选择安装路径,然后点击Install进行安装 五、安装完后依次点…...
手机状态:UML 状态图(State Diagram)的解析与绘画
目录 一、UML 状态图(State Diagram)是什么 二、题目原型 三、手机状态图的解析 状态转换的触发条件 四、状态图的构建与解读 图的解读 五、状态图的实际应用 六、总结与展望 一、UML 状态图(State Diagram)是什么 UML …...
MyBatisPlus-QueryWrapper的exists方法拼接SQL中的EXISTS子句
在 MyBatis-Plus 中,QueryWrapper 的 exists 方法用于拼接 SQL 中的 EXISTS 子句,通常用于构 建子查询条件。以下是具体用法和示例: 1. 基本语法 // 判断是否存在符合条件的记录 queryWrapper.exists(String existsSql); queryWrapper.notExists(String existsSq…...
HarmonyOS-ArkUI: 自定义组件冻结功能@ComonentV2 freezeWhenInactive属性
引 @ComponentV2 装饰器是可以接收参数的,叫freezeWhenInactive, 顾名思义,就是当组件变成Inactive的时候,冻结。其默认值是false。所以如果您没有传参数时,默认不冻结。 冻结到底是一种什么状态呢?说简单点就是状态变量不响应更新。@Monitor修饰的那些状态变量更新检测…...
【问题】一招解决vscode输出和终端不一致的困扰
背景(闲话Trae) Trae是挺好,用了几天,发现它时不时检查文件,一检测就转悠半天,为此我把当前环境清空,就留一个正在调的程序,结果还照样检测,虽然没影响什么,…...
【CODESYS学习笔记001】MODBUS-TCP 与 标准TCP通信的优缺点对比
1. MODBUS-TCP 优点: 1. 标准化协议 - 基于工业标准(RFC标准),兼容性强,几乎所有PLC和工业设备都支持。 - 固定功能码(如0x03读寄存器、0x10写寄存器),开发简单。 2. 数据格…...
⭐ Unity 使用Odin Inspector增强编辑器的功能:UIManager脚本实例
先看一下测试效果: 在Unity开发中,Odin Inspector已经成为了一个非常受欢迎的工具,它通过增强编辑器的功能,使得开发者在工作中更加高效,尤其是在处理复杂数据和自定义编辑器方面。今天,我们将通过一个简…...
Linux网络协议栈深度解析:从数据封装到子网划分的底层架构
知识点5 1、封装和解封装的流程 封装数据报文:发送数据 解封装数据报文:接收报文 以后我们的网络编程过程中,只需要告知IP与端口号,链路层的MAC地址 有协议栈帮我们提供。 2、链路层报文格式(mac报文) …...
Java与MySQL数据库连接的JDBC驱动配置教程
系列文章目录 Java JDBC编程 文章目录 系列文章目录前言一、JDBC简介:二、mysql-connector-java驱动详解: 驱动版本特性介绍: 三、JDBC驱动安装与配置: 1.IDE项目设置:2.命令行安装:3.使用Maven或Gradle :…...
光伏产品研发项目如何降本增效?8Manage 项目管理软件在复合材料制造的应用
在复合材料制造领域,特别是光伏PECVD石墨舟和燃料电池石墨双极板等高精尖产品的研发过程中,高效的项目管理直接决定了产品开发周期、质量和市场竞争力。然而,许多企业在项目立项、进度跟踪、资源分配和质量控制等环节面临挑战。 针对这些痛点…...
矫平机:工业制造中的“板材整形师“
在机械制造车间此起彼伏的轰鸣声中,一卷卷冷轧钢卷正经历着神奇的蜕变。经过开卷、矫平、剪切等工序,原本蜷曲的金属板材变得平整如镜,这些改变都源于生产线上一个关键设备——矫平机。这台被称作"板材整形师"的精密机械࿰…...
数据江湖:Node.js 与 SQLite3 的轻量之道
前言 在这个“万码奔腾”的时代,想在江湖中闯出一片天地,不光要有剑(JavaScript),还得有招式(数据库)!本篇秘籍便是教你如何用 Node.js + SQLite3 打造一座小而美的“数据藏经阁”。初学者可轻松上手,高手可在细节中悟出更深的“数据库心法”。 简介 SQLite 在前端…...
4.15BUUCTF Ez_bypass,HardSQL,AreUSerialz,BabyUpload,CheckIn
[MRCTF2020]Ez_bypass 打开环境,看源码 include flag.php; $flagMRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}; if(isset($_GET[gg])&&isset($_GET[id])) {$id$_GET[id];$gg$_GET[gg];if (md5($id) md5($gg) && $id ! $gg) {echo You got the first step;i…...
【HarmonyOS NEXT+AI】问答 03:找不到 DevEco Studio Cangjie Plugin 下载链接?
【HarmonyOS NEXTAI】问答 03:找不到 DevEco Studio Cangjie Plugin 下载链接? 在 "HarmonyOS NEXTAI 大模型打造智能助手 APP (仓颉版)" 课程里面,有学员提到了这样一个问题:我在华为开发者社区官网找不到 DevEco Stu…...
使用 reverse-sourcemap 工具反编译 Vue 项目
要使用 reverse-sourcemap 工具反编译 Vue 项目,可以按照以下步骤操作: 步骤一:安装 reverse-sourcemap 首先,需要全局安装 reverse-sourcemap 工具。在命令行中执行以下命令: npm install --global reverse-sourcem…...
通信安全员历年考试重难点有哪些?
通信安全员考试的重难点紧密围绕行业特性和法规更新展开,需结合最新政策与实践案例综合掌握。以下是基于历年考试趋势及 2025 年新规的深度解析: 一、核心法规与标准体系(占比 30%-40%) 1. 安全生产法与行业规定 《安全生产法》…...
C++(OpenCV)实现MATLAB的edge(I, “sobel“)边缘检测
文章目录 方案分析具体代码实现关键步骤说明注意事项 为了实现类似于MATLAB的edge(I, "sobel")函数的C代码,我们需要复现其完整的边缘检测流程,包括梯度计算、非极大值抑制和阈值处理。以下是具体的方案及代码实现: 方案分析 图像…...
uniapp通过uni.addInterceptor实现路由拦截
注:此拦截不能首次拦截路由跳转的方法(switchTab, navigateTo, reLaunch, redirectTo),拦截request请求api可以 1. app.vue 代码 import { onLaunch} from dcloudio/uni-appimport permission from ./utils/permissiononLaunch(…...
vue2.x Echart label根据数据长度选择不同的间隔显示
折线图需要在各个点上方展示数据,但是数据数字的位数可能达到5~8位,需要根据密度进行间隔展示。例如,如果数据长度小于7,则每一项都展示,如果在7~10之间,2位展示一项,如果大于10,那么…...
Wifi密码查看软件V1.0
⭐本软件用于查看电脑连接过所有WiFi密码,不具备破解功能。 可在忘记WiFi密码或他人输入密码自己不知道的情况下使用。 ⭐⭐为便于快速分享,加入双击【密码】列可将WIFI密码复制在粘贴板。 ⭐⭐⭐双击【名称】列可生成用于手机连接的二维码进行显示&…...
Hyperf (Swoole)的多进程 + 单线程协程、Gin (Go)Go的单进程 + 多 goroutine 解说
1. 核心概念解析 (1) Hyperf (Swoole): 多进程 单线程协程 Swoole 并发模型详解 Swoole 的并发模型基于多进程架构,每个进程是单线程的,线程内运行多个协程。以下是其结构的关键点: 多进程:Swoole 应用程序启动时,…...
国内网络设备厂商名单(List of Domestic Network Equipment Manufacturers)
国内网络设备厂商名单 运维工程师必须广泛熟悉国内外各大厂商的设备,深入掌握其应用场景、功能特点及优势。这不仅有助于在故障排查时迅速定位问题,还能在系统设计、优化与升级中做出更合理的决策。对设备特性的精准把握,能够显著提升运维效…...
基础元器件-电感(2025.4.17)
1.电感是电磁感应器件,它是储能元器件。 2.电感表示形式(直标法和色标法) 3.电感读取基准是mH,3R3指的是3.3mH,R代表小数点。 4.电感特性:通直流阻交流 5.电感的分类 注:用电容或者电感滤波是…...
高通手机抓取sniffer log的方法
方法如下: adb root adb remount adb shell echo 4 >/sys/module/wlan/parameters/con_mode //不同的高通基线这块目录存在差异性 ifconfig wlan0 up iwpriv wlan0 setMonChan 149 2 //设置信道和bandwitdh tcpdump -i wlan0 -v -w /data/chan149.pcap 生成…...
React 设计艺术:如何精确拆分组件接口,实现接口隔离原则
接口隔离原则 接口隔离原则(Interface Segregation Principle,简称 ISP)也是面向对象设计中的重要原则之一。它的核心思想是,一个类不应该依赖它不需要的接口。在 React 开发中,遵循接口隔离原则可以提高代码的可维护性…...
BFS DFS ----习题
题目1 答案1 #include <bits/stdc.h>using namespace std;const int N 210; int n,k; int arr[N]; int res 0;void dfs(int x,int start,int nowsum) {if (nowsum > n) return ;if(x>k){if(nowsum n) res;return ;}for(int i start;nowsumi*(k-x1)<n;i){a…...
第十七届“华中杯”大学生数学建模挑战赛题目A题 晶硅片产销策略优化 完整成品 代码 模型 思路 分享
近年来,高纯度晶硅片需求的增长引发了更激烈的市场竞争。晶硅片企业需要在成本控制、利润优化和供需管理之间取得平衡,以提高经营效率和市场竞争力。晶硅片的生产是一个高能耗、高成本的过程,企业效益会受到原材料价格波动、市场需求变化以及…...
java 设计模式之单例模式
简介 单例模式:一个类有且仅有一个实例,该类负责创建自己的对象,同时确保只有一个对象被创建。 特点:类构造器私有、持有自己实例、对外提供获取实例的静态方法。 单例模式的实现方式 饿汉式 类被加载时,就会实例…...
新能源汽车能量流测试的传感器融合技术应用指南
第一部分:核心原理模块化拆解 模块1:多源传感器物理层融合 关键技术: 高精度同步采集架构 采用PXIe-8840控制器同步定时模块(NI PXIe-6674T),实现CAN/LIN/模拟量信号的μs级同步光纤电压传感器࿰…...
高级java每日一道面试题-2025年4月11日-微服务篇[Nacos篇]-Nacos使用的数据库及其数据同步机制是什么?
如果有遗漏,评论区告诉我进行补充 面试官: Nacos使用的数据库及其数据同步机制是什么? 我回答: Nacos 使用的数据库及其数据同步机制详解 在微服务架构中,Nacos 作为服务注册与配置管理的核心组件,其数据存储和同步机制对系统的高可用性和…...
音视频相关协议和技术内容
视频编解码: H264(AVC,MPEG-4 Part 10) 高压缩率,支持多种分辨率和帧率,用于在线流媒体、会议、数字电视 编码过程: 分块处理,将视频帧划分为宏块(16x16)使用帧预测和…...
SpringBoot整合Rabbitmq(包括docker配置Rabbitmq的详细过程)
一、什么是mq MQ(message queue),从字面意思上看就个 FIFO 先入先出的队列,只不过队列中存放的内容是 message 而已,它是一种具有接收数据、存储数据、发送数据等功能的技术服务。 在互联网架构中,MQ 是一种非常常见的上下游“逻…...
20个常用的初级Java笔试题及其参考答案
### 1. Java基本数据类型有哪些? - **答案**:Java中的基本数据类型有: - `byte`:8位 - `short`:16位 - `int`:32位 - `long`:64位 - `float`:32位 - `double`:64位 - `char`:16位(Unicode字符) - `boolean`:表示真或假(没有固定大小) ### 2. Java中的字符串是可…...
矫平机:工业制造的精密“雕刻师”
在金属加工的浩瀚图景中,矫平机犹如一位沉默的雕塑大师,用机械的精准与科学的智慧,将扭曲变形的板材重塑为工业艺术的杰作。从新能源电池极片到空间站耐压舱体,矫平工艺贯穿现代制造的每一处精度巅峰。 一、核心技术:从…...
游戏数据分析,力扣(游戏玩法分析 I~V)mysql+pandas
力扣的游戏玩法分析 I~V, ps:虽然表结构不变但是力扣输入示例数据有些许变化,所以你使用上一题的数据跑下一题的代码可能产生的结果和示例中的不一样,建议点击连接到力扣中直接运行! 目录 1. 游戏玩法分析 I mysql …...
C++之哈希
目录 一、unordered_set 1.1、unordered_set的介绍 1.2、unordered_set和set的使用差异 二、unordered_map 2.1、unordered_map和map的差异 2.2、unordered_multimap/unordered_multiset 三、哈希表 3.1、哈希概念 3.1.1、直接定地址法 3.1.2、哈希冲突 3.1.3、负载…...
DSP、MCU、FPGA 的详细总结
一、核心定义与特点 类型定义核心特点DSP(数字信号处理器)专为高速数字信号处理设计的处理器- 哈佛架构,单周期乘加(MAC) - 实时性强,低延迟处理流式数据 - 专用指令集优化算法(如FFT、滤波&am…...
linux学习 3.用户的操作
用户 建议在系统操作的时候不要一直使用root用户,因为root用户具有最高权限,你可能因为某些操作影响了你的系统,采用子用户则可以避免这一点 这里的学习不用太深入,掌握如何创建删除切换即可(除非你要做详细的用户管理࿰…...
闭坑-- `a-auto-complete` 组件中的 `options` 数据存在重复
当 ant-design 的 a-auto-complete 组件中的 options 数据存在重复时,可能会导致以下问题: 1. 交互问题 键盘导航失效: 使用键盘上下键选择时,可能会在重复项之间跳转,无法正常移动到下一个选项。选择结果不准确&…...
【Rust基础】使用Rocket构建基于SSE的流式回复
背景 我们正在使用Rust开发基于RAG的知识库系统,其中对于模型的回复使用了常用的SSE,Web框架使用Rocket,Rocket提供了一个简单的方式支持SSE,但没有会话保持、会话恢复等功能,因此我们自己简单实现这两个功能。 使用R…...
一种改进的CFAR算法用于目标检测(解决多目标掩蔽)
摘要 恒虚警率(CFAR)技术在雷达自动检测过程中起着关键作用。单元平均(CA)CFAR算法在几乎所有的多目标情况下都会受到掩蔽效应的影响。最小单元平均(SOCA)CFAR算法仅当干扰目标位于参考窗口的前后方时才具有…...
什么是人工智能芯片?
行业专家指出,许多智能设备和物联网设备都是由某种形式的人工智能(AI)驱动的——无论是语音助理、面部识别摄像头,还是电脑。这些设备需要采用某种技术为它们进行的数据处理提供支持。有些设备需要在云平台的大型数据中心处理数据,而也有一些…...
0.深入探秘 Rust Web 框架 Axum
在当今的 Web 开发领域,Rust 凭借其出色的性能、内存安全性和并发处理能力,正逐渐崭露头角。而 Axum 作为 Rust 生态系统中一款备受瞩目的 Web 框架,更是为开发者提供了高效、灵活且强大的工具,用于构建现代化的 Web 应用程序。本…...
深度监听 ref 和 reactive 的区别详解
深度监听 ref 和 reactive 的区别详解 一、ref 的深度监听(示例代码)关键点:1. ref 的存储方式:2. 监听 ref 的特性 二、reactive 的深度监听(示例代码)关键点:1. reactive 的深度响应性2. 监听…...
面向对象—有理数类的设计
目录 1.代码呈现 1.1编写toString、equals方法 1.2测试代码 1.3有理数类的代码 2.论述题 3.有理类设计 1.代码呈现 1.1编写toString、equals方法 (1)toString方法 Overridepublic String toString(){if(this.v20){return "Undefined";}return this.v1 "/…...