Redis sets操作

set 是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合

求交并差等操作,操作中key理解为集合的名字。 

Redis的set是string类型的无序集合。set元素最大可以包含(2的32次方)个元素。 

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

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

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

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

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

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

redis 127.0.0.1:6379> sadd myset hello 往set中添加元素

(integer) 1

redis 127.0.0.1:6379> sadd myset world

(integer) 1

redis 127.0.0.1:6379> sadd myset hello

(integer) 0

redis 127.0.0.1:6379> smembers myset 列出set中所有的元素

1) "world"

2) "hello"

redis 127.0.0.1:6379> srem myset hello 删除指定set中指定元素

(integer) 1

redis 127.0.0.1:6379> smembers myset

1) "world"

redis 127.0.0.1:6379> sadd myset1 one

(integer) 1

redis 127.0.0.1:6379> sadd myset1 two

(integer) 1

redis 127.0.0.1:6379> sadd myset1 three

(integer) 1

redis 127.0.0.1:6379> spop myset1 随机删除set中指定元素

"three"

redis 127.0.0.1:6379> smembers myset1

1) "two"

2) "one"

redis 127.0.0.1:6379> sadd myset2 one

(integer) 1

redis 127.0.0.1:6379> sadd muset2 four

(integer) 1

redis 127.0.0.1:6379> sadd myset2 four

(integer) 1

redis 127.0.0.1:6379> smembers myset2

1) "four"

2) "one"

redis 127.0.0.1:6379> sdiff myset1 myset2 返回2个集合差集的第一个元素

1) "two"

redis 127.0.0.1:6379> sdiff myset2 myset1

1) "four"

redis 127.0.0.1:6379> sdiffstore myset1 myset2 myset3 将2个集合的差集存到指定集合中

(integer) 2

redis 127.0.0.1:6379> smembers myset3

(empty list or set)

redis 127.0.0.1:6379> smembers myset1

1) "four"

2) "one"

redis 127.0.0.1:6379> smembers myset2

1) "four"

2) "one"

redis 127.0.0.1:6379> sadd  myset1 three

(integer) 1

redis 127.0.0.1:6379> smembers myset1

1) "three"

2) "four"

3) "one"

redis 127.0.0.1:6379> sinter myset1 myset2 获得2个集合的交集

1) "four"

2) "one"

redis 127.0.0.1:6379> sinterstore myset3 myset1 myset2 将2个集合的交集存入到第三个集合中

(integer) 2

redis 127.0.0.1:6379> smembers myset3

1) "four"

2) "one"

redis 127.0.0.1:6379> smembers myset1

1) "three"

2) "four"

3) "one"

redis 127.0.0.1:6379> sadd myset1 pengdi

(integer) 1

redis 127.0.0.1:6379> smembers myset1

1) "pengdi"

2) "three"

3) "four"

4) "one"

redis 127.0.0.1:6379> smembers myset2

1) "four"

2) "one"

redis 127.0.0.1:6379> sadd myset2 jenny

(integer) 1

redis 127.0.0.1:6379> smembers myset2

1) "jenny"

2) "four"

3) "one"

redis 127.0.0.1:6379> sunion myset2 myset1 获得2个集合的并集

1) "pengdi"

2) "three"

3) "four"

4) "jenny"

5) "one"

redis 127.0.0.1:6379> sunionstore myset3 myset1 myset2 将2个集合的并集存入到指定的集合中

(integer) 5

redis 127.0.0.1:6379> smembers myset3

1) "pengdi"

2) "jenny"

3) "four"

4) "three"

5) "one"

redis 127.0.0.1:6379> smove myset3 myset4 one 将集合myset3中的one元素删除并存入到myset4中

(integer) 1

redis 127.0.0.1:6379> smembers myset4

1) "one"

redis 127.0.0.1:6379> sismember myset4 two  测试集合中指定元素是否存在

(integer) 0

redis 127.0.0.1:6379> sismember myset4 one

(integer) 1

redis 127.0.0.1:6379> srandmember myset2 随机获取集合中的一个元素

"four"

猜你喜欢

转载自wilian.iteye.com/blog/1568307
今日推荐