Redis学习笔记---数据类型二(set、sortedset)

这篇是接着上篇来的,所以标号就继续了~~~~

四、set

     介绍:
    set集合元素是不重复的无序的。set类型与list类型有相似之处,如图:
    
    Redis学习笔记---数据类型二(set、sortedset)
    命令:
    ①sadd/smembers/srem/sismember  添加/获取/删除/是否是set的元素
        sadd set a,sadd set b,
        smembers set(返回set集合所有的元素) srem set a, sismember b
        sadd set1 a b c
    ②sdiff/sinter(交集)/sunion(并集)
        sdiif set set1 返回差集,即返回set有的而set2中没有
        sinter set set1 返回两个set都有的
        sunion set set1 返回两个的都有的
    ③sdiffstore/sinterstore/sunionstore
        将②中的数据存储  sdiffstore a1 set set1 存到a1中 a1也是一个set集合
    ④scard(获取集合长度)/spop(随机从集合中取出并删除一个元素)
        scard set 返回set集合长度,spop set 随机从set中弹出一个元素
    ⑤srandmember key [count]
        如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。

        如果 count 大于等于集合基数,那么返回整个集合。
        如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

五、sortedset    

    介绍:
    有序集合,在set集合类型的基础上为集合中的每个元素都关联了一个分数,这样可以很方便的获得分数最高的N个元素(topN)。
    有序集合类型和列表类型的差异
    相同点
        (1)二者都是有序的
        (2)二者都可以获得某一范围的元素
    不同点
        (1)列表类型是通过双向链表实现的,获取靠近两端的数据速度极快,当列表中元素增多后,访问中间的数据速度会很慢,所以它比较适合很少访问中间元素的应用
        (2)有序集合类型是使用散列表和跳跃表(skip list)实现的,所以即使读取位于中间部分的数据速度也很快
        (3)列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改这个元素的分值)
        (4)有序集合要比列表类型更耗费内存
    命令:
    ①zadd/zscore/zrange/zrevrange/  添加/获取指定元素分数/从小到大返回/从大到小返回
        zadd zset 10 a zadd zset 20 b zadd zset 5 c
        zscore zset b(返回20)
        zrange zset 0 -1 返回(c a b)有序
        zrevrange zset 0 -1 (b a c)
    ②zrangebyscore(默认是闭区间,可使用"("使用开区间)
        zrangebyscore zset 0 10 获取zset中0分到10分的元素 这里返回c和a
        zrangebyscore zset 0 (10 获取zset中0分到10分的元素 这里返回c
    ③zincrby/zcard/zcount(获取指定分数范围的元素个数)
        zincrby zset 6 c 让zset中c元素的值加6
        zcard zset 返回zset中元素个数
        zcount zset 0 10 指定分数范围的元素
    ④zrem/zremrangebyrank/zremrangebyscore
        zrem zset a
        zremrangebyrank zset 0 1 角标区间删除
        zremrangebyscore zset 0 10 分数范围删除
扩展:+inf(正无穷)    -inf(负无穷)

转载于:https://my.oschina.net/u/780876/blog/543183