Redis 中 Set 数据结构详解

用法

Redis 中的 Set 是一个无序,不重复集合(里面的元素为字符串),支持常用的集合操作。

常见命令

1. 增

添加一个或多个元素到 set 中

SADD key member [ member ... ]
返回值: 添加成功的元素个数

将一个元素移到另一个 set 中 

SMOVE source destination member
source(原来的 set),destination(移动到的 set),member (要移动的元素)
返回值: 1 --- 成功,0 --- 失败

2. 删

删除指定的元素

SREM key member [member ...]
返回值: 本次操作删除的元素个数。

随机删除元素

SPOP key [count](count表示要删除的个数)

返回值:返回删除的元素

3. 查

获取元素的个数

SCARD key

获取 set 中所有的元素

SMEMBERS key
返回值: 所有元素的列表。

判断当前的元素是否在集合中 

SISMEMBER key member(你想要判断的成员)

返回值: 1 ---  存在,  0 --- 该元素不存在 / key不存在 

4. 交集,并集,差集 

获取 set 的交集中的元素 

SINTER key [key ...]
返回值: 交集的元素。
SINTERSTORE destination key [key ...](把算好的交集放到指定的 destination 中)
返回值: 交集的元素个数

 获取 set 的并集中的元素

SUNION key [key ...] 

返回值:并集的元素。

SUNIONSTORE destination key [key ...](把算好的并集放到指定的 destination 中)
返回值: 并集 的元素个数

 获取 set 的差集中的元素 

SDIFF key [key ...]
返回值: 差集的元素。
SDIFFSTORE destination key [key ...](把算好的差集放到指定的 destination 中)
返回值: 差集元素的个数

内部编码

intset:当集合中的元素都是整数且数量较少时,Redis 使用 intset 结构。intset 是一个紧凑的整数数组,节省内存。

hashtable:当集合中的元素数量较多或类型多样时,Redis 会使用 hashtable 编码。hashtable 提供了快速的查找性能。


应用场景

标签系统:可以使用 Set 存储用户的标签,如兴趣爱好。通过集合运算,可以轻松实现标签交集、并集和差集的计算。

1. 给用户添加标签

sadd user:1:tags tag1 tag2 tag5
sadd user:2:tags tag2 tag3 tag5

2. 给标签添加用户

sadd tag1:users user:1 user:3
sadd tag2:users user:1 user:2 user:3

3. 删除用户下的标签

srem user:1:tags tag1 tag5

4. 删除标签下的用户

srem tag1:users user:1
srem tag5:users user:1

5. 计算用户的共同兴趣爱好

sinter user:1:tags user:2:tags

唯一性检测:利用 Set 的无序且不重复特性,可以快速检测出数据集中的重复元素。

社交网络:在社交网络应用中,可以使用 Set 存储用户的好友列表或关注列表,并通过集合操作实现好友推荐等功能

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

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

相关文章

数据结构(1):线性表

1 线性表的顺序实现 创建的新项目是cpp类型哦&#xff01; 1.1 初始化 1.1.1 静态分配 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #define MaxSize 10 //定义顺序表的长度 typedef struct {int data[MaxSize];//用静态的数组存放元素&#xff01;int lengt…

在Java中实现多线程之间的通信

一、技术难点 在Java中实现多线程之间的通信是一个复杂但重要的任务&#xff0c;它涉及到线程同步、数据共享和线程间协作等多个方面。以下是实现多线程通信时可能遇到的一些技术难点&#xff1a; 线程同步&#xff1a;多线程环境下&#xff0c;多个线程可能同时访问和修改共享…

【UE5.1 角色练习】08-物体抬升、抛出技能 - part2

目录 前言 效果 步骤 一、让物体缓慢的飞向手掌 二、向着鼠标方向发射物体 前言 在上一篇&#xff08;【UE5.1 角色练习】08-物体抬升、抛出技能 - part1&#xff09;的基础上继续完成角色将物体吸向手掌&#xff0c;然后通过鼠标点击的方向来发射物体的功能。 效果 步骤…

STEP 7-MicroWIN SMART

“STEP 7-MicroWIN SMART”是西门子公司为其S7-200 SMART系列PLC&#xff08;可编程逻辑控制器&#xff09;设计的编程软件。这款软件以其直观的操作界面和强大的功能&#xff0c;在工业自动化领域被广泛应用&#xff0c;特别是在小型自动化系统的开发和控制中表现出色。以下是…

滑动窗口模板(Java)

题目描述 有一个长为 &#x1d45b; 的序列 &#x1d44e;&#xff0c;以及一个大小为 &#x1d458; 的窗口。现在这个从左边开始向右滑动&#xff0c;每次滑动一个单位&#xff0c;求出每次滑动后窗口中的最大值和最小值。 例如&#xff0c;对于序列 [1,3,−1,−3,5,3,6,7] …

【Linux 网络编程】网络的基础知识详解!

文章目录 1. 计算机网络背景2. 认识 "协议" 1. 计算机网络背景 网络互联: 多台计算机连接在一起, 完成数据共享; &#x1f34e;局域网&#xff08;LAN----Local Area Network&#xff09;: 计算机数量更多了, 通过交换机和路由器连接。 &#x1f34e; 广域网WAN: 将…

uniapp通过Canvas绘制网格(心电图,坐标纸等可用)

本篇文档是Canvas绘制心电图的第一个部分&#xff0c;想了解详情的可以关注后学习交流。 心电图的最底层需要一个网状底层&#xff0c;来方便进行数据的测量。 一、白底分大、中、小三个区域的网格 1、首先是HTML部分 <!DOCTYPE html> <html lang"en">…

