当前位置:操作系统 > Unix/Linux >>

redis的set类型

redis的set类型
 
set 的是通过 hash table 实现的,所以添加、删除和查找的复杂度都是 O(1)。hash table 会随
着添加或者删除自动的调整大小。需要注意的是调整 hash table 大小时候需要同步(获取写
锁)会阻塞其他读写操作,可能不久后就会改用跳表(skip list)来实现,跳表已经在 sorted
set 中使用了。关于 set 集合类型除了基本的添加删除操作,其他有用的操作还包含集合的
取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现 sns
中的好友推荐和 blog 的 tag 功能
1:
Java代码  
redis 127.0.0.1:6378> sadd myset ljq  
(integer) 1  
redis 127.0.0.1:6378> sadd myset ljq2  
(integer) 1  
redis 127.0.0.1:6378> sadd myset ljq3 //添加  
(integer) 1  
redis 127.0.0.1:6378> smembers myset  
1) "ljq2"  
2) "ljq3"  
3) "ljq"  
redis 127.0.0.1:6378> srem myset ljq //删除某个  
(integer) 1  
redis 127.0.0.1:6378> smembers myset // 显示set  
1) "ljq2"  
2) "ljq3"  
redis 127.0.0.1:6378> spop myset // 随机删除一个  
"ljq3"  
redis 127.0.0.1:6378> smembers myset  
1) "ljq2"  
redis 127.0.0.1:6378> sadd myset ljq3   
(integer) 1  
redis 127.0.0.1:6378> sadd myset ljq4  
(integer) 1  
redis 127.0.0.1:6378> smembers myset  
1) "ljq2"  
2) "ljq4"  
3) "ljq3"  
redis 127.0.0.1:6378> sadd myset2 ljq3  
(integer) 1  
redis 127.0.0.1:6378> sadd myset hello  
(integer) 1  
redis 127.0.0.1:6378> sadd myset2 hiworkd  
(integer) 1  
redis 127.0.0.1:6378> smembers myset2  
1) "ljq3"  
2) "hiworkd"  
  
//返回所有给定 key 与第一个 key 的差集  
redis 127.0.0.1:6378> sdiff myset myset2 // 显示myset中和myset2不同的  
1) "ljq2"  
2) "hello"  
3) "ljq4"  
redis 127.0.0.1:6378> sdiff myset2 myset // 显示myset2中和myset不同的  
1) "hiworkd"  
 2:sdiffstore 返回所有给定 key 与第一个 key 的差集保存到另一个set中
Java代码  
redis 127.0.0.1:6378> smembers myset2  
1) "hello"  
2) "ljq3"  
3) "ljq4"  
redis 127.0.0.1:6378> sdiffstore myset3 myset2 myset   
(integer) 1  
redis 127.0.0.1:6378> smembers myset3  
1) "hello"  
 3:交集sinter
Java代码  
redis 127.0.0.1:6378> sinter myset2 myset // 交集  
1) "ljq4"  
2) "ljq3"  
redis 127.0.0.1:6378> sinterstore myset4 myset2 myset //交集保存到myset4中  
(integer) 2  
redis 127.0.0.1:6378> smembers myset4  
1) "ljq3"  
2) "ljq4"  
 4:并集sunion
Java代码  
redis 127.0.0.1:6378> sunion myset6 myset myset5 // 并集  
1) "one"  
2) "ljq3"  
3) "ljq4"  
4) "two"  
redis 127.0.0.1:6378> smembers myset6  
(empty list or set)  
redis 127.0.0.1:6378> sunionstore myset6 myset myset5 // 并集保存到myset6  
(integer) 4  
redis 127.0.0.1:6378> smembers myset6  
1) "one"  
2) "ljq3"  
3) "ljq4"  
 5:smove从第一个 key 对应的 set 中移除 member 并添加到第二个对应 set 中
Java代码  
redis 127.0.0.1:6378> smembers myset6  
1) "one"  
2) "ljq3"  
3) "ljq4"  
4) "two"  
redis 127.0.0.1:6378> smove myset6 myset7 one // 删除myset6一个放到myset7  
(integer) 1  
redis 127.0.0.1:6378> smembers myset7  
1) "one"  
redis 127.0.0.1:6378> smembers myset6  
1) "ljq3"  
2) "ljq4"  
3) "two"  
 6:scard , sismember
Ubuntu代码  
redis 127.0.0.1:6378> smembers myset6  
1) "ljq3"  
2) "ljq4"  
3) "two"  
redis 127.0.0.1:6378> scard myset6 //显示个数  
(integer) 3  
redis 127.0.0.1:6378> sismember myset6 ljq3 //判断是否存在  
(integer) 1  
redis 127.0.0.1:6378> sismember myset6 ljq77  
(integer) 0  

 


CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,