Redis笔记——对象之 SET

是什么?

        Redis 的 Set 是一个无序的不重复的集合字符串集合。

        如果底层数据编码为 INTSET,其实是有序的,不过不推荐依赖这个,整体还是看作无序来使用为好。

场景

        无序集合场景。如关注了那些公众号,Set 提供了查交集、并集的功能,可以很方便的实现共同关注功能。

常用操作

创建:
    SADD key member[member...] 添加/修改元素,并返回成功添加元素个数

查询:
    SISMEMBER key member 查看元素是否存在
    SCARD key 查询集合元素个数
    SMEMBERS key 查看集合所有元素
    SSCAN key cursor [MATCH pattern] [COUNT count] 指定游标查询集合元素
        可以指定个数,默认为10。返回结果中第一行为下一次查询要使用的游标,为0则表示已查询全部数据
        例:从0号位查询集合 setjelly 的数据
            127.0.0.1:6379> SSCAN setjelly 0
            1) "0"
            2) 1) "JJ"
               2) "EE"
               3) "LL"
               4) "YY"
    SINTER key [key ...] 查询在第一个集合中,且在后续所有集合中的数据
    SUNION key [key ...] 查询集合并集,集合数要大于等于2
    SDIFF key [key ...] 查询在第一个集合中存在,在后续集合中不存在的数据,集合数要大于等于2
    
更新:
    SADD key member[member...] 添加/修改元素,并返回成功添加元素个数
    SREM key member[member...] 删除元素,并返回成功删除元素个数
    
删除:
    SDEL key [key ...] 删除对象,返回成功删除的键的个数

底层实现

编码方式

        出于性能考虑,Set 也支持两种编码方式,分别是 INTSET、HASHTABLE。

        如果集合元素都是整数,且数量不超过512个,使用 INTSET 编码方式。

        如果不满足 INTSET 编码方式要求,则使用 HASHTABLE 编码方式。

  • INTSET

        INTSET排列紧凑,内存占用较少,查询时需使用二分查找。

  • HASHTABLE

        HASHTABLE查询一个元素的性能很高,能在O(1)时间就确认一个元素是否存在。

总结

        Redis 的 Set 对象可以很方便的管理无序集合,还可以对多个集合求交集、并集、差集。底层编码方式有两种,INTSET少量整数集合时使用以节约内存HASHTABLE 适用于需要快速定位某个元素的场景

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值