【Redis】set数据类型相关指令

目录

set简单介绍

集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中元素之间是无序的(顺序不重要,元素交换一下顺序,元素还是那个元素),元素不允许重复。一个集合中最多可以存储 2^32 - 1 个元素。Redis 除了支持集合内的增删查改操作,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多问题。

sadd

将一个或者多个元素添加到 set 中。注意,重复的元素无法添加到 set 中。

该指令返回成功添加了几个元素。如果 key 不存在,则会创建一个。可以看到,元素是无序的,并不按照插入顺序排列。

smembers

获取一个 set 中的所有元素,注意,元素间的顺序是无序的。

sismember

判断一个元素在不在 set 中。

scard

获取一个 set 的基数(cardinality),即 set 中的元素个数。

spop

从 set 中删除并返回一个或者多个元素。注意,由于 set 内的元素是无序的,所以取出哪个元素实际是未定义行为,即可以看作随机的。

可以看到两轮 spop 的结果不一样,所以这玩意是真随机,不是说因为 set 是无序的,所以底层不按顺序放的,因而你 pop 出来的一直都是这个底层不按顺序的顺序。他这个真是一个 random 算法随机出来的,所以是真随机(真的伪随机哈哈)。

srandmember

会从集合中返回一个或多个随机元素,但不会移除这些元素。

smove

将一个元素从源 set 取出并放入目标 set 中。

返回 1 表示成功,返回 0 表示失败。如果转移目标有这个元素,因为 set 的特性,目标不会有变化,但是被转移者确实会少了这个元素。如果被转移者没有要转移的元素,会失败。

srem

将指定的元素从 set 中删除。

sinter

获取给定 set 的交集中的元素。

sinterstore

获取给定 set 的交集中的元素并保存到目标 set 中。

如果是不存在的键会自动创建。

sunion

获取给定 set 的并集中的元素。

sunionstore

获取给定 set 的并集中的元素并保存到目标 set 中。

sdiff

获取给定 set 的差集中的元素。

注意前后顺序不一样会有差别,都是前面减后面的。

sdiffstore

获取给定 set 的差集中的元素并保存到目标 set 中。

编码方式

集合类型的内部编码有两种:

intset(整数集合):当集合中的元素都是整数并且元素的个数小于 set-max-intset-entries 配置(默认 512 个)时,Redis 会选用 intset 来作为集合的内部实现,从而减少内存的使用。intset相对低效,但是元素少就还好。

hashtable(哈希表):当集合类型无法满足 intset 的条件时,Redis 会使用 hashtable 作为集合的内部实现。

使用场景

集合类型最典型的应用场景是标签管理,在各类互联网产品中,可将用户的兴趣偏好(如娱乐、体育、历史、新闻等)抽象为标签,通过集合相关命令对用户与标签的关联关系进行全生命周期管理。具体来说,既可以为不同用户添加对应的兴趣标签,也能反向为每个标签关联对应的用户群体,同时支持灵活删除指定用户下的特定标签,或是从某一标签下移除对应的用户;此外,借助集合的交集运算功能,还能精准计算出不同用户之间的共同兴趣标签,这些基于标签的数据分析结果,能为电子商务网站等平台的个性化产品推荐、提升用户体验和增强用户黏度提供核心的数据支撑。

相关推荐
小猿姐37 分钟前
Redis Kubernetes Operator 实测:三个方案的真实差距
redis·容器·kubernetes
zxrhhm1 小时前
Oracle 索引完整指南
数据库·oracle
程序猿乐锅2 小时前
【Tilas|第三篇】多表SQL语句
数据库·经验分享·笔记·学习·mysql
Navicat中国3 小时前
使用 Navicat 导入向导导入 Excel 数据时,系统提示导入成功,表中也能看到数据,但行数统计显示为 0,这是什么原因?
数据库·excel·导入
gmaajt3 小时前
Golang怎么做国际化多语言_Golang i18n教程【核心】
jvm·数据库·python
折哥的程序人生 · 物流技术专研3 小时前
从“卡死”到“秒过”:WMS销售数据跨库回填的极限优化之旅
数据库·机器学习·oracle
李可以量化3 小时前
DeepSeek 量化交易实战:用标准化提示词模板实现 AI 辅助交易决策
大数据·数据库·人工智能
maqr_1103 小时前
CSS如何利用Sass定义全局阴影方案_通过变量实现统一CSS风格
jvm·数据库·python
m0_613856293 小时前
uni-app怎么做类似于美团的商家评价星级 uni-app五星评分组件制作【实战】
jvm·数据库·python
Irene19914 小时前
大数据开发语境下,SQL 模式名,映射关系 - - 概念理解
大数据·数据库·sql