Redis 集合(Set)
< 1>说明
Redis set 对外提供的功能与list雷士,是一个列表的功能,特殊之处在于set是一个可以自动排重的,当你需要纯出一个列数据,又不希望出现重复数据时,set是一个很好的选择。并且set提供了判断某个成员是否在一个set集合内部的重要接口,这个也是list所不能提供的。
Redis 的set 是string类型的无需集合,他底层其实是一个value为nulll的hash表,所以添加,删除,查找的复杂度都是O(1).
一个算法, 随着数据的增加,执行时间的长短,如果是O(1),数据增加,查找数据的时间不变。
< 2>数据结构
Set数据结构是dict字典,字典使用hash表实现的。
Java 中的HashSet的内部实现用的是HashMap,只不过所有的value都指向同一个对象,Redis的set结构也是一样,他的内部也是用hash结构,所有的value都指向同一个内部值。
< 3>常见命令
- 将一个或二者多个member元素加入到集合key中,已经存在的member元素将被忽略
sadd < key> < value1> < value2>… - 取出集合的所有值
smembers < key> - 判断< key>是否含有< value>值,有:1 ,无:0
sismember < value> - 返回集合的元素个数
scard - 删除集合钟的某个元素
srem < key> < value2> … - 随机从该集合中吐出一个值
spop < key> - 随即从集合中取出n个值,不会从集合中删除
srandmember < key> < n> - 把集合中的一个值从一个集合移动到另一个集合
smove < destination> < value> - 返回两个集合的交集元素
sinter < key1> < key2> - 返回两个集合的并集元素
sunion < key1> < key2> - 返回两个集合的差集元素 (key1 中有,但key2中没有的)
sdiff < key1> < key2>