Redis中set,zset

集合类型set中的数据是无序的,不能重复的

SET

  • SADD key value value.... 将一个或者多个元素添加到集合set中,重复的元素是无法进行添加的 返回值为添加成功的数字

  • smembers key 获取set中所有的元素,返回元素的顺序是无序的

  • sismember key value 判断一个元素是否在set集合中 返回1存在,返回0不存在

  • spop key count 从set中删除count个元素,但是count中元素是无序的,所以这里也就是随机删除 不写count的话就是随机删除一个,写了几个就是随机删除几个 官方文档承认的随机

  • srandmember key count 随机获取count个元素

  • smove source destination value 把一个set中的元素取出并放到另一个set中 要是像另外一个set移动的过程中,另外一个set存在相应元素,只会进行第一个set删除的操作,也还是能执行成功,但要是移动的set不存在相应的value则会移动失败

  • srem key valuevalue.... 可以一次删除一个value,也可以一次删除多个value 返回删除成功的个数

  • sinter key key... 此处每一个key都对应了一个集合,最后返回所有集合的交集

  • sinterstore destination key key... 把返回交集的元素全部放到destination这个集合里面

  • sunion key key... 求此处每一个key对应集合的并集

  • sunionstore destination key key... 把返回并集的元素全部放到destination这个集合里面

  • sdiff key key2 求集合的差集

    集合的内部编码

ZSET

有序集合,但是这里的有序和list列表那个有序是不同的有序,这里的有序的话指的是,升序或者降序排列,当然引入了升序和降序排列,肯定需要同时引入一个升序和降序排列的标准,zset中又引入了一个叫分数的名词。 按照分数的高低进行一个排序.但是ZSET主要还是用来存储内容的,分数只是一个辅助的作用 要是元素的分数相同的话,会以字典序进行一个排列 zet本身内部用升序进行的一个排序

  • ZADD key NX \| XX GT \| LT CH INCR score member socre member...
    方括号中为可选项,但是往zest中添加元素的时候,必须为每个元素添加一个分数(score),但是不能把他们两个的关系理解为键值对,他们之间有明确的角色区分的。

    如果member不存在 往zset中添加元素时就正常添加,要是么member已经存在,则往member中添加元素的时候。就会更新分数

    XX:添加之后,只会更新已经存在member的分数,不会往set中添加新的元素了
    NX:只添加新元素,添加重复的元素就不会修改分数了
    LT:less than 的缩写 只更新已经存在的分数 且新的分数必须比当前分数小 否则更新失败 且加上LT之后任然可以增添新的元素
    GT:great than 的缩写 只更新已经存在的分数 且新的分数必须比当前分数大 否则更新失败 且加上GT之后任然可以增添新的元素
    CH:普通情况下zadd是返回新增元素的个数 加上CH之后还会告诉我们被修改元素的个数
    INCR:可以对原有分数进行一个加减的操作
    ZADD的时间复杂度(log(N))此处的n表示集合中元素的个数 ZSET内部数据结构(跳表)

  • ZRANGE key index1, index2 withscores 查找1和2之间对应下标的元素 withscore返回值是否带上分数 因为内部是有序的 所以有索引的概念

  • zcard key 获取zset中元素的个数

  • ZCOUNT key min max 获取分数在min到max之间的元素的个数 并且是一个闭区间 要是想要他变开区间可以加一个( 有括号那边就是开区间 ,但是一般不用 (95 97 就是左开又闭把95的
    分数给排除了 (95 (97 表示一个开区间 写法很奇葩

同时在浮点数中存在两个很特殊的值

  1. inf 无穷大

  2. -inf 负无穷大

  • zrevrange key index1 index2 withsocres rev表示reverse 逆序的意思,就是按照分数降序遍历并进行打印 索引1顺序不需要转换,只是按照逆序进行一个输出 根据下表索引来找元素
  • zrangebysocre key socre1 socre2 withsocres 和刚刚根据索引不同,这个是根据分数来找元素的
  • zpopmax key count 删除并返回分数最高的count个元素 如果存在多个元素元素相同,则会删除字典序在前的元素
  • bzpopmax key count timeout 阻塞版本的zpopmax timeout表示最长的阻塞时间单位是秒
    当前元素不够或者没有元素的时候,会进行一个阻塞直到其他客户端向这里添加元素之后进行一个删除
  • zpopmin key count 和上述的popmax用法一样 删除集合中最小的count个元素
  • bzpopmin key count timeout 和上述的bzpopmax用法一样的
  • zrank key member 获取指定元素的排名,最大的元素为第一名升序 要是不存在该元素则返回空
  • zrevrank key member 也是获取指定元素的排名 但是是降序 最小的元素为第一名
  • zrem key member member... 删除指定的元素
  • zremrangebyrank key start end 根据start到end的下标进行一个删除 左闭右闭
  • zremrangebbyscore key score1 score2 根据指定的分数进行一个删除 左闭右闭
  • zincrby key increment member 为元素的分数增加或减少相应的分数值

交集 并集

  • zinterstore destination numkeys key key... weights weight \[weight...] aggregate\ 交集 并保存到另一个key中

    numkeys:一个整数 来描述后面有多少个key weights也是整数用来描述后面有多少个weight
    因为后面还有很多个可选项,所以这里需要明确列出有多少个key
    destination:用来保存结果的key
    weight:权重 因为有序集合是有分数的,此处的权重相当于一个系数,每个集合的分数会和对应的权重进行一个相乘
    aggregate:总数 因为在zset中分数只是一个辅助作用,在进行交集比较的时候,是以元素为主的所以这里的aggregate是表示最后返回集合中分数怎么算 如果是sum 则把交集中的分数相加 max则是取最大值 min取最小值

  • zunionstore destination numkeys key key... weights weight \[weight...] aggregate\ 和上述zinterstore使用方式相同只不过这里是求并集 并保存到另一个key中

内部编码方式

相关推荐
IT龟苓膏6 小时前
Redis 数据类型底层原理:SDS、quicklist、intset、skiplist、Bitmap、HyperLogLog 一篇讲清
数据库·redis·skiplist
流星白龙7 小时前
【MySQL高阶】19.变更缓冲区,自适应哈希索引,日志缓冲区
数据库·windows·mysql
晴天¥7 小时前
Oracle中的监听配置与管理(动态、静态监听配置对比以及listener.ora和tnsnames.ora)
数据库·oracle
瀚高PG实验室8 小时前
python连接HGDB超时
数据库·瀚高数据库·highgo
是烨笙啊8 小时前
在 Claude code 中如何利用模型缓存节省 token
人工智能·缓存·ai编程
闪电悠米9 小时前
黑马点评-Redisson-01_why_redisson
java·服务器·网络·数据库·缓存·wpf
Counter-Strike大牛9 小时前
SpringBoot2.7.10+MyBatisPlus实现MySQL+DM双数据库切换
数据库·mysql
dllxhcjla9 小时前
Redis
数据库·redis·缓存
睡不醒男孩0308239 小时前
数据库高可用运维实操指南:基于CLup的PostgreSQL生产环境自动化管理
运维·数据库·postgresql
神仙别闹9 小时前
基于Python + SQL server 实现(GUI)原神圣遗物管理与角色数值模拟系统
java·数据库·python