简介
Reids set对外提供的功能与list类似,是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断摸个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
Redis的set是String类型的无需集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是 O(1)
一个算法,随着数据的增加,执行时间的长度,如果是O(1),数据增加,查找数据的时间不变。
常用命令
sadd 将一个或多个member元素加入到集合key中,已经存在的member元素将被忽略
smembers 取出该集合的所有值
sismember 判断key中是否含有该value值
返回值为1 则含有 返回值为0则不含有
scard(返回集合中元素的个数)
srem (删除值)
spop(随机吐出一个值,吐出就不存在于集合中了)
srandmember 随机从该集合中取出n个值,不会从集合中删除
smove 将集合中的一个值移动到另外一个集合中
sinter 返回两个集合的交集元素
sunion 返回两个集合的并集元素
sdiff 返回两个集合的差集元素
数据结构
Set数据结构是dict字典,字典是用哈希表实现的。
Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它们的内部也使用hash结构,所有的value都指向同一个内部值