【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(哈希表)

相关推荐
zzb15804 小时前
RAG from Scratch-优化-query
java·数据库·人工智能·后端·spring·mybatis
一只鹿鹿鹿5 小时前
信息安全等级保护安全建设防护解决方案(总体资料)
运维·开发语言·数据库·面试·职场和发展
堕2745 小时前
MySQL数据库《基础篇--数据库索引(2)》
数据库·mysql
wei_shuo5 小时前
数据库优化器进化论:金仓如何用智能下推把查询时间从秒级打到毫秒级
数据库·kingbase·金仓
雷工笔记5 小时前
Navicat Premium 17 软件安装记录
数据库
wenlonglanying6 小时前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
数据库小组6 小时前
10 分钟搞定!Docker 一键部署 NineData 社区版
数据库·docker·容器·database·数据库管理工具·ninedata·迁移工具
爬山算法6 小时前
MongoDB(38)如何使用聚合进行投影?
数据库·mongodb
l1t6 小时前
Deep Seek总结的APSW 和 SQLite 的关系
数据库·sqlite
Pocker_Spades_A7 小时前
基于代价模型的连接条件下推:复杂SQL查询的性能优化实践
数据库·sql·性能优化