Redis---set类型
SET的特点1.集合中的元素时无序的也就是说顺序是不重要的举个例子1 2 3与1 3 2是一样的没有任何区别的反之有序就是有区别的2.集合中的元素是不能重复的3.和list一样value中的每个类型都是string类型可以使用json/protobuf让其也可以存储结构化数据SADD将其一个或多个元素添加到set中操作格式sadd key member [member...]返回值本次添加成功的元素个数时间复杂度O(1)举个例子sadd key1 1 2 3 4SMEMBERS查看当前集合中存在多少个元素操作格式smembers key时间复杂度O(N)N指的是集合中元素个数SISMEMBER判定某一个元素是否在集合中操作格式sismember key member返回值1表示存在0表示不存在时间复杂度O(1)举个例子sismember key1 3SPOP从set中删除并返回一个或多个元素。由于set内的元素是无序的所以取出哪个元素实际是未定义行为可以看作是随机的操作格式spop key [count]返回值删除的值时间复杂度O(1)举个例子spop key 3随机的本质其实是在源码中针对spop实现的时候采取了生成随机数的方式SRANDMEMBER随机返回一个或多个集合中的成员操作格式srandmember key [count]返回值拿到的值时间复杂度O(1)SMOVE将一个元素从源set中取出并放入目标set中操作格式smove source destination member返回值1表示成功0表示失败时间复杂度O(1)举个例子smove key1 key2 3如果key1中存在两个1分别先后两次将key1中的1向key2会怎么样两次均会成功也就是key1中的1会全部消失但是key2中也只会存在一个1因为set中的值是不可以重复的SREM将指定值从set中删除操作格式srem key member [member...]返回值成功删除元素的个数时间复杂度O(1)集合间操作求交集并集差集差集前者集合与后者集合相差的元素举个例子A1 2 3 4B3 4 5 6A与B的差集1 2B与A的差集5 6SINTER获取给定set的交集中的元素操作格式sinter key [key...]返回值交集的元素时间复杂度O(N*M)N是最小元素的个数M是最大元素的个数举个例子//求key1和key2的交集 sinter key1 key2SINTERSTORE获取给定set的交集中的元素并保存到目标set中操作格式sinterstore destination key [key...]返回值交集元素的个数时间复杂度O(N * M)举个例子sinterstore key3 key1 key2SUNION获取set中的并集操作操作格式sunion key [key...]返回值并集的元素时间复杂度O(N)N是所有集合的元素个数举个例子sunion key1 key2SUNIONSTORE destination key [key...]把并集的结果储存进destination中destination是目标集合返回值并集的元素个数时间复杂度O(N)N是所有集合的元素个数sunionstore key3 key1 key2SDIFF获取给定set的差集中的元素操作格式sdiff key [key...]返回值差集的元素并集的元素时间复杂度O(N)N是所有集合的元素个数举个例子sdiff key1 key2SDIFFSTORE将差集的元素保存到目标集合当中返回值返回值就是差集元素的个数并集的元素时间复杂度O(N)N是所有集合的元素个数举个例子sdiffstore key3 key1 ky2SET内部编码集合类型的内部编码有两种intset整数集合当集合中的元素都是整数并且元素个数小于set-max-inset-entries配置默认是512个redis会选用intset来作为集合内部的实现从而减少内存的使用hashtable哈希表当集合类型无法满足intset的条件时redis会使用hashtable作为集合的实现