Redis数据结构之set
Redis中的set是一种无序的、不重复的数据结构,用于存储字符串类型的元素。
特点
- set中的元素不重复,且无序,即不能保证添加元素的顺序,也不能按照元素的添加顺序来获取元素。
- set中的元素必须是字符串类型的。
- set常常用来去重、交集、并集等操作。
命令
添加元素
-
sadd key member1 [member2 ...]
将一个或多个元素添加到set中。
redis> sadd set1 apple (integer) 1 redis> sadd set1 pear orange (integer) 2
-
srem key member1 [member2 ...]
移除set中一个或多个元素。
redis> srem set1 pear (integer) 1
-
smove source dest member
将source中的元素member移动到dest中。
redis> sadd set2 banana (integer) 1 redis> smove set1 set2 apple (integer) 1 redis> smembers set1 (empty list or set) redis> smembers set2 1) "apple" 2) "banana" 3) "orange"
返回元素
-
scard key
返回set中元素的个数。
redis> scard set1 (integer) 2
-
sismember key member
判断member元素是否在set中。
redis> sismember set1 apple (integer) 1 redis> sismember set1 pear (integer) 0
-
smembers key
返回set中所有元素。
redis> smembers set1 1) "apple" 2) "orange"
-
srandmember key [count]
随机返回set中的一个或多个元素。
redis> srandmember set1 "orange" redis> srandmember set1 2 1) "apple" 2) "orange"
集合运算
-
sdiff key1 [key2 ...]
返回key1中有、其他set中没有的元素。
redis> sadd set3 apple pear (integer) 2 redis> sdiff set1 set3 1) "orange"
-
sdiffstore destination key1 [key2 ...]
将sdiff操作的结果存储到destination中。
redis> sdiffstore set4 set1 set3 (integer) 1 redis> smembers set4 1) "orange"
-
sinter key1 [key2 ...]
返回key1中和其他set中都有的元素。
redis> sadd set5 apple orange (integer) 2 redis> sinter set1 set5 1) "apple" 2) "orange"
-
sinterstore destination key1 [key2 ...]
将sinter操作的结果存储到destination中。
redis> sinterstore set6 set1 set5 (integer) 2 redis> smembers set6 1) "apple" 2) "orange"
-
sunion key1 [key2 ...]
返回所有set中的元素,去重后的结果。
redis> sunion set1 set5 1) "orange" 2) "pear" 3) "apple"
-
sunionstore destination key1 [key2 ...]
将sunion操作的结果存储到destination中。
redis> sunionstore set7 set1 set5 (integer) 3 redis> smembers set7 1) "orange" 2) "pear" 3) "apple"
总结
set是Redis中常用的数据结构之一,能够实现去重、交集、并集等操作,使用起来也比较简单。需要注意的是,set中的元素必须是字符串类型的,set中的元素是无序的,而且不能重复。