包和final

一.什么是包&#xff1f; 包就是文件夹,用来管理各种不同功能的Java类,方便后期代码维护。 二.包名的规则 公司域名反写包的作用,需要全部英文小写&#xff0c;见名知意。 com.xxx.domain domain:这个包是干什么的。 三.使用其他类的规则 1.使用同一个包中的类时,不需要导…

【贪心算法】C++解决回文串、增减字符串匹配、分发饼干、跳跃游戏、加油站问题

1. 前言 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取当前状态下最优决策的算法。贪心算法通常用来解决最优化问题&#xff0c;其核心思想是通过局部最优解逐步推导出全局最优解。 在贪心算法中&#xff0c;我们并不总是考虑到未来可能发生的…

代理注册湖北武汉投资管理公司流程和条件

我公司代理注册湖北武汉投资管理公司&#xff0c;现在大家都知道全国的投资管理公司已经停批了&#xff0c;很多需要收购的老板都是通过收购现成的投资管理公司经营的&#xff0c;现在我告诉大家一个好消息&#xff0c;我们有渠道办理湖北武汉资产管理公司&#xff0c;详情致电…

521源码-免费源码下载-免费学习网站教程-宝塔面板ssl网站证书到期后弹出无法续期错误提示

宝塔面板如果从老版本升级到8.10后&#xff0c;当点站证书过期续期时会弹出错误&#xff1a; 排查文件是找不到问题出在哪里&#xff0c;导致续期错误。 解决办法&#xff1a;通过摸索&#xff0c;最简单的就是删除站点&#xff0c;注意&#xff1a;只是删除&#xff0c;不是把…

亚马逊VC账号产品热销,在美国哪些智能小家电产品最好卖?

亚马逊VC账号产品在美国市场的热销&#xff0c;反映了消费者对于特定智能小家电产品的强烈需求。智能小家电产品因其实用性、便捷性和科技感&#xff0c;近年来在美国市场备受追捧。 以下是一些在亚马逊VC账号上热销的智能小家电产品&#xff1a; 智能扫地机器人 这类产品在美…

[vue3后台管理一]vue3下载安装及环境配置教程

[vue3后台管理二]vue3下载安装element plus 一、vue3下载安装element plus cnpm install element plus二&#xff1a;修改main.js import { createApp } from "vue"; import App from "./App.vue"; import ElementPlus from "element-plus"; …

JAVA:Random详解

Java中的java.util.Random类用于生成伪随机数。它提供了多种方法来生成不同类型的随机数&#xff0c;包括整数、浮点数和布尔值。以下是对Random类及其主要方法的详细介绍 一、生成随机数 创建一个Random对象&#xff0c;可以使用以下两种方式&#xff1a; 无参构造函数&…

建议大家少用点儿网站测速工具

春节休息期间明月有接了几个服务器代运维的业务&#xff0c;期间就发现不少新手站长们还在用 17ce、站长工具等等这些网站测速工具来评判站点访问速度的&#xff0c;感觉很有必要给大家聊聊这个事儿&#xff0c;因为这毕竟也是一个涉及服务器安全的一个重要环节了。 其实&#…

那些不起眼但很好玩的API合辑

那些不起眼但很好玩的API&#xff0c;为我们带来了许多出人意料的乐趣和惊喜。这些API可能看起来并不起眼&#xff0c;但它们却蕴含着无限的创意和趣味性。它们可以是一些小游戏API&#xff0c;让我们可以在闲暇时刻尽情娱乐&#xff1b;也可以是一些奇特的音乐API&#xff0c;…

【后端开发】服务开发场景之分布式(CAP,Raft,Gossip | API网关,分布式ID与锁 | RPC,Dubbo,Zookeeper)

【后端开发】服务开发场景之分布式&#xff08;CAP&#xff0c;Raft&#xff0c;Gossip | API网关&#xff0c;分布式ID与锁 | RPC&#xff0c;Dubbo&#xff0c;Zookeeper&#xff09; 文章目录 1、如何设计一个分布式系统&#xff1f;&#xff08;底层原理&#xff09;理论&a…

怎样清理Mac存储空间 苹果电脑内存不够用怎么办 苹果电脑内存满了怎么清理

在使用 Mac 电脑的过程中&#xff0c;用户经常会遇到磁盘空间不足的困扰&#xff0c;这时候就需要寻找有效的方法来清理苹果电脑内存了。 清理Mac存储空间可以通过多种方法进行&#xff0c;以确保你的Mac能够高效运行并释放宝贵的存储空间。以下是一些有效的清理和优化方法&am…

代码随想录第二十二天 | 654.最大二叉树, 617.合并二叉树, 700.二叉搜索树中的搜索, 98. 验证二叉搜索树

654.最大二叉树 看完想法&#xff1a;构造树一般采用的是前序遍历&#xff0c;因为先构造中间节点&#xff0c;然后递归构造左子树和右子树 确定递归函数的参数和返回值:返回TreeNode* 输入vector<int>& num; 确定终止条件:当输入数组大小1的时候&#xff0c;传入数…

数据结构和算法|排序算法系列(一)|选择排序

首先需要你对排序算法的评价维度和一个理想排序算法应该是什么样的有一个基本的认知&#xff1a; 《Hello算法之排序算法》 主要内容来自&#xff1a;Hello算法11.2 选择排序 选择排序是明显的基于比较的排序。下文开始阐述选择排序的整个算法流程 算法流程 选择排序应该已…