set获取元素_深入学习Redis(五),基本类型【Set】剖析

3be38aec19d71572dd6e85b46e377a16.png

本文我们要剖析的基本类型是Set,下面我们将深入源码剖析Redis中Set的实现。

存储类型:String 类型的无序集合,最大存储数量 2^32-1(40 亿左右)。

如图所示:

4d78aa1f104d65b4e5805c4fd1c2619f.png

操作命令

添加一个或者多个元素

sadd myset a b c d e f g

获取所有元素

smembers myset

统计元素个数

scard myset

随机获取一个元素

srandmember key

随机弹出一个元素

spop myset

移除一个或者多个元素

srem myset d e f

查看元素是否存在

sismember myset a

存储( 实现) 原理

Redis intset hashtable 存储 set。如果元素都是整数类型,就用 inset 存储。

如果不是整数类型,就用 hashtable(数组+链表的存来储结构)。

相关hashtable的源码分析,在前面已经分析过了,在此就不重复了。

问题:KV 怎么存储 set 的元素?key 就是元素的值,value 为 null。

如果整数类型元素个数超过 512 个,也会用 hashtable 存储。

配置文件 redis.conf 中配置属性如下

4cd5cac054756797499a30970d5ae281.png

51b8d89165111cdf23e5852bb570e694.png

应用场景

抽奖

随机获取元素

spop myset

点赞、 签到、 打卡

86710fa588f08da86e6168790cf86141.png

这条微博的 ID 是 t1001,用户 ID 是 u3001。

用 like:t1001 来维护 t1001 这条微博的所有点赞用户。

点赞了这条微博:sadd like:t1001 u3001

取消点赞:srem like:t1001 u3001

是否点赞:sismember like:t1001 u3001

点赞的所有用户:smembers like:t1001

点赞数:scard like:t1001

比关系型数据库简单许多。

商品标签

用 tags:i5001 来维护商品所有的标签。

217fedeab89f97d58e4b008022274f51.png

sadd tags:i5001 画面清晰细腻

sadd tags:i5001 真彩清晰显示屏

sadd tags:i5001 流畅至极

商品筛选

获取差集

sdiff set1 set2

获取交集(intersection )

sinter set1 set2

获取并集

sunion set1 set2

c529e3ee1eab32875da0936f123471a3.png

iPhone11 上市了。

sadd brand:apple iPhone11

sadd brand:ios iPhone11

sad screensize:6.0-6.24 iPhone11

sad screentype:lcd iPhone11

筛选商品,苹果的,iOS 的,屏幕在 6.0-6.24 之间的,屏幕材质是 LCD 屏幕

sinter brand:apple brand:ios screensize:6.0-6.24 screentype:lcd

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值