更多精彩文章,关注【ToBeTopJavaer】,更有数万元精品vip资源免费等你来拿!!!
本文咱们要剖析的基本类型是Set,下面咱们将深刻源码剖析Redis中Set的实现。ios
存储类型:String 类型的无序集合,最大存储数量 2^32-1(40 亿左右)。
操做命令
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 中配置属性以下
应用场景
抽奖
点赞、 签到、 打卡
这条微博的 ID 是 t1001,用户 ID 是 u3001。
用 like:t1001 来维护 t1001 这条微博的全部点赞用户。
点赞了这条微博:sadd like:t1001 u3001
取消点赞:srem like:t1001 u3001
是否点赞:sismember like:t1001 u3001
点赞的全部用户:smembers like:t1001
商品标签
商品筛选
sdiff set1 set2复制代码
sinter set1 set2复制代码
sunion set1 set2复制代码
sadd brand:apple 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
更多精彩文章,关注【ToBeTopJavaer】,更有数万元精品vip资源免费等你来拿!!!
