当前位置: 首页 > news >正文

Redis数据结构之Set

目录

    • 1.概述
    • 2.常见操作
      • 2.1 SADD
      • 2.2 SMEMBERS
      • 2.3 SISMEMBER
      • 2.4 SREM
      • 2.5 SCARD
      • 2.6 SRANDMEMBER
      • 2.7 SPOP
      • 2.8 SMOVE
      • 2.9 集合运算
    • 3.总结

1.概述

  • Set是String类型的无序集合,集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是intset或者hashtable。
  • Set是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
  • Set中最大的成员数为2³²-1 (4294967295,每个集合可存储40多亿个成员)。

在这里插入图片描述

2.常见操作

2.1 SADD

添加元素到set中,不能重复添加

127.0.0.1:6379> sadd set1 a b c d e f g
(integer) 7
127.0.0.1:6379> sadd set2 a a a b b b c c c
(integer) 3

2.2 SMEMBERS

查看set中所有元素

127.0.0.1:6379> SMEMBERS set1
1) "a"
2) "g"
3) "c"
4) "f"
5) "d"
6) "e"
7) "b"
127.0.0.1:6379> SMEMBERS set2
1) "a"
2) "c"
3) "b"

2.3 SISMEMBER

判断set中是否有某个元素

127.0.0.1:6379> SISMEMBER set2 a
(integer) 1
127.0.0.1:6379> SISMEMBER set2 d
(integer) 0

2.4 SREM

从set 中移除元素

127.0.0.1:6379> SMEMBERS set1
1) "a"
2) "g"
3) "c"
4) "f"
5) "d"
6) "e"
7) "b"
127.0.0.1:6379> srem set1 g
(integer) 1
127.0.0.1:6379> SMEMBERS set1
1) "a"
2) "c"
3) "f"
4) "d"
5) "e"
6) "b"

2.5 SCARD

set中元素个数

127.0.0.1:6379> SCARD set1
(integer) 6

2.6 SRANDMEMBER

从set中随机选择n个元素(不会删除)

SRANDMEMBER key n

例:

127.0.0.1:6379> SMEMBERS set1
1) "a"
2) "c"
3) "f"
4) "d"
5) "e"
6) "b"
127.0.0.1:6379> SRANDMEMBER set1 2
1) "f"
2) "e"
127.0.0.1:6379> SRANDMEMBER set1 2
1) "a"
2) "e"

2.7 SPOP

从set中随机弹出(删除)n个元素

SPOP key n

例:

127.0.0.1:6379> SMEMBERS set1
1) "a"
2) "c"
3) "f"
4) "d"
5) "e"
6) "b"
127.0.0.1:6379> SPOP set1 2
1) "c"
2) "a"
127.0.0.1:6379> SPOP set1 2
1) "b"
2) "f"
127.0.0.1:6379> SPOP set1 2
1) "d"
2) "e"
127.0.0.1:6379> SPOP set1 2
(empty list or set)

2.8 SMOVE

将set1中的v移动到set2中去

smove key key value

例:

127.0.0.1:6379> sadd set1 1 2 3
(integer) 3
127.0.0.1:6379> sadd set2 a b c
(integer) 3
127.0.0.1:6379> smove set1 set2 2
(integer) 1
127.0.0.1:6379> SMEMBERS  set1
1) "1"
2) "3"
127.0.0.1:6379> SMEMBERS  set2
1) "a"
2) "2"
3) "c"
4) "b"

2.9 集合运算

127.0.0.1:6379> smembers set3
1) "1"
2) "c"
3) "b"
4) "a"
5) "2"
6) "3"
127.0.0.1:6379> smembers set4
1) "c"
2) "b"
3) "2"
4) "5"
5) "4"
6) "d"
7) "3"

1.差集运算

set3-set4:set3有set4没有

127.0.0.1:6379> sdiff  
1) "a"
2) "1"

2.并集运算

语法

sunion key key [key ......]  

例:

127.0.0.1:6379> sunion set3 set4
1) "c"
2) "4"
3) "5"
4) "1"
5) "3"
6) "b"
7) "a"
8) "2"
9) "d"

3.交集运算

sinter,同时属于几个集合的公共部分

sinter key key [key ...]  

例:

127.0.0.1:6379> sinter set3 set4
1) "c"
2) "b"
3) "2"
4) "3"

SINTERCARD,redis7新命令,不返回结果集,只返回结果的基数,返回由所有给定集合的交集产生的集合的基数

SINTERCARD numkeys key [key ...] [LIMIT limit]

例:2个集合,set3和set4,交集中共有4个元素,可以限制返回的个数,但是不能超过元素的总个数

127.0.0.1:6379> SINTERCARD  2 set3 set4
(integer) 4
127.0.0.1:6379> SINTERCARD  2 set3 set4 limit 1
(integer) 1
127.0.0.1:6379> SINTERCARD  2 set3 set4 limit 2
(integer) 2
127.0.0.1:6379> SINTERCARD  2 set3 set4 limit 3
(integer) 3
127.0.0.1:6379> SINTERCARD  2 set3 set4 limit 4
(integer) 4
127.0.0.1:6379> SINTERCARD  2 set3 set4 limit 5
(integer) 4

3.总结

Set集合的使用场景很多,例如:

  1. 可能认识的人或共同感兴趣的话题,商品
    sdiff a b
    sdiff b a

  2. 年会抽奖活动
    sadd 活动key 用户ID:参与抽奖
    scard 活动key:统计参加总人数
    SRANDMEMBER 活动key n:抽取n个幸运的人,这几个人还能继续抽奖
    spop 活动key n:抽取n个幸运的人,这几个人不能继续抽奖

http://www.dtcms.com/a/112737.html

相关文章:

  • jp(1) command
  • FreeRTOS任务创建和删除(动态)
  • 如何在 Windows 10 上安装 PyGame
  • 将电脑控制手机编写为MCP server
  • UE5学习笔记 FPS游戏制作39 制作一个带有背景的预制面板 使用overlay和nameSlot
  • 解决上传PDF、视频、音频等格式文件到FTP站点时报错“将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上”问题
  • Vue 3 的响应式原理
  • Qt UI框架和Duilib UI框架差别
  • 文档的预解析
  • JavaWeb 课堂笔记 —— 02 JavaScript
  • 机器视觉开发工程师常用C#运算符与使用方法大总结
  • 网络安全防御核心原则与实践指南
  • php7.4.3连接MSsql server方法
  • 方差分析_单因素、多因素、析因方差分析
  • 【首款ARMv9开源芯片“星睿“O6测评】在“周易”NPU上部署Yolov8l模型并实现实时目标检测
  • 场馆预定系统小程序PHP+uniapp
  • 讲述我的PLC自学之路 第六章
  • Harmony OS“一多” 详解:基于窗口变化的断点自适应实现
  • 类的基本概念
  • 深入剖析丝杆升降机工作原理,解锁工业传动奥秘
  • 【C++】C++11<包装器没写>
  • 动态规划1——斐波那契数列模型——第 N 个泰波那契数
  • 算法题(117):字符串的展开
  • 16.2Linux自带的LED灯驱动实验(详细编写)_csdn
  • OJ系统C端UI自动化测试
  • Kubernetes 集群搭建(一):从环境准备到 Calico 网络插件部署
  • 自定义填充 cad
  • SpringCloudGateWay
  • spring security 过滤器链相关初始化过程
  • 使用 Elastic 实现端到端的大语言模型(LLM)可观测性:洞察生成式 AI 应用这个不透明的世界