【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

相关推荐
hexu_blog4 小时前
springAI alibaba 最新版本如何配置缓存会话记忆到redis
redis·缓存·springai配置redis
Devin~Y4 小时前
大厂Java面试实录:Spring Boot/Cloud、JVM、Redis、Kafka、MyBatis 到 RAG/Agent 的三轮连环问(含答案详解)
java·jvm·spring boot·redis·spring cloud·kafka·mybatis
jran-4 小时前
Redis NoSQL&Redis架构&数据结构
数据库·redis·缓存
lifewange15 小时前
Redis 集合(Set)运算完全指南
数据库·chrome·redis
phltxy19 小时前
Redis 主从复制
java·数据库·redis
shixiaoyu66620 小时前
Redis主从原理及哨兵搭建
redis
环流_20 小时前
redis:持久化rdb
java·数据库·redis
難釋懷21 小时前
Redis通信协议-基于Socket自定义Redis的客户端
数据库·redis·缓存
环流_21 小时前
redis:AOF
数据库·redis·spring