Redis之set类型

news2024/11/25 4:21:42

文章目录

  • Redis之set类型
  • 1. 添加元素/获取集合中的所有元素/获取集合中元素个数
  • 2. 删除元素
  • 3. 判断元素是否在集合中
  • 3. 从集合中随机弹出一个元素,元素不删除
  • 4. 从集合中随机弹出元素,出一个删一个
  • 5. 将元素从一个集合转移到另外一个集合
  • 6. 集合的差集
  • 7. 集合的交集
  • 8. 集合的并集
  • 9. 应用场景
    • 9.1 微信抽奖小程序
    • 9.2 微信朋友圈点赞
    • 9.3 微博好友关注社交关系
    • 9.4 QQ内推可能认识的人

Redis之set类型

在这里插入图片描述

1. 添加元素/获取集合中的所有元素/获取集合中元素个数

添加元素:SADD key member [member …]
获取集合中的所有元素:SMEMBERS key
获取集合中元素个数:SCARD key

127.0.0.1:6379> sadd s1 a b c d e a b
(integer) 5
127.0.0.1:6379> scard s1
(integer) 5
127.0.0.1:6379> smembers s1
1) "c"
2) "b"
3) "a"
4) "e"
5) "d"

set是无序的,不重复的。

2. 删除元素

SREM key member [member …]

127.0.0.1:6379> smembers s1
1) "c"
2) "b"
3) "a"
4) "e"
5) "d"
127.0.0.1:6379> srem s1 a
(integer) 1
127.0.0.1:6379> smembers s1
1) "b"
2) "c"
3) "e"
4) "d"
127.0.0.1:6379> srem s1 b c
(integer) 2
127.0.0.1:6379> smembers s1
1) "e"
2) "d"

3. 判断元素是否在集合中

SISMEMBER key member
存在返回1,不存在返回0

127.0.0.1:6379> smembers s1
1) "e"
2) "d"
127.0.0.1:6379> sismember s1 a
(integer) 0
127.0.0.1:6379> sismember s1 e
(integer) 1
127.0.0.1:6379> sismember s1 d
(integer) 1
127.0.0.1:6379> sismember s1 c
(integer) 0

3. 从集合中随机弹出一个元素,元素不删除

SRANDMEMBER key [数字]

127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> smembers s1
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"
127.0.0.1:6379> srandmember s1 1
1) "b"
127.0.0.1:6379> srandmember s1 2
1) "b"
2) "d"
127.0.0.1:6379> srandmember s1 3
1) "a"
2) "e"
3) "d"
127.0.0.1:6379> srandmember s1 3
1) "a"
2) "e"
3) "d"
127.0.0.1:6379> srandmember s1 4
1) "a"
2) "c"
3) "b"
4) "d"
127.0.0.1:6379> smembers s1
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"

4. 从集合中随机弹出元素,出一个删一个

SPOP key

127.0.0.1:6379> smembers s1
1) "a"
2) "c"
3) "b"
4) "e"
5) "d"
127.0.0.1:6379> spop s1
"a"
127.0.0.1:6379> smembers s1
1) "c"
2) "b"
3) "e"
4) "d"
127.0.0.1:6379> spop s1
"d"
127.0.0.1:6379> smembers s1
1) "c"
2) "b"
3) "e"

5. 将元素从一个集合转移到另外一个集合

SMOVE sourceKey destKey member

127.0.0.1:6379> smembers s1
1) "c"
2) "b"
3) "e"
127.0.0.1:6379> sadd s1 a f
(integer) 2
127.0.0.1:6379> smembers s1
1) "a"
2) "f"
3) "c"
4) "b"
5) "e"
127.0.0.1:6379> smove s1 s2 a
(integer) 1
127.0.0.1:6379> smembers s1
1) "f"
2) "c"
3) "b"
4) "e"
127.0.0.1:6379> smembers s2
1) "a"
127.0.0.1:6379> smove s1 s2 e
(integer) 1
127.0.0.1:6379> smembers s1
1) "f"
2) "c"
3) "b"
127.0.0.1:6379> smembers s2
1) "a"
2) "e"

6. 集合的差集

SDIFF key [key …]

