建设企业网站的需求分析,怎样才能制做免费网站,有限公司简介,网页紧急升级个人主页 #xff1a; 个人主页 个人专栏 #xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言命令ZADDZRANGEZREVRANGEZCARDZCOUNTZPOPMAXBZPOPMAXZPOPMINBZPOPMINZRANKZSCOREZREMZREMRANGEBYRANKZREMRANGEBYSCOREZINCRBY集合间操作… 个人主页 个人主页 个人专栏 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言命令ZADDZRANGEZREVRANGEZCARDZCOUNTZPOPMAXBZPOPMAXZPOPMINBZPOPMINZRANKZSCOREZREMZREMRANGEBYRANKZREMRANGEBYSCOREZINCRBY集合间操作ZINTERSTOREZUNIONSTORE 内部编码总结 前言
有序集合(zset)是redis提供的一种特殊集合类型结合了集合(元素不能重复)和有序链表(元素有序)的特性在有序集合中每一个元素(member)都关联着一个分数(score)这个分数是双精度浮点数用于对元素进行排序(按照升序的方式进行排列)。
注意元素不能重复但分数可以重复相同分数的元素按照字典序排序 有序集合提供了获取指定分数和元素范围查找计算成员排名等功能。 命令
ZADD
添加或者更新指定的元素以及关联的分数到zset中分数应该符合 double 类型inf/-inf(正无穷/负无穷)作为正负极限也是合法的 ZADD key [NX | XX] [CH] [INCR] score member [score member … ] 返回值本次添加成功的元素个数 时间复杂度O(logN)由于zset是有序结构要求新增的元素要放到合适的位置上(需要遍历)而zset内部的数据结构主要是跳表
ZADD相关选项
NX仅在成员不存在时才添加如果指定的成员已经存在于有序集合中则不会执行添加操作并且命令会返回0可以用于确保集合中成员的唯一性XX仅在成员已经存在时才更新如果指定的成员不存在与有序集合中则不会执行任何操作如果成员存在则更新其分数CH返回发送变化的成员数量当使用该选项时ZADD命令会返回成功添加和更新的成员数量INCR对成员的分数进行增加指定成员已经存在则将其分数增加指定的增量值如果成员不存在则将其添加到集合中并以增量值作为起始分数。 添加 CH 选项 添加 XX 选项 添加 NX 选项 添加 INCR选项 ZRANGE
返回指定区间里的元素分数按照升序排列带上 WITHSCORES可以把分数返回 ZRANGE key start stop [WITHSCORES] 此处 [start, stop] 为下表构成的区间有序集合本身元素就是有先后顺序的明确区分谁在前谁在后因此可以给这个有序集合赋予下标
返回值区间内的元素列表 时间复杂度O(logN M)logN为查找到下标 start 元素的时间消耗M 是遍历区间的时间消耗 注意 如果修改的分数影响到之前的顺序就会自动的移动元素位置保持原有的升序顺序不变 ZREVRANGE
返回指定区间里的元素分数按照降序排列带上 WITHSCORES可以把分数返回 ZREVRANGE key start stop [WITHSCORES] 返回值区间内的元素列表 时间复杂度O(logN M) ZCARD
获取一个zset的基数(cardinality)即zset中的元素个数 ZCARD key 返回值zset内的元素个数 时间复杂度O(1) ZCOUNT
返回分数在 min 和 max 之间的元素个数默认情况下是闭区间可以通过 “(” 来排除边界 ZCOUNT key min max 返回值满足条件的元素列表个数 时间复杂度O(logN)实际上zset内部会记录每个元素当前的次序查询到元素(logN)这样直接知道元素所在的次序可以直接把max对应的元素次序和min对应的元素次序做减法知道满足条件的元素个数。 ZPOPMAX
删除并返回分数最高的 count 个元素count默认为一个 ZPOOPMAX key [count] 返回值被删除的分数和元素列表 时间复杂度O(logN * M)logN为查询最大值元素M为删除元素个数 注意在有序集合中(升序)最大值相当于最后一个元素删除最大值就是尾删 BZPOPMAX
删除并返回分数最高的元素如果指定的有序集合为空该命令阻塞直到有元素被添加到集合中或者超时发送 BZPOPMAX key [key …] timeout 返回值被删除的分数和元素列表 时间复杂度O(logN)logN为查询最大值元素
在阻塞行为上zset的阻塞命令与list阻塞命令相似。 ZPOPMIN
删除并返回分数最低的count个元素 ZPOPMIN key [count] 返回值删除的分数和元素列表 时间复杂度O(logN * M)logN为查找分数最低的元素M为删除元素的个数 注意在有序集合中(升序)最小值相当于第一个元素删除最小值就是头删 BZPOPMIN
删除并返回分数最低的元素如果指定的有序集合为空该命令阻塞直到有元素被添加到集合中或者超时发送 BZPOPMIN key [key …] timeout 返回值删除的分数和元素列表 时间复杂度O(logN)logN为查找分数最低的元素 ZRANK
返回指定元素的排名按照升序 ZRANK key member 返回值指定元素的排名 时间复杂度O(logN)logN为查找指定元素 ZSCORE
返回指定元素的分数 ZSCORE key member 返回值指定元素的分数 时间复杂度O(1)执行ZSCORE命令时redis首先使用哈希表来快速定位到指定的元素然后直接从哈希表中获取与该元素关联的分数。 注意 zset有序集合是通过哈希表和跳表来实现的哈希表用于快速查找元素是否存在而跳表则用于维护元素的有序性并支持范围查询 ZREM
删除指定的元素 ZREM key member [member …] 返回值本次操作删除的元素个数 时间复杂度O(MlogN)M为参数中member的个数N为整个有序集合元素的个数 ZREMRANGEBYRANK
按照排序升序删除指定范围的元素闭区间 ZREMRANGEBYRANK key start stop 返回值本次操作删除的元素个数 时间复杂度O(logN M)N为整个有序集合的元素个数M是|start - stop|区间的元素个数只需要查找一次位置即可 ZREMRANGEBYSCORE
按照分数删除指定范围的元素闭区间 ZREMRANGEBYSCORE key min max 返回值本次操作删除的元素个数 时间复杂度O(logN M)
(表示排除边界值 ZINCRBY
为指定的元素的关联分数添加指定的分数值 ZINCRBY key increment member 返回值增加后元素的分数 时间复杂度O(logN)logN为查找指定元素
ZINCRBY不仅会修改分数内容也能同时移动元素位置保持整个有序集合的有序 集合间操作
ZINTERSTORE
求出给定有序集合中元素的交集并保存进目标有序集合中在合并过程中以元素为单位进行合并远山对应的分数按照不同的聚合方式和权重等到新的分数 ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM | MIN | MAX] 返回值目标集合中的元素个数 时间复杂度O(N * K) O(M * logM)N是输入的有序集合中最小的有序集合的元素个数K是输入了几个有序集合M是最终结果的有序集合的元素个数
destination 有序集合的键名用于存储交集操作的结果如果指定的键已存在会被覆盖numkeys 一个整数表示接下来要指定的有序集合键(key) 的数量[WEIGHTS weight [weight]] 允许为每个输入有序集合的成员指定一个权重这些权重在计算交集成员的分数时使用权重默认为1权重的数量必须与输入集合的数量相匹配[AGGREGATE SUM | MIN | MAX] 当输入有序集合的成员在交集操作中有相同的元素时旋转如何处理这些成员的分数SUM将具有相同元素的成员的分数相加(默认行为)MIN使用相同元素的成员中的最小分数MAX使用相同元素的成员中最大分数
两个有序集合user:ranking:1 和 user:ranking:2
使用SUM处理相同元素的分数 使用MAX处理相同元素的分数 使用MIN处理相同元素的分数 给user:ranking:1指定的权重为0.5user:ranking:2指定的权重为2使用SUM处理相同元素的分数 ZUNIONSTORE
求出给定有序集合中元素的并集并保存进目标有序集合中在合并过程中以元素为单位进行合并元素对应的分数按照聚合方式和权重等到新的分数 ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM | MIN | MAX] 返回值目标集合中的元素个数 时间复杂度O(N) O(MkogM) N是输入有序集合总的元素个数M是最终结果的有序集合的元素个数
选项与ZINTERSTORE一样 给user:ranking:1指定的权重为2user:ranking:2指定的权重为3使用SUM处理相同元素的分数 内部编码
有序集合类型的内部编码有两种
ziplist(压缩列表)当有序集合的元素个数小于zset-max-ziplist-entries配置同时每个元素的值都小于zset-max-ziplist-value配置时redis会使用ziplist作为有序集合的内部实现skiplist(跳表)当ziplist条件不满足时有序集合会使用skiplist作为内部实现
总的来说就是如果有序集合的元素个数较少或者单个元素体积较小使用ziplist来存储如果有序集合的元素个数比较多或者单个元素体积非常大使用skiplist来存储 总结
以上就是我的redis学习笔记