redis中set集合类型常用命令

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动去重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的

Redis的Set是string类型的无序集合,它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)

下面介绍一些Set类型的常用命令

  • 新增键值对(如果key已存在则在对应set中新增value):sadd key value1 value2 value3......,eg:
127.0.0.1:6379> sadd key1 value1 value2 value3
(integer) 3
  • 查询key对应set中所有value:smembers key,eg:
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
3) "value1"
  • 判断指定key对应set中是否包含指定value(是返回1,否返回0):sismember key value,eg:
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
3) "value1"
127.0.0.1:6379> sismember key1 value1
(integer) 1
127.0.0.1:6379> sismember key1 value5
(integer) 0
  • 查询指定key对应set中的元素个数:scard key,eg:
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
3) "value1"
127.0.0.1:6379> scard key1
(integer) 3
  • 删除指定key对应set中指定value:srem key value1 value2......,eg:
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
3) "value1"
127.0.0.1:6379> srem key1 value1
(integer) 1
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
  • 随机删除指定key对应set中的n个元素(不指定n则默认删除一个):spop key n,eg:
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
127.0.0.1:6379> spop key1 2
1) "value2"
2) "value3"
127.0.0.1:6379> smembers key1
(empty array)
  • 随机获取指定key对应set中的n个元素(不指定n则默认获取一个):srandmember key n,eg:
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
3) "value1"
127.0.0.1:6379> srandmember key1 2
1) "value2"
2) "value3"
127.0.0.1:6379> srandmember key1 2
1) "value2"
2) "value1"
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
3) "value1"
  • 将指定key1对应set中的指定元素value移动到另一个key2对应的set中:smove key1 key2 value,eg:
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
3) "value1"
127.0.0.1:6379> smembers key2
1) "k2v1"
127.0.0.1:6379> smove key1 key2 value1
(integer) 1
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
127.0.0.1:6379> smembers key2
1) "k2v1"
2) "value1"
  • 查询指定key1对应set和key2对应set的差集:sdiff key1 key2......,eg:
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
127.0.0.1:6379> smembers key2
1) "k2v1"
2) "value3"
3) "value1"
127.0.0.1:6379> sdiff key1 key2
1) "value2"
  • 查询指定key1对应set和key2对应set的交集:sinter key1 key2......,eg:
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
127.0.0.1:6379> smembers key2
1) "k2v1"
2) "value3"
3) "value1"
127.0.0.1:6379> sinter key1 key2
1) "value3"
  • 查询指定key1对应set和key2对应set的并集:sunion key1 key2......,eg:
127.0.0.1:6379> smembers key1
1) "value2"
2) "value3"
127.0.0.1:6379> smembers key2
1) "k2v1"
2) "value3"
3) "value1"
127.0.0.1:6379> sunion key1 key2
1) "k2v1"
2) "value2"
3) "value3"
4) "value1"

记得快乐