127.0.0.1:6379> del s1
(integer) 1
127.0.0.1:6379> del s2
(integer) 1
127.0.0.1:6379> sadd s1 a b c d
(integer) 4
127.0.0.1:6379> sadd s2 c d e f
(integer) 4
127.0.0.1:6379> sdiff s1 s2
1) "a"
2) "b"
127.0.0.1:6379> sdiff s2 s1
1) "f"
2) "e"
127.0.0.1:6379> sdiffstore s3 s1 s2
(integer) 2
127.0.0.1:6379> smembers s3
1) "a"
2) "b"
127.0.0.1:6379> smembers s1
1) "a"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> smembers s2
1) "f"
2) "d"
3) "e"
4) "c"
127.0.0.1:6379> sdiffstore s4 s2 s1
(integer) 2
127.0.0.1:6379> smembers s4
1) "f"
2) "e"

7. 集合的交集

SINTER key [key …]

127.0.0.1:6379> del s1
(integer) 1
127.0.0.1:6379> del s2
(integer) 1
127.0.0.1:6379> sadd s1 a b c d
(integer) 4
127.0.0.1:6379> sadd s2 c d e f
(integer) 4
127.0.0.1:6379> sinter s1 s2
1) "d"
2) "c"
127.0.0.1:6379> sinter s2 s1
1) "d"
2) "c"
127.0.0.1:6379> sinterstore s3 s1 s2
(integer) 2
127.0.0.1:6379> smembers s3
1) "d"
2) "c"
127.0.0.1:6379> smembers s1
1) "a"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> smembers s2
1) "f"
2) "d"
3) "e"
4) "c"

8. 集合的并集

SUNION key [key …]

127.0.0.1:6379> del s1
(integer) 1
127.0.0.1:6379> del s2
(integer) 1
127.0.0.1:6379> sadd s1 a b c d
(integer) 4
127.0.0.1:6379> sadd s2 c d e f
(integer) 4
127.0.0.1:6379> sunion s1 s2
1) "a"
2) "f"
3) "c"
4) "b"
5) "e"
6) "d"
127.0.0.1:6379> sunion s2 s1
1) "a"
2) "f"
3) "b"
4) "e"
5) "c"
6) "d"
127.0.0.1:6379> sunionstore s3 s1 s2
(integer) 6
127.0.0.1:6379> smembers s3
1) "a"
2) "f"
3) "c"
4) "b"
5) "e"
6) "d"
127.0.0.1:6379> smembers s1
1) "a"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> smembers s2
1) "f"
2) "d"
3) "e"
4) "c"

9. 应用场景

9.1 微信抽奖小程序

添加抽奖用户:sadd users 抽奖用户id
显示参与用户个数:scard users
显示中奖用户:srandmember user 中奖用户个数,这个不会删除参与抽奖的用户,只是每次从里面随机取要的个数;spop users会删除当前随机选择的用户。

127.0.0.1:6379> sadd users 1001 1002 1003 1004 1005
(integer) 5
127.0.0.1:6379> scard users
(integer) 5
127.0.0.1:6379> srandmember users 2
1) "1004"
2) "1005"
127.0.0.1:6379> srandmember users 2
1) "1001"
2) "1004"
127.0.0.1:6379> spop users
"1002"
127.0.0.1:6379> spop users
"1001"

9.2 微信朋友圈点赞

新增点赞:sadd pub:msgID 点赞用户ID1 点赞用户ID2
取消点赞:srem pub:msgID 点赞用户ID
展现所有点赞过的用户:smembers pub:msgID
点赞用户数统计:scard pub:msgID
判断某个朋友是否对当前用户点赞过:sismember pub:msgID 用户ID

127.0.0.1:6379> sadd pub:msgID 1001 1002 1003 1004
(integer) 4
127.0.0.1:6379> srem pub:msgID 1002
(integer) 1
127.0.0.1:6379> smembers pub:msgID
1) "1001"
2) "1003"
3) "1004"
127.0.0.1:6379> scard pub:msgID
(integer) 3
127.0.0.1:6379> sismember pub:msgID 1002
(integer) 0
127.0.0.1:6379> sismember pub:msgID 1001
(integer) 1

