
Redis的Set是string类型的无序集合。集合成员是唯一的这就意味着集合中不能出现重复的数据。Redis中Set集合是通过哈希表实现的所以添加删除查找的复杂度都是O(1)。集合中最大的成员数为2^32-14294967295每个集合可存储40多亿个成员 青柠来相伴代码更简单。 本文所有内容我都整理在了 青柠合集 里。 搜索关注【青柠代码录】即可查看所有合集文章 ~ 一个算法随着数据的增加执行时间的长短如果是O(1)数据增加查找数据的时间不变Redis set对外提供的功能与list类似是一个列表的功能特殊之处在于set是可以自动去重的当你需要存储一个列表数据又不希望出现重复数据时set是一个很好的选择并且set提供了判断某个成员是否在一个set集合内的接口这个也是list所不能提供的。Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表所以添加、删除、查找的复杂度都是O(1)。Redis的Set结构与Java中的HashSet类似可以看做是一个value为null的HashMap。因为也是一个hash表因此具备与HashSet类似的特征● 无序● 元素不可重复● 查找快● 支持交集、并集、差集等功能常见命令sadd keyvalue1value2 将一个或多个member元素加入到集合key中已经存在的member元素将被忽略 smembers key 取出该集合的所有值。 sismember keyvalue 判断集合key是否为含有该value值有1没有0 scardkey 返回该集合的元素个数。 srem keyvalue1value2 删除集合中的某个元素。 spop key 随机从该集合中吐出一个值。 srandmember keyn 随机从该集合中取出n个值。不会从集合中删除 。 smove sourcedestinationvalue 把集合中一个值从一个集合移动到另一个集合 sinter key1key2 返回两个集合的交集元素。 sunion key1key2 返回两个集合的并集元素。 sdiff key1key2 返回两个集合的差集元素(key1中的不包含key2中的)数据结构Set数据结构是dict字典字典是用哈希表实现的。Java中HashSet的内部实现使用的是HashMap只不过所有的value都指向同一个对象。Redis的set结构也是一样它的内部也使用hash结构所有的value都指向同一个内部值。单值多value且无重复集合对象的编码可以是intset或者Hashtable。Set的两种编码格式intsethashtableRedis用intset或hashtable存储set。如果元素都是整数类型就用intset存储。如果不是整数类型就用hashtable(数组链表的存来储结构)。key就是元素的值value为null。img命令案例1.SADD key member [member ...]添加元素可以多次向同一个key中设置不同值不会覆盖之前的值因为已经存在的member元素将被忽略2.SMEMBERS key遍历集合中的所有元素3.SISMEMBER key member判断元素是否在集合中img4.SREM key member [member ...]删除元素img5.scard获取集合里面的元素个数img6.SRANDMEMBER key [数字]从集合中随机展现设置的数字个数元素元素不删除img7.SPOP key [数字]从集合中随机弹出一个元素出一个删除一个img8. smove key1 key2将key1里已存在的某个值赋给key2key1中就没有了。img9.集合运算-集合的差集运算A-B属于A但是不属于B的元素构成的集合SDIFF key [key ...]可以计算多个元素的差集img10.集合运算-集合的并集运算A∪B属于A或者属于B的元素构成的集合SUNION key [key ...]img11.集合运算-集合的交集运算A∩B属于A同时也属于B的共同拥有的元素构成的集合SINTER key [key ...]img12.SINTERCARD numkeys key 【key ...】【LIMIT limit】返回由所有给定集合的交集产生的集合的基数numkeys 的具体值由输入的key个数决定SINTERCARD 为redis7新命令它不返回结果集而是返回结果的基数。基数的词语解释: 用于表示事物个数的数