【Redis】数据类型:Set


4.redis集合(Set)

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着,集合中不能出现重复的数据。

Redis中Set集合,是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

集合中最大的成员数为2^32-1(4294967295,每个集合可存储40多亿个成员)

复制代码
======= 🌟 青柠来相伴,代码更简单。🌟 =======
📚 本文所有内容,我都整理在了 青柠合集 里。👇
🎯 搜索关注【青柠代码录】,即可查看所有合集文章 ~
======= 🌟 =================== 🌟 =======

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

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

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

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。

因为也是一个hash表,因此具备与HashSet类似的特征:

● 无序

● 元素不可重复

● 查找快

● 支持交集、并集、差集等功能

常见命令

复制代码
sadd <key><value1><value2> 将一个或多个member元素,加入到集合key中,已经存在的member元素将被忽略
smembers <key>		取出该集合的所有值。
sismember <key><value>		判断集合<key>是否为含有该<value>值,有1,没有0
scard<key>		返回该集合的元素个数。
srem <key><value1><value2> 		删除集合中的某个元素。
spop <key>		随机从该集合中吐出一个值。
srandmember <key><n>		随机从该集合中取出n个值。不会从集合中删除 。
smove <source><destination>value		把集合中一个值从一个集合移动到另一个集合

sinter <key1><key2>		返回两个集合的交集元素。
sunion <key1><key2>		返回两个集合的并集元素。
sdiff <key1><key2>		返回两个集合的差集元素(key1中的,不包含key2中的)

数据结构

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

Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。

Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。

单值多value,且无重复

集合对象的编码,可以是intset或者Hashtable。

Set的两种编码格式

  • intset

  • hashtable

Redis用intset或hashtable存储set。

如果元素都是整数类型,就用intset存储。

如果不是整数类型,就用hashtable(数组+链表的存来储结构)。key就是元素的值,value为null。

img

命令案例

1.SADD key member member ...

添加元素,可以多次向同一个key中,设置不同值,不会覆盖之前的值,因为已经存在的member元素将被忽略

2.SMEMBERS key

遍历集合中的所有元素

3.SISMEMBER key member

判断元素是否在集合中

img

4.SREM key member member ...

删除元素

img

5.scard

获取集合里面的元素个数

img

6.SRANDMEMBER key 数字

从集合中随机展现设置的数字个数元素,元素不删除

img

7.SPOP key 数字

从集合中随机弹出一个元素,出一个,删除一个

img

8. smove key1 key2

将key1里已存在的某个值,赋给key2,key1中就没有了。

img

9.集合运算-集合的差集运算,A-B

属于A,但是不属于B的元素,构成的集合

SDIFF key key ...,可以计算多个元素的差集

img

10.集合运算-集合的并集运算,A∪B

属于A,或者属于B的元素,构成的集合

SUNION key key ...

img

11.集合运算-集合的交集运算,A∩B

属于A,同时也属于B的共同拥有的元素,构成的集合

SINTER key key ...

img

12.SINTERCARD numkeys key 【key ...】【LIMIT limit】

返回由所有给定集合的交集,产生的集合的基数

numkeys 的具体值由输入的key个数决定

SINTERCARD 为redis7新命令,它不返回结果集,而是返回结果的基数。

基数的词语解释: 用于表示事物个数的数

img

img

相关推荐
我不会起名字3222 小时前
Redis 突然只能读不能写:MISCONF 报错的 3 类触发条件与 4 步恢复
运维·redis·持久化·排查·misconf
我不会起名字3223 小时前
Redis 从 0 到 1(九):主库宕机 30 秒自动切主——1 主 2 从 3 哨兵 + Go 客户端
redis·docker·sentinel·高可用·哨兵
毕业设计70310 小时前
(免费领源码)SSM董家湾线上点餐系统04682- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·redis·mysql·tomcat·maven·mybatis·ssm
用户0942485680311 小时前
第1章:Redis 术语全景与单线程工作原理
redis·快应用·源码阅读
hflmwl812 小时前
RedisDesktopManager安装包中文版官方下载,redis可视化客户端工具下载
数据库·redis·缓存·可视化客户端工具
用户849137175471613 小时前
订单超时未支付自动取消实现方案 | 三种方案详解
redis·面试·rabbitmq
easyboot13 小时前
Memurai Windows下的redis
redis
我不会起名字32214 小时前
Redis RDB 落盘时的 fork 停顿:COW 机制与 3 个降低影响的配置
redis·持久化·fork·cow·rdb
蓝胖的四次元口袋14 小时前
Redis 知识梳理(4)
数据库·redis
我不会起名字32215 小时前
Redis 从 0 到 1(十一):缓存穿透/击穿/雪崩三连击,Go 3 套防御代码
redis·缓存·go·布隆过滤器·雪崩