9.3 微博好友关注社交关系

  • 共同关注的人(集合交集)
127.0.0.1:6379> sadd user1 1001 1002 1003 1004
(integer) 4
127.0.0.1:6379> sadd user2 1002 1004 1005 1006
(integer) 4
127.0.0.1:6379> sinter user1 user2
1) "1002"
2) "1004"

9.4 QQ内推可能认识的人

user1001 有QQ好友userId为 1002 1003 1004 1005
user1002 有QQ好友userId 为 1001 1004 1005 1006
user1001和user1002互为好友,那么给user1001推荐肯认识的人,就是user1001-user1002的差集且还不包含user1002

127.0.0.1:6379> sadd user1 1001 1002 1003 1004
(integer) 4
127.0.0.1:6379> sadd user2 1002 1004 1005 1006
(integer) 4
127.0.0.1:6379> sinter user1 user2
1) "1002"
2) "1004"
127.0.0.1:6379> sadd user1001 1002 1003 1004 1005
(integer) 4
127.0.0.1:6379> sadd user1002 1001 1004 1005 1006
(integer) 4
127.0.0.1:6379> sismember user1001 1002
(integer) 1
127.0.0.1:6379> sismember user1002 1001
(integer) 1
127.0.0.1:6379> sdiff user1001 user1002
1) "1002"
2) "1003"
127.0.0.1:6379> sdiffstore cj user1001 user1002
(integer) 2
127.0.0.1:6379> smembers cj
1) "1002"
2) "1003"
127.0.0.1:6379> srem cj 1002
(integer) 1
127.0.0.1:6379> smembers cj
1) "1003"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1040646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

周记之重新开始

对于这周的学习,我进行了深刻的反思: 先来说说每天做了什么: 9.18号:把这个顶部的个人信息画出来了;然后记了两个单词(这是能说的吗,这两个单词还是之前复习的)现在都记忆犹新&…

31.下一个排列

方法:两遍扫描 举例: 4 5 2 6 3 1排列中较小数为2,较大数为3,交换两者得:4 5 3 6 2 1,将[i1,n)区间改成升序:得下一个排列: 4 5 3 1 2 6。 若第一步找不到较小数,即当前排…

基础算法--区间合并

区间合并简介 区间合并模型是一种竞赛里比较常见的模型,他的含义是,给你n个区间,要你合并所有有交集的区间,并求出合并后剩下的区间个数,如区间[1, 4]和[2, 3]可以合并成[1, 4],但是[1, 2] 和 [3, 4] 不可…

