set

74 阅读2分钟
简介

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

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

一个算法,随着数据的增加,执行时间的长度,如果是O(1),数据增加,查找数据的时间不变。

常用命令

sadd 将一个或多个member元素加入到集合key中,已经存在的member元素将被忽略

image.png

smembers 取出该集合的所有值

image.png

sismember 判断key中是否含有该value值

返回值为1 则含有 返回值为0则不含有

image.png

scard(返回集合中元素的个数)

image.png

srem (删除值)

image.png

spop(随机吐出一个值,吐出就不存在于集合中了)

image.png

srandmember 随机从该集合中取出n个值,不会从集合中删除

image.png

smove 将集合中的一个值移动到另外一个集合中

sinter 返回两个集合的交集元素

sunion 返回两个集合的并集元素

sdiff 返回两个集合的差集元素

数据结构

Set数据结构是dict字典,字典是用哈希表实现的。

Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它们的内部也使用hash结构,所有的value都指向同一个内部值