数据类型为set。可以保证set内数据唯一。场景:生成订单号,因为要求订单号是绝对不能重复的,所以数据库中要设置为unique索引。但是其实可以通过redis,set来做每天的订单集合。比如A客户的订单号201803041,B客户并发了相同的订单号,但是A客户插入了set集合,B客户插入就会返回0,表示重复,需要再次生成,一定程度上减少了数据库unique的验证。
#添加到set集合中
SADD key member [member ...]
添加一个或多个指定的member元素到集合的 key中.指定的一个或者多个元素member 如果已经在集合key中存在则忽略.如果集合key 不存在,则新建集合key,并添加member元素到集合key中.
如果key 的类型不是集合则返回错误.
127.0.0.1:6379> SADD set 1 2 3 3 4 4 (integer) 4 127.0.0.1:6379> SMEMBERS set 1) "1" 2) "2" 3) "3" 4) "4"
#如果想知道set集合的大小可以使用命令scard
SCARD key
127.0.0.1:6379> SCARD set (integer) 4
#如果想比较集合。命令有sdiff,sdiffstore,sinter,sinterstore,sunion,sunionstore
SDIFF key [key ...]
返回一个集合与给定集合的差集的元素.
127.0.0.1:6379> SADD set1 a (integer) 1 127.0.0.1:6379> SADD set2 a (integer) 1 #两个相同的集合或者都是空集合比较 127.0.0.1:6379> SDIFF set1 set2 (empty list or set) #有差值的情况 127.0.0.1:6379> SADD set1 b (integer) 1 127.0.0.1:6379> SDIFF set1 set2 1) "b"
SDIFFSTORE destination key [key ...]
该命令类似于 SDIFF, 不同之处在于该命令不返回结果集,而是将结果存放在destination
集合中.
如果destination
已经存在, 则将其覆盖重写.可以理解为将比较差集后的结果保存到新的目标集合
127.0.0.1:6379> SDIFF set1 set2 1) "b" 127.0.0.1:6379> SDIFFSTORE set3 set1 set2 (integer) 1 127.0.0.1:6379> SMEMBERS set3 1) "b"
SINTER key [key ...]
返回指定所有的集合的成员的交集.官方实例解释
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SINTER key1 key2 key3 = {c}
127.0.0.1:6379> SINTER set1 set2 1) "a"
SINTERSTORE destination key [key ...]
和sdiffstore效果类似。将交集写到新的集合。如果集合存在则覆盖重写。
SUNION key [key ...]
返回给定的多个集合的并集中的所有成员.
例如:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SUNION key1 key2 key3 = {a,b,c,d,e}
#如果需要判断值是否在集合中可以使用命令:sismember
SISMEMBER key member
返回成员 member 是否是存储的集合 key的成员.
##返回值
- 如果member元素是集合key的成员,则返回1
- 如果member元素不是key的成员,或者集合key不存在,则返回0
#返回key集合所有的元素.在上面实例中已经使用。
SMEMBERS key
返回key集合所有的元素.
该命令的作用与使用一个参数的SINTER 命令作用相同.
SMOVE source destination member
将member从source集合移动到destination集合中. 对于其他的客户端,在特定的时间元素将会作为source或者destination集合的成员出现.
如果source 集合不存在或者不包含指定的元素,这smove命令不执行任何操作并且返回0.否则对象将会从source集合中移除,并添加到destination集合中去,如果destination集合已经存在该元素,则smove命令仅将该元素充source集合中移除. 如果source 和destination不是集合类型,则返回错误.
127.0.0.1:6379> SADD test4 1 2 (integer) 2 127.0.0.1:6379> SADD test5 3 (integer) 1 127.0.0.1:6379> SMOVE test4 test5 2 (integer) 1 127.0.0.1:6379> SMEMBERS test4 1) "1" 127.0.0.1:6379> SMEMBERS test5 1) "2" 2) "3"
#如果你想弹出集合中的值可以使用spop。
SPOP key [count]
是随机位置弹出set中的值。count计数与redis版本有关
127.0.0.1:6379> SADD test6 1 2 3 4 6 5 7 8 9 10 (integer) 10 127.0.0.1:6379> SPOP test6 3 1) "1" 2) "5" 3) "10" 127.0.0.1:6379> SMEMBERS test6 1) "2" 2) "3" 3) "4" 4) "6" 5) "7" 6) "8" 7) "9"
#随机返回set中指定个数的值
SRANDMEMBER key [count]
仅提供key参数,那么随机返回key集合中的一个元素.
Redis 2.6开始, 可以接受 count 参数,如果count是整数且小于元素的个数,返回含有 count 个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,仅返回整个集合的所有元素,当count是负数,则会返回一个包含count的绝对值的个数元素的数组,如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况.
仅提供key参数时,该命令作用类似于SPOP命令, 不同的是SPOP命令会将被选择的随机元素从集合中移除, 而SRANDMEMBER仅仅是返回该随记元素,而不做任何操作.
127.0.0.1:6379> SADD set7 1 2 3 4 5 (integer) 5 127.0.0.1:6379> SRANDMEMBER set7 "4" 127.0.0.1:6379> SRANDMEMBER set7 3 1) "1" 2) "2" 3) "4" 127.0.0.1:6379> SRANDMEMBER set7 10 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 127.0.0.1:6379> SRANDMEMBER set7 -10 1) "4" 2) "2" 3) "1" 4) "2" 5) "5" 6) "4" 7) "1" 8) "3" 9) "3" 10) "1"
#移除集合中某个值
SREM key member [member ...]
在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素则忽略 如果key集合不存在则被视为一个空的集合,该命令返回0.
如果key的类型不是一个集合,则返回错误.
127.0.0.1:6379> SMEMBERS set7 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 127.0.0.1:6379> SREM set7 2 (integer) 1 127.0.0.1:6379> SMEMBERS set7 1) "1" 2) "3" 3) "4" 4) "5"