欢迎投稿

今日深度:

五、Redis 基础命令---无序集合,redis命令---集合

五、Redis 基础命令---无序集合,redis命令---集合


1、集合中的每个元素都是唯一的,没有顺序的。
2、集合与列表的对比       

集合 列表
存储内容 最多 2^32-1个字符串 最多 2^32-1个字符串
有序性 无序 有序
唯一性 唯一 不唯一

3、集合内部使用的是值为空的散列表实现,所以向集合中插入、删除、判断元素是否存在操作的时间复杂度都是O(1)
4、SADD key member1 member2...添加元素,可以同时添加多个
     127.0.0.1:6379> SADD setA 1 2 3 4           (integer) 4

5、SMEMBERS key 获取所有数据           127.0.0.1:6379> SMEMBERS setA
1) "1"
2) "2"
3) "3"
                4) "4"
6、SREM key value1 value2 删除数据 ,返回删除的个数           127.0.0.1:6379> SMEMBERS setA
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> SREM setA 1 2
               (integer) 2
7、SISMEMBER key member 判断是否存在,返回1表示存在,返回0表示不存在           127.0.0.1:6379> SMEMBERS setA
1) "3"
2) "4"
127.0.0.1:6379> SISMEMBER setA 3
(integer) 1
127.0.0.1:6379> SISMEMBER setA 4
               (integer) 1         127.0.0.1:6379> SISMEMBER setA 5
               (integer) 0

8、集合间运算           SDIFF key1 key2 key3... 差集           SINTER key1 key2 key3 ......交集           SUNION key1 key2 key3......并集
9、SRANDMEMBER 随机获取一个元素            SRANDMEMBER set count                如果count值为正数时,会从集合中随机获取 count 个不重复的元素,如果count值大于集合size ,则返回所有元素           如果count值为负数时,从集合中随机获取 |count|个元素, 这些元素有可能相同 原理:      SRANDMEMBER 返回的元素并不是非常的随机,出现这种情况是由集合类型采用的存储结构(散列表即hash)造成的。      散列表采用散列函数将元素映射到不同的存储桶(bucket)上以实现O(1)的时间复杂度的元素查找。举个例子,当散列表存储元素B时,计算b的散列值是0,就会把元素B存储到0号bucket上。下次get元素时,使用同样的算法计算出b的散列值是0,直接去0号bucket上读取元素。如果遇到了元素冲突,即多个元素的散列值相同,集合采用拉链法解决冲突,将散列值冲突的元素以链表的形式存入同一个桶中,查找元素时先找到对应元素的桶,然后再在链表中找到相应的元素。      SANDMEMBER 命令是随机获取一个bucket,然后再在对应的链表中随机获取一个元素。所以元素所在的桶中元素越少,被随机选中的可能性越大。      其实HashMap的原理也同上。如图:           
10、SPOP 随机从集合中弹出一个元素
     









     

www.htsjk.Com true http://www.htsjk.com/shujukunews/6103.html NewsArticle 五、Redis 基础命令---无序集合,redis命令---集合 1、集合中的每个元素都是唯一的,没有顺序的。 2、集合与列表的对比 集合 列表 存储内容 最多 2^32-1个字符串 最多 2^32-1个字符串 有序...
评论暂时关闭