Redis-集合

文章目录

    • 一、命令
        • 1.集合内操作
          • (1)添加元素
          • (2)删除元素
          • (3)计算元素个数
          • (4)判断元素是否在集合中
          • (5)随机从集合返回指定个数的元素
          • (6)从集合随机弹出元素
          • (7)获取所有元素
        • 2.集合间操作
          • (1)求多个集合的交集
          • (2)求多个集合的并集
          • (3)求多个集合的差集
          • (4)将交并差的结果保存
    • 二、内部编码
          • 1.intset(整数集合)
          • 2.hashtable(哈希表)
    • 三、使用场景
          • 1.标签

一、命令

1.集合内操作

(1)添加元素
sadd key element [element...] 返回结果为成功添加的元素个数
(2)删除元素
srem key element [element...] 返回结果为成功删除元素个数
(3)计算元素个数
scard key 时间复杂度为O(1) 它并不会遍历set的所有元素,而是直接使用Redis内部的变量
(4)判断元素是否在集合中
sismember key element
如果给定元素element在集合内返回1 否则返回0
(5)随机从集合返回指定个数的元素
srandmember key [count] 
[count]是可选参数,如果不写,默认为1
(6)从集合随机弹出元素
spop key [count] 
spop操作可以从集合中随机弹出[count] 个元素,默认弹出一个
srandmember spop的不同之处,是spop在取出元素后,会删除原集合中的元素
(7)获取所有元素
smembers key
返回结果是无序的
smembers lrange hgetall 都属于比较重的命令,如果元素过多,存在阻塞Redis的可能性

2.集合间操作

(1)求多个集合的交集
sinter key [key...]
(2)求多个集合的并集
suinon key [key...]
(3)求多个集合的差集
sdiff key [key...]
(4)将交并差的结果保存
sinterstore destination key [key...]
suionstore destination key [key...]
sdiffstore destination key [key...]
集合间的运算在元素较多的情况下会比较耗时,所以Redis提供了上面三个命令(原命令+store),将集合的交并差结果保存在destination中

二、内部编码

  • 一个集合最多可以存储2E32-1个元素
1.intset(整数集合)
  • 当集合中的元素都是整数且元素个数小于set-max-intset-entries配置(默认512个)时,Redis会选用intset作为集合的内部实现,从而减少内存的使用
2.hashtable(哈希表)
  • 当集合类型无法满足intset的条件时,Redis会使用hashtable作为集合的内部实现

三、使用场景

1.标签

比如csdn文章发布的表签,可以使用set存储,这样可以根据这个表签找到相似的文章来推送

你可能感兴趣的:(Redis)