redis常用数据类型操作三 集合(Set)


redis集合(Set)

简介

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

redis 的set 是string 类型的 无序集合它的底层其实是一个value为null的hash表 所以 添加、删除的复杂度都是O(1)

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

常用命令

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

smembers 取出该集合的所有值

sismember 判断集合 是否为含有该value值,有1,没有0

scard 返回该集合元素的个数

srem 删除集合中的某个元素

spop 随机从集合中吐出一个值

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

smove 把集合中的值从一个集合移到另一个集合

sinter 返回两个集合交集元素

sunion 返回两个集合并集元素

sdiff 返回两个结合差集元素(key1 中的不包含k2中的)

数据结构

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

c#中的hashset的内部实现使用的是hashmap,只不过所有的value都指向同一个对象。redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。