5.redis Set 数据类型
无序的字符串集合,2 ^32 40亿数据 ,时间复杂度O(1),给予hashtable 实现,可以实现交集、并集、补集操作。
1.添加元素、查看元素
都是无序的
192.168.50.160:6379> sadd set aaa bbb ccc ddd (integer) 4 192.168.50.160:6379> smembers set 1) "ddd" 2) "aaa" 3) "ccc" 4) "bbb"
2.删除元素
1)指定key ,删除成功 即 为1
192.168.50.160:6379> smembers set 1) "ddd" 2) "aaa" 3) "ccc" 4) "bbb" 192.168.50.160:6379> srem set aaa (integer) 1 192.168.50.160:6379> smembers set 1) "ddd" 2) "ccc" 3) "bbb"
2)随机删除
192.168.50.160:6379> smembers set 1) "ddd" 2) "ccc" 3) "bbb" 192.168.50.160:6379> spop set "bbb" 192.168.50.160:6379> smembers set 1) "ddd" 2) "ccc"
3.交集、并集、差集(和数学上的概念一致)
192.168.50.160:6379> smembers set1 1) "ddd" 2) "aaa" 3) "ccc" 4) "bbb" 192.168.50.160:6379> smembers set2 1) "ddd" 2) "eee" 3) "fff" 4) "bbb" 192.168.50.160:6379> sinter set1 set2 //交集 1) "ddd" 2) "bbb" 192.168.50.160:6379> sunion set1 set2 //并集 1) "ddd" 2) "fff" 3) "bbb" 4) "aaa" 5) "ccc" 6) "eee" 192.168.50.160:6379> sdiff set1 set2 //差集 ,左侧减去右侧,以左侧为主 1) "aaa" 2) "ccc"
每个方法都有一个升级的方法:
添加后缀store ,即可存到另一个set 里
192.168.50.160:6379> sdiffstore setdiff set1 set2 (integer) 2 192.168.50.160:6379> smembers setdiff 1) "aaa" 2) "ccc"
4.将某个元素从set1 移动到set2
192.168.50.160:6379> smembers set1 1) "ddd" 2) "aaa" 3) "ccc" 4) "bbb" 192.168.50.160:6379> smembers set2 1) "ddd" 2) "eee" 3) "fff" 4) "bbb" 192.168.50.160:6379> smove set1 set2 aaa (integer) 1 192.168.50.160:6379> smembers set2 1) "ddd" 2) "eee" 3) "fff" 4) "bbb" 5) "aaa"
5.查看元素个数
192.168.50.160:6379> scard set2 (integer) 5
6.判断某个元素是否属于 该set
返回1表示属于
192.168.50.160:6379> sismember set2 ddd (integer) 1
应用场景:
1.统计某网站一天所有用户访问量,即去重的ip地址
2.计算好友关系,X 关注了A,B,C ,Y关注了 Z,X,Y,求他们共同关注的好友。
感谢阅读博客,欢迎向博主讨论问题。
浙公网安备 33010602011771号