Redis之set类型

news/2024/9/22 20:35:11/

文章目录

  • 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.ppmy.cn/news/1124551.html

相关文章

个人博客系统测试报告(一)

作者:爱塔居 专栏:测试 目录 一、项目背景介绍 二、项目功能 三、测试计划 3.1自动化测试用例 3.2 性能测试 ​​​​​​​(未完) 一、项目背景介绍 个人博客系统前端由注册页、登录页、列表页、详情页、编辑页、个人博客列…

怎么将aac转换成mp3格式?

怎么将aac转换成mp3格式?AAC(它的全称为Advanced Audio Coding)是一种高级音频编码格式。它采用了数字音频压缩算法,旨在提供更高的音频质量和更低的比特率。AAC和Mp3一样都是一种有损压缩算法,通过移除人耳无法察觉的…

【Java】fastjson

Fastjson简介 Fastjson是阿里巴巴的团队开发的一款Java语言实现的JSON解析器和生成器,它具有简单易用、高性能、高可用性等优点,适用于Java开发中的数据解析和生成。Fastjson的主要特点包括: 简单易用:Fastjson提供了简单易用的…

ApiAdmin与ApiAdmin-WEB安装运行

环境配置见ApiAdmin前期环境搭建 一、ApiAdmin安装 phpstudy启动MySQL,Nginx,redis 新建数据库apiadmin,用户apiadmin,密码123456 项目运行时要在phpstudy中打开MySQL,Nginx,redis 1. 获取官方源代码 …

怎样提取视频中的音频?十秒教会你

怎么提取视频中的音频?我们平时在刷视频的时候会听到一些很好听的背景音乐,但有时候我们会发现有的背景音乐音源下载不了,而有的音频是别人自己制作的,根本没有地方可以下载音频,那么我们想要获得视频里的音频要怎么办…

windows下查看端口及占用端口的进程

1、使用命令查看端口,这里查看10000端口 netstat -aon|findstr "10000" 2、使用tasklist命令查看进程 tasklist|findstr "9640"

Hadoop分布式文件系统

一、Hadoop Hadoop之父Doug Cutting Hadoop的发音[hdu:p] ,Cutting儿子对玩具小象的昵称 1、Hadoop发展简史 2002年10月,Doug Cutting和Mike Cafarella创建了开源网页爬虫项目Nutch。2003年10月,Google发表Google File System论文。2004年…

vue3中使用element-plus Notification通知组件内容添加点击自定义事件

需求:点击element-plus Notification通知组件提示内容时,跳转到对应页面或执行某些逻辑。 const toTaskCenter () > {ElNotification.closeAll(); // 跳转前关闭通知router.push("/taskCenter/import"); };// 通过onClick属性绑定点击事…