【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

相关推荐
IT大白鼠3 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
lbb 小魔仙3 天前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
夕除3 天前
redis--018
redis
两锭子3 天前
Redis基础
redis
烟沙九洲3 天前
Redis 缓存穿透、缓存击穿、缓存雪崩
数据库·redis
字节探索3 天前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
于樱花森上飞舞3 天前
【Redis】哨兵详解
java·开发语言·数据库·redis
Rain的Java大神之路3 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog3 天前
Java 接入Redis: 通用命令与键管理
java·服务器·redis