redis操作数据-sets

1.介绍

        set 的是通过 hash table 实现的,所以添加、删除和查找的复杂度都是 O(1)。hash table 会随着添加或者删除自动的调整大小。需要注意的是调整 hash table 大小时候需要同步(获取写锁)会阻塞其他读写操作,可能不久后就会改用跳表(skip list)来实现,跳表已经在 sorted set 中使用了。关于 set 集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交(intersection),差集(difference)。通过这些操作可以很容易的实现 sns中的好友推荐和 blog 的 tag 功能.

2.命令

2.1 sadd向key中添加数据

127.0.0.1:6379> sadd myset hello
(integer) 1

2.2 smembers显示key中所有的value

127.0.0.1:6379> smembers myset
1) "hello"

2.3 srem 删除key中指定value的值

127.0.0.1:6379> srem myset hello
(integer) 1
127.0.0.1:6379> smembers myset
(empty list or set)

2.4 spop,随机返回并删除名称为key的set中的一个元素

127.0.0.1:6379> sadd myset tonva
(integer) 1
127.0.0.1:6379> sadd myset huage
(integer) 1
127.0.0.1:6379> sadd myset hello
(integer) 1
127.0.0.1:6379> smembers myset
1) "huage"
2) "tonva"
3) "hello"
127.0.0.1:6379> spop myset
"hello"
127.0.0.1:6379> smembers myset
1) "huage"
2) "tonva"
127.0.0.1:6379> spop myset
"tonva"
127.0.0.1:6379> smembers myset
1) "huage"

2.5 sdiff 返回所有给定key与第一个key的差集(前面-后面后保留前面剩下的)

127.0.0.1:6379> smembers myset
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> smembers myset3
1) "three"
127.0.0.1:6379> sdiff myset myset3
1) "two"
2) "one"
127.0.0.1:6379> sdiff myset3 myset
(empty list or set)
127.0.0.1:6379> smembers myset4
1) "four"
2) "one"
127.0.0.1:6379> sdiff myset myset2 myset4
1) "three"

2.6 sdiffstore ,返回所有key与第一个key的差值,并将结果存为另一个key

127.0.0.1:6379> sdiffstore newset myset myset2
(integer) 1
127.0.0.1:6379> smembers newset
1) "three"

2.7 sinter 返回所有给定key的交集

127.0.0.1:6379> smembers myset
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sinter myset myset2
1) "two"
2) "one"

2.8 sinterstore ,放回所有给定key的交集并保存到新的key中

127.0.0.1:6379> sinterstore newset myset myset2
(integer) 2
127.0.0.1:6379> smembers newset
1) "two"
2) "one"

2.9 sunion,返回所有给定key的并集

127.0.0.1:6379> sunion myset myset4
1) "two"
2) "three"
3) "four"
4) "one"

2.10 sunionstore,返回所有给定key的并集,同时存到新key中

127.0.0.1:6379> sunionstore newset myset myset4
(integer) 4
127.0.0.1:6379> smembers newset
1) "two"
2) "three"
3) "four"
4) "one"

2.11 smove,从第一个key中移动value到另外一个key中

127.0.0.1:6379> smembers myset
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> smembers myset3
1) "three"
127.0.0.1:6379> smove myset myset3 one
(integer) 1
127.0.0.1:6379> smembers myset3
1) "three"
2) "one"
127.0.0.1:6379> smembers myset
1) "three"
2) "two"

2.12 scard 返回key中对应的value的个数

127.0.0.1:6379> scard myset
(integer) 3

2.13 sismember ,返回key中是否存在指定value的值

127.0.0.1:6379> sismember myset four
(integer) 0
127.0.0.1:6379> sismember myset two
(integer) 1
127.0.0.1:6379> smembers myset
1) "three"
2) "two"
3) "one"

2.14 srandmember,随机返回名称为key的其中一个元素,但是不删除元素

127.0.0.1:6379> smembers myset
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> srandmember myset
"two"
127.0.0.1:6379> srandmember myset
"one"





你可能感兴趣的:(redis操作数据-sets)