【redis】set 类型:基本命令

文章目录

基本概念

谈到一个属于,这个术语可能有多种含义,set

  1. 集合
  2. 设置(和 get 相对应)

集合就是把一些有关联的数据放到一起

  1. 集合中的元素是无序的(和前面 list 的有序是对应的)

    • 有序:顺序很重要,变化一下顺序,就是不同的 list
    • 无序:顺序不重要,变化一下顺序,集合还是那个集合
  2. 集合中的元素是不能重复的(唯一的)

list 类似,集合中的每个元素,也都是 string 类型(可以使用 JSON 这样的格式让 string 也能存储结构化数据)

SADD 和 SMEMBERS

  • 将一个或者多个元素添加到 set 中,重复的元素无法添加到 set
  • 获取一个 set 中的所有元素,元素之间的顺序是无序的!!!

语法:

redis 复制代码
SADD key member [member ...]

SMEMBERS key
  • SADD 返回值:所有元素的列表
  • MEMBERS 返回值:1 表示元素在 set 中。0 比哦啊是元素不在 set 中或者 key 不存在

SCARD

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


语法:

redis 复制代码
SCARD key
  • 返回值:set 中元素的个数

SPOP

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


语法:

redis 复制代码
SPOP key [count]
  • 返回值:取出的元素

Redis 源码中,针对 spop 实现的时候,就采取了"生成随机数"的方式

SRANDMEMBER

随机返回元素, 一个或多个


语法:

redis 复制代码
SRANDMEMBER key
  • 返回随机到的元素

SMOVE

将元素从源 set 取出并放入目标 set


语法:

redis 复制代码
SMOVE source destination member
  • 1 表示移动成功,0 表示失败

SREM

将制定的元素从 set 中删除


语法:

redis 复制代码
SREM key member [member ...]
  • 返回值:本次操作删除的元素个数

集合间操作

交集(inter)、并集(union)、差集(diff

  • 交集:最终结果同时出现在两个集合中
  • 并集:把多个集合中的数据都集中放在一起,如果有元素重复,也最终只保留一份
  • AB 做差集,就是找出哪些元素,在 A 中存在,同时再 B 中不存在

SINTER

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


语法:

redis 复制代码
SINTER key [key ...]
  • 返回值:交集的元素

SINTERSTORE

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


语法:

redis 复制代码
SINTERSTORE destination key [key ...]
  • 返回值:交集的元素个数

SUNION

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


语法:

redis 复制代码
SUNION key [key ...]
  • 返回值:并集的元素

SUNIONSTORE

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


语法:

redis 复制代码
SUNIONSTORE destination key [key ...]
  • 返回值:并集的元素个数

SDIFF

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


语法:

redis 复制代码
SDIFF key [key ...]
  • 返回值:差集的元素

SDIFFSTORE

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


语法:

redis 复制代码
SDIFFSTORE destination key [key ...]
  • 返回值:差集的元素个数

命令小结

内部编码

intset(整数集合)

  • 为了节省空间,做出的特定优化。当元素均为整数,并且元素个数不是很多的时候

  • hashtable(哈希表)

相关推荐
TT哇1 小时前
【Java EE初阶】计算机是如何⼯作的
java·redis·java-ee
工一木子4 小时前
URL时间戳参数深度解析:缓存破坏与前端优化的前世今生
前端·缓存
陌殇殇4 小时前
SpringBoot整合SpringCache缓存
spring boot·redis·缓存
晋阳十二夜5 小时前
【压力测试之_Jmeter链接Oracle数据库链接】
数据库·oracle·压力测试
GDAL7 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
DCTANT8 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
AI、少年郎10 小时前
Oracle 进阶语法实战:从多维分析到数据清洗的深度应用(第四课)
数据库·oracle
赤橙红的黄10 小时前
自定义线程池-实现任务0丢失的处理策略
数据库·spring
DataGear11 小时前
如何在DataGear 5.4.1 中快速制作SQL服务端分页的数据表格看板
javascript·数据库·sql·信息可视化·数据分析·echarts·数据可视化
weixin_4383354011 小时前
分布式锁实现方式:基于Redis的分布式锁实现(Spring Boot + Redis)
数据库·redis·分布式