目录
一、Redis中Set介绍
Redis set 对外提供的功能与list类似,是一个列表的功能
特点:
set是可以自动排重的,
当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的
redis的Set是String类型的无序集合,它底层其实是一个value为null的hash表,所以添加、删除、查找的复杂度都是O(1)
一个算法,随着数据的增加,执行时间的长短,如果是O(1),数据增加,查找数据的时间不变
二、常用命令
命令 | 描述 |
---|---|
sadd <key> <value1> <value2>.. | 添加一个或多个元素到集合中 |
smembers <key> | 取出该集合的所有值 |
simembers <key> <value> | 判断集合中是否含有该<value>值 |
scard <key> | 返回该集合的元素个数 |
srem <key><value1><value> | 删除集合中和某几个元素 |
spop <key> | 随机从该集合吐出一个元素 |
srandmember <key> <n> | 随机从该集合中取出n个值,不会从集合中删除 |
smove <source> <destination> <value> | 把集合中一个值从一个集合移动到另一个集合 |
sinter <key1> <key2> | 返回两个集合的交集元素 |
sunion <key1> <key2> | 返回两个集合并集元素 |
sdiff <key1> <key2> | 返回两个集合中的差集元素 (key1中的,不包含key2中的) |
三、示例
sadd <key> <value1> <value2>..
将一个或多个member元素加入到集合key中,已经存在的numnber将会被忽略
smembers <key>
取出该集合的所有值
simembers <key> <value>
判断集合中是否含有该<value>值,有返回1,没有返回0
scard <key>
返回该集合的元素个数
srem <key><value1><value> ..
删除集合中一个或几个元素
spop <key>
随机从该集合吐出一个元素,吐出后元素会消失
srandmember <key> <n>
随机从该集合中取出n个值,不会从集合中删除
smove <source> <destination> <value>
把集合中一个值从一个集合移动到另一个集合
这里主要用到了2个点,一个是这个smove的移动,还有就是因为移动的是v3到k2中,而k2中已经有了一个v3 而set是自动排重的,所以出现下面的结果
sinter <key1> <key2>
返回两个集合的交集元素
交集也就是两个集合共有的元素
sunion <key1> <key2>
返回两个集合并集元素
并集也就是2个集合的所有元素并去重的结果
sdiff <key1> <key2>
返回两个集合中的差集元素 (key1中的,不包含key2中的)
四、Set底层的数据结构
Set数据结构是dict字典,字典是用哈希表实现的。
Java中的HashSet 的内部实现使用的是HashMap,只不过所有的value都指向同一个对象
Redis的Set结构也是一样,它的内部也是用hash结构,所有的value都指向同一个内部值
好了,这次的文章就到这里,喜欢的同学可以点赞收藏,遇到问题,可以评论,或者留言,我一定会第一时间给到回馈,感谢观看!!
注:本文为本人学习时心得分享,有讲错或者需要改正的地方,请指正,我会虚心接受