5:redis的set类型

set 的是通过 hash table 实现的,所以添加、删除和查找的复杂度都是 O(1)。hash table 会随

着添加或者删除自动的调整大小。需要注意的是调整 hash table 大小时候需要同步(获取写

锁)会阻塞其他读写操作,可能不久后就会改用跳表(skip list)来实现,跳表已经在 sorted

set 中使用了。关于 set 集合类型除了基本的添加删除操作,其他有用的操作还包含集合的

取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现 sns

中的好友推荐和 blog 的 tag 功能

1:

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中

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

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

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 中

扫描二维码关注公众号,回复: 1271375 查看本文章
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

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

 

 

猜你喜欢

转载自iluoxuan.iteye.com/blog/1938846