SLAM从入门到精通(rviz的使用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在ros开发当中,rviz和tf都是用的比较多的一个工具。前者是为了实现传感器数据和计算结果的可视化,后者主要是为了显示各个传…

深度学习中什么是embedding

使用One-hot 方法编码的向量会很高维也很稀疏。假设我们在做自然语言处理(NLP)中遇到了一个包含2000个词的字典,当使用One-hot编码时,每一个词会被一个包含2000个整数的向量来表示,其中1999个数字是0,如果字典再大一点&#xff0c…

华为云云耀云服务器L实例评测|华为云上安装etcd

文章目录 华为云云耀云服务器L实例评测|华为云上安装etcd一、什么是etcd官方硬件建议 二、华为云主机准备三、etcd安装1. 安装预构建的二进制文件2. 从源代码构建 四、etcd服务注册与发现1. 配置etcd2. 使用systemctl 管理启动etcd服务3. 注册服务4. 发现服务 五、其…

python+opencv神经网络风格迁移--你也可以拥有梵高一样的画作

梵高画作 什么是神经网络的风格迁移,简单来件就是输入1张照片(自己的照片),输出具备另外一张照片(例子梵高画作)风格的图片,同时保留原本自己图片的元素,如下图片表明了神经网络风格迁移的过程,当然你也可以使用自己的神经网络训练自己的模型,本期教程利用了已经训练…

macOS使用官方安装包安装python

新手程序员可能想知道如何在 Mac 上正确安装 Python,这里介绍在 macOS 上安装 Python 的方法。 操作步骤 1.从 Python 官方网站 (python.org) 下载最新的 Python 版本. 单击 macOS 链接并选择最新的 Python 版本。 2.下载完成后,双击包开始安装Python…

使用 Ruby 语言来解析开放文档格式 OOXML 文件

在这篇文章中,我们将了解一个开发团队如何解决他们在应用程序中解析数据时遇到的问题。 为了测试 ONLYOFFICE 文档编辑器,我们用Ruby语言开发编写了个docx、xlsx、pptx文件解析器程序,它是免费开源的,被我们放在GitHub和RubyGems…

python运算函数

简 python输入输出函数input() :用户用于读取键盘输入的函数,返回值为“string”类型 运算函数abs(x) :x的绝对值int(x) :将x转换成整型(截掉小数部分)float(x):浮点数divmod(x,y):返回(x//y,x%y)complex(re,im):返回一…

A股风格因子看板 (2023.09 第08期)

要点预告:10月,天软课堂将添加新主题--天软超高频行情数据。针对市场上高频行情数据处理业务的相关痛点,直观的在线演示如何通过天软高频数仓及高性能计算能力,将其逐个击破,期待各位老师的参会。请持续关注天软课堂动态&#xff…

企业架构LNMP学习笔记60

Tomcat企业常见使用方法&#xff1b; 1&#xff09;简单代码测试&#xff1a; 将两个jsp文件上传到ROOT目录下。 查看下这个jsp代码&#xff1a; test.jsp <html> <head><title>Hello World</title> <% page language"java" contentT…

短视频矩阵系统,短视频矩阵源码技术

1、抖音开放平台申请账号&#xff0c;快手平台申请账号&#xff1b;阿里云混剪接口。 2、系统总台支持OEM代理&#xff0c;可以按点数管理。 3、代理功能。包括是否允许再次开二级代理、是否允许OEM等。 4、可支持一条龙搭建服务&#xff0c;抖音平台开放平台代申请等 开发…

《学术小白学习之路》论文常见方法:Doc2vec-句向量模型实现

1. 数据 用于文献的摘要的相似度的计算 ## 导包 import pandas as pd import jieba import gensim from gensim.models import Doc2Vec from gensim.models.doc2vec import TaggedDocument再定义停用词典,用于分词,还可以自己定义一个分词词典 ## 读入数据 papers = pd.&l…

JVS规则引擎,打造智能自动化决策的利器

在日常的项目中&#xff0c;实时数据处理和自动化决策是智能化业务、灵活化配置的关键能力。为了满足这一需求&#xff0c;JVS规则引擎应运而生&#xff0c;它是一种高效的低代码/零代码平台&#xff0c;能够帮助企业快速构建各种应用场景&#xff0c;实现自动化、智能化决策的…

iOS 17隐私设置指南

最近把手机升级到iOS 17了&#xff0c;升级后的设置里多了很多以前没注意到的指南&#xff0c;我发现特别是有关隐私相关配置的很多我没有启用。 那么&#xff0c;我就来扒一扒iOS中和隐私相关的配置&#xff0c;这些配置可能是iOS 17以后加入的&#xff0c;也可能是以前就有&a…

spring一个项目多个模块聚合打包问题解决方案

文章目录 1.问题描述&#xff1a;2.解决方案一、创建聚合父工程二、创建子模块&#xff08;module&#xff09;三、编写子模块代码1.模块1&#xff08;demo-one&#xff09;2.模块2&#xff08;demo-tow&#xff09; 四、创建聚合模块 &#xff08;demo-starter&#xff09;1. …

Servlet开发-通过代码案例熟悉HttpServletRequest类

关于Servlet开发的流程推荐看servlet开发-通过Tomcat部署一个简单的webapp Servlet开发与idea集成的插件安装推荐看idea集成tomcat&#xff08;Smart Tomcate插件安装&#xff09; postman&#xff08;第三方创建HTTP请求工具&#xff09;的安装推荐看创建HTTP请求的几种方式…

AcWing算法提高课-4.3.1最大数

宣传一下 算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 给定一个正整数数列 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1​,a2​,…,an​&#xff0c;每一个数都在 0 ∼ p − 1 0 \sim p-1 0∼p−1 之间。 可以对这列数进行两种操作&#xff1…