Redis Set集合详解(语法命令及实现应用)

Redis Set集合详解(语法命令及实现应用)-mikechen

Redis Set集合定义

Redis Set是存储String类型的无序集合,不存在重复的元素,最大存储数量2^32-1(40亿左右)。

 

Redis Set集合命令

Redis Set常用命令如下:

Redis Set常用命令

命令语法

添加值

sadd key values

查看值

smembers key

检查集合是否有值

sismember key value

查看set集合里面的元素个数

scard key

删除集合中的指定元素

srem key value

随机弹出某个元素

srandmember key

随机出栈

spop key

把key1中的某个值赋值给key2

smove SourceSet destSet membe

示例如下:

redis 127.0.0.1:6379> SADD name mikechen
(integer) 1
redis 127.0.0.1:6379> SADD name mikechen
(integer) 1
redis 127.0.0.1:6379> SADD name ada
(integer) 1
redis 127.0.0.1:6379> SADD name ada
(integer) 0
redis 127.0.0.1:6379> SMEMBERS name 
1) "mikechen"
2) "ada"

 

Redis Set集合实现

Redis 中集合底层使用了intset和hashtable两种数据结构存储的,intset我们可以理解为数组,hashtable就是普通的哈希表。

当满足如下两个条件的时候,采用整数集合实现:

  1. Set 集合中的所有元素都为整数;
  2. Set 集合中的元素个数不大于 512;

整数集合实现原理图:

Redis Set集合详解(语法命令及实现应用)-mikechen

一旦有一个条件不满足时则采用哈希表来实现,如下图所示:

Redis Set集合详解(语法命令及实现应用)-mikechen

 

Redis Set集合应用

Set 类型比较适合用来数据去重和保障数据的唯一性,还可以用来统计多个集合的交集、错集和并集等,当我们存储的数据是无序并且需要去重的情况下,比较适合使用集合类型进行存储。

比如:

  • 统计网站uv;
  • 统计共同好友;

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法