千家信息网

Redis有哪些基本数据结构和操作

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章主要讲解了"Redis有哪些基本数据结构和操作",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Redis有哪些基本数据结构和操作"吧!基本结构一
千家信息网最后更新 2025年01月22日Redis有哪些基本数据结构和操作

这篇文章主要讲解了"Redis有哪些基本数据结构和操作",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Redis有哪些基本数据结构和操作"吧!

基本结构

一个String类型的key、value最大上限均是512M。其基本结构如下:基本语法

Redis中字符串的基本操作如下表所示。

使用场景-统计用户上线天数

Bitmap 对于一些特定类型的计算非常有效。

假设现在我们希望记录自己网站上的用户的上线频率,比如说,计算用户 A 上线了多少天,用户 B 上线了多少天,诸如此类,以此作为数据,从而决定让哪些用户参加 beta 测试等活动 -- 这个模式可以使用 SETBIT 和 BITCOUNT 来实现。

比如说,每当用户在某一天上线的时候,我们就使用 SETBIT ,以用户名作为 key ,将那天所代表的网站的上线日作为 offset 参数,并将这个 offset 上的为设置为 1 。

举个例子,如果今天是网站上线的第 100 天,而用户 peter 在今天阅览过网站,那么执行命令 SETBIT peter 100 1 ;如果明天 peter 也继续阅览网站,那么执行命令 SETBIT peter 101 1 ,以此类推。

当要计算 peter 总共以来的上线次数时,就使用 BITCOUNT 命令:执行 BITCOUNT peter ,得出的结果就是 peter 上线的总天数。

基本结构

操作语法说明
BLPOPBLPOP key [key …] timeoutBLPOP 是列表的阻塞式(blocking)弹出原语.它是 LPOP 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BLPOP 命令阻塞.
BRPOPBRPOP key [key …] timeout它是 RPOP 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BRPOP 命令阻塞.
BRPOPLPUSHBRPOPLPUSH source destination timeoutBRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,当给定列表 source 不为空时, BRPOPLPUSH 的表现和 RPOPLPUSH 一样。当列表 source 为空时, BRPOPLPUSH 命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行 LPUSH 或 RPUSH 命令为止。
LINDEXLINDEX key index返回列表 key 中,下标为 index 的元素。
LINSERTLINSERT key BEFORE/AFTER pivot value将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。当 pivot 不存在于列表 key 时,不执行任何操作。当 key 不存在时, key 被视为空列表,不执行任何操作。如果 key 不是列表类型,返回一个错误。
LLENLLEN key返回列表 key 的长度。
LPOPLPOP key移除并返回列表 key 的头元素。
LPUSHLPUSH key value [value …]将一个或多个值 value 插入到列表 key 的表头
LPUSHXLPUSHX key value将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表
LRANGELRANGE key start stop返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定
LREMLREM key count value根据参数 count 的值,移除列表中与参数 value 相等的元素
LSETLSET key index value将列表 key 下标为 index 的元素的值设置为 value
LTRIMLTRIM key start stop对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。
RPOPRPOP key移除并返回列表 key 的尾元素
RPOPLPUSHRPOPLPUSH source destination命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。
RPUSHRPUSH key value [value …]将一个或多个值 value 插入到列表 key 的表尾(最右边)
RPUSHXRPUSHX key value将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。和 RPUSH 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。

举一些例子:

127.0.0.1:6379> lpush stack "a" "b" "c" (integer) 3 127.0.0.1:6379> rpop stack "a"                1                       2                       3                       4       
  • 队列

127.0.0.1:6379> lpush queue "a" "b" "c" (integer) 3 127.0.0.1:6379> lpop queue "c"                 1                       2                       3                       4                       5       
  • BLPOP

127.0.0.1:6379> exists job(integer) 0 127.0.0.1:6379> blpop job 5 #一直阻塞到5s超时 (nil)(5.03s)                1                       2                       3                       4                       5       
  • LINDEX

127.0.0.1:6379> lpush myjob "my" "job" "is" "iter" (integer) 4 127.0.0.1:6379> lindex myjob -1 "my"                1                       2                       3                       4       

3. 哈希表Hash

存储的是一个field与value的映射表,即存储的是一个Map,每一条数据可以看做是key-field-value的格式,field-value对应的是Map的一个键值对。

基本语法

使用场景-存储社交关系

比如新浪的关注列表, 粉丝列表都是由hash实现的。

基本结构

操作语法说明
SADDSADD key member [member …]将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略.
SCARDSCARD key返回集合 key 的基数(集合中元素的数量).
SDIFFSDIFF key [key …]返回一个集合的全部成员,该集合是所有给定集合之间的差集.
SDIFFSTORESDIFFSTORE destination key [key …]这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集.
SINTERSINTER key [key …]返回一个集合的全部成员,该集合是所有给定集合的交集.
SINTERSTORESINTERSTORE destination key [key …]这个命令类似于 SINTER 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集.
SISMEMBERSISMEMBER key member判断 member 元素是否集合 key 的成员.
SMEMBERSSMEMBERS key返回集合 key 中的所有成员.
SMOVESMOVE source destination member将 member 元素从 source 集合移动到 destination 集合.
SPOPSPOP key移除并返回集合中的一个随机元素.
SRANDMEMBERSRANDMEMBER key [count]如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值.
SREMSREM key member [member …]移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略.
SUNIONSUNION key [key …]返回一个集合的全部成员,该集合是所有给定集合的并集.
SUNIONSTORESUNIONSTORE destination key [key …]这个命令类似于 SUNION 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集.
SSCANSSCAN key cursor [MATCH pattern] [COUNT count]详细信息请参考 SCAN 命令.

举一些例子

  • 差集

127.0.0.1:6379> sadd set1 "a1" "a2" "a3" (integer) 3 127.0.0.1:6379> sadd set2 "a1" "a3" "a4" (integer) 3 127.0.0.1:6379> sdiff set1 set2 1) "a2" 127.0.0.1:6379> sdiffstore set set1 set2(integer) 1 127.0.0.1:6379> smembers set 1) "a2"                 1                       2                       3                       4                       5                       6                       7                       8                       9                       10                      11      
  • 并集

127.0.0.1:6379> sadd set1 "a1" "a2" "a3" (integer) 3 127.0.0.1:6379> sadd set2 "a1" "a3" "a4" (integer) 3 127.0.0.1:6379> sunion set1 set2 1) "a4" 2) "a1" 3) "a3" 4) "a2"                 1                       2                       3                       4                       5                       6                       7                       8                       9                       10      
  • 交集

127.0.0.1:6379> sadd set1 "a1" "a2" "a3" (integer) 3 127.0.0.1:6379> sadd set2 "a1" "a3" "a4" (integer) 3 127.0.0.1:6379> smembers set 1) "a2" 127.0.0.1:6379> sinter set1 set2 1) "a3" 2) "a1" 127.0.0.1:6379> sinterstore set set1 set2(integer) 2 127.0.0.1:6379> smembers set 1) "a1" 2) "a3"                 1                       2                       3                       4                       5                       6                       7                       8                       9                       10                      11                      12                      13                      14                      15      

5. 有序集合SortedSet

和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score,所以sorted set是一个有序的集合。

基本语法

使用场景-用户得分排行榜

和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列,比如普通消息的 score 为1,重要消息的 score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。
带有权重的元素,比如一个游戏的用户得分排行榜

感谢各位的阅读,以上就是"Redis有哪些基本数据结构和操作"的内容了,经过本文的学习后,相信大家对Redis有哪些基本数据结构和操作这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0