08 Redis Set类型操作与使用场景

news2024/9/21 12:34:08

Redis Set类型操作与使用场景

一、Set类型操作

​ Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

​ 无序

​ 元素不可重复

​ 查找快

​ 支持交集、并集、差集等功能

​ Set的常见命令有:

​ SADD key member … :向set中添加一个或多个元素

# 添加多个值
127.0.0.1:6379> sadd user:1:friends bob jack job
3

​ SMEMBERS:获取set中的所有元素

# 获取元素
127.0.0.1:6379> smembers user:1:friends
job
bob
jack

​ SCARD key: 返回set中元素的个数

# 返回元素数量
127.0.0.1:6379> scard user:1:friends
3

​ SISMEMBER key member:判断一个元素是否存在于set中

# 判断是否存在bob(返回1为存在)
127.0.0.1:6379> sismember user:1:friends bob
1

# 判断是否存在hony(返回0为不存在)
127.0.0.1:6379> sismember user:1:friends hony
0

​ SREM key member … : 移除set中的指定元素

# 删除元素job
127.0.0.1:6379> srem user:1:friends job
1

# 查看是否删除
127.0.0.1:6379> smembers user:1:friends
bob
jack

​ SINTER key1 key2 … :求key1与key2的交集

# 创建3个元素
127.0.0.1:6379> sadd user:2:friends bob li hony
3

# 交集
127.0.0.1:6379> sinter user:1:friends user:2:friends
bob

​ SDIFF key1 key2 … :求key1与key2的差集

# 查询用户1的差集
127.0.0.1:6379> sdiff user:1:firends user:2:friends
jack

# 查询用户2的差集
127.0.0.1:6379> sdiff user:2:friends user:1:friends
hony
li

​ SUNION key1 key2 … :求key1与key2的并集

# 并集
127.0.0.1:6379> sunion user:1:friends user:2:friends
bob
hony
jack
li

​ 例如两个集合:s1和s2:

在这里插入图片描述

​ 求交集:SINTER s1 s2

​ 求s1与s2的不同:SDIFF s1 s2

在这里插入图片描述

二、使用场景

​ Set类型在Redis中主要用于存储无序且不重复的数据集合,以下是几个典型的使用场景:

共同好友/关注列表:

​ 在社交类应用中,获取两个人或多个人的共同好友或共同关注的用户,是一个常见的需求。使用Set类型可以方便地实现这个功能,只需要将每个人的好友或关注的用户ID存储在一个Set中,然后通过求交集的操作就可以得到共同好友或关注的用户列表。

标签系统:

​ 在一些需要给用户打标签的应用中,比如电商网站的商品标签、博客的标签等,每个用户可能有多个标签,而且标签之间是不重复的。这时候就可以用Set类型来存储用户的标签,方便地添加、删除和查询标签。

唯一性校验:

​ 有些场景中需要保证数据的唯一性,比如用户注册时输入的手机号或邮箱,不能重复。这时候可以用Set类型来存储已经注册过的手机号或邮箱,当用户再次输入时,只需要判断输入的值是否在Set中即可。

随机推荐:

​ 在一些需要随机展示内容的场景中,比如首页的推荐内容,可以先将需要展示的内容ID存储在一个Set中,然后随机从Set中选取几个ID来展示。这样可以保证每次展示的内容都是随机的,而且不会重复。

IP地址去重:

​ 在一些需要记录用户访问IP的应用中,比如网站访问统计、API调用次数统计等,可以使用Set类型来存储访问过的IP地址,这样可以方便地获取到去重后的IP地址列表和数量。

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

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

相关文章

Tomcat 8.5 下载、安装、启动及各种问题

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 本期内容主要介绍 Tomcat 8 的安装,以及可能会遇到的问题 文章目录 1. Tomcat 安装2. 可能会遇到的问题2.…

pip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

重新设置一下环境变量。 注意,这里后面没有斜杠 我之前就是因为环境变量中,这两行最后都有斜杠,导致提示pip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

Multi-AP

1. Multiple-BSSID 和Multi-VAP Multiple-BSSID 和Multi-VAP差异: Multi-VAP: 每个AP独自发送beacon帧; Multiple-BSSID: 所有AP公用一个beacon帧。 1.1 Multi-VAP 如果您使用过 Wi-Fi (2.4/5.0GHz)&am…

著名ROM修改社区停止运营 管理员与继任者互相指责

运营近二十年的知名ROM修改社区网站Romhacking.net即将关闭新内容的提交和更新。网站创始人Nightcrawler表示,网站已经“几乎完成了最初设定的所有目标,并且远远超出了预期。”然而,根据其他网站工作人员的说法,事情似乎没那么简单…

C++ 重要特性探究

shared_from_this 使用分析 场景 类的成员函数需要获取指向自身的shared_ptr的时候类成员函数传递shared_ptr给其他函数或者对象的时候&#xff0c;目的是为了管理对象生命周期使用方法 首先类必须继承 std::enable_shared_from_this<T>必须使用 shared_from_this 获取指…

Arduino PID库 (2) –微分导致的过冲

Arduino PID库 &#xff08;2&#xff09; – Derivative Kick 参考&#xff1a;手把手教你看懂并理解Arduino PID控制库——微分冲击 pid内容索引-CSDN博客 Arduino PID库 &#xff08;1&#xff09;– 简介 问题 此修改将稍微调整derivative term。目标是消除一种称为“…

RocketMQ消息汇总

当物理文件删除了 队列中的下标的消息也被删除了 但是即使物理删除了 队列中的偏移量还是会持续上升每天凌晨4点 定时清理 在 RocketMQ 中&#xff0c;消息的物理删除是通过定期清理 CommitLog 文件来实现的。CommitLog 文件中存储的是所有主题和队列的消息&#xff0c;一旦这…

关于图片导入Eagle弹出“抱歉,eagle发生了一些问题”的解决办法 | 如何查看Eagle调试报告查询错误文件方法

教程不易&#xff0c;希望得到关注 先说解决办法 使用格式工厂将所有图片或报错图片文件再次转为JPG文件&#xff0c;即可正常导入。 官网入口 http://www.pcgeshi.com/ 吐槽一下现在搜索软件搜“格式工厂官网”第一页全是盗版软件和流氓网页&#xff0c;什么什么金X 风X格式…

使用 Streamlit 和 Python 构建 Web 应用程序

一.介绍 在本文中&#xff0c;我们将探讨如何使用 Streamlit 构建一个简单的 Web 应用程序。Streamlit 是一个功能强大的 Python 库&#xff0c;允许开发人员快速轻松地创建交互式 Web 应用程序。Streamlit 旨在让 Python 开发人员尽可能轻松地创建 Web 应用程序。以下是一些主…

TCP/UDP Socket 测试小工具,作为网工不可以不知道

背景 阿祥今天推荐一款TCP/UDP Socket 测试工具&#xff0c;所谓TCP/IP调试工具是用于在TCP/UDP的应用层上进行通信连接、数据传输的Windows工具。所谓应用层上就是说&#xff0c;TCP调试工具是不涉及TCP/IP协议层实现的问题&#xff0c;而只是利用TCP/IP进行数据传输的工具。 …

建模杂谈系列246 数据模型

说明 如果说微服务化(API接口、Web页面、Docker镜像)是架构方面的基准&#xff0c;那么数据模型就是逻辑处理方面的基准 内容 以下是一个样例&#xff1a; import redef extract_utf8_chars(input_string None):# 定义一个正则表达式&#xff0c;用于匹配所有的UTF-8字符utf…

OpenStack Yoga版安装笔记(十一)nova安装(上)

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行&#xff0c;基本按照OpenStack Installation Guide顺序执行&#xff0c;主要内容包括&#xff1a; 环境安装 &#xff08;已完成&#xff09;OpenStack…

一文详解大模型蒸馏工具TextBrewer

原文&#xff1a;https://zhuanlan.zhihu.com/p/648674584 本文分享自华为云社区《TextBrewer&#xff1a;融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度&#xff0c;减少内存占用》&#xff0c;作者&#xff1a;汀丶。 TextBre…

谷粒商城实战笔记-122~124-全文检索-ElasticSearch-分词

文章目录 一&#xff0c;122-全文检索-ElasticSearch-分词-分词&安装ik分词二&#xff0c;124-全文检索-ElasticSearch-分词-自定义扩展词库1&#xff0c;创建nginx容器1.1 创建nginx文件夹1.2 创建nginx容器获取nginx配置1.3 复制nginx容器配置文件1.4 删除临时的nginx容器…

《Milvus Cloud向量数据库指南》——什么是高可用:深入理解数据库系统中的高可用性架构

什么是高可用:深入理解数据库系统中的高可用性架构 在信息技术日新月异的今天,高可用性(High Availability,简称HA)已成为衡量一个系统,尤其是数据库系统稳定性和可靠性的重要标准。高可用性的核心目标在于确保系统能够持续不断地提供服务,最大限度地减少因维护活动、硬…

从零开始安装Jupyter Notebook和Jupyter Lab图文教程

前言 随着人工智能热浪&#xff08;机器学习、深度学习、卷积神经网络、强化学习、AGC以及大语言模型LLM, 真的是一浪又一浪&#xff09;的兴起&#xff0c;小伙伴们Python学习的热情达到了空前的高度。当我20年前接触Python的时候&#xff0c;做梦也没有想到Python会发展得怎么…

【初阶数据结构题目】10. 链表的回文结构

链表的回文结构 点击链接做题 思路1&#xff1a;创建新的数组&#xff0c;遍历原链表&#xff0c;遍历原链表&#xff0c;将链表节点中的值放入数组中&#xff0c;在数组中判断是否为回文结构。 例如&#xff1a; 排序前&#xff1a;1->2->2->1 设置数组来存储链表&a…

KubeSphere 最佳实战:探索 K8s GPU 资源的管理,在 KubeSphere 上部署 AI 大模型 Ollama

转载&#xff1a;KubeSphere 最佳实战&#xff1a;探索 K8s GPU 资源的管理&#xff0c;在 KubeSphere 上部署 AI 大模型 Ollama 随着人工智能、机器学习、AI 大模型技术的迅猛发展&#xff0c;我们对计算资源的需求也在不断攀升。特别是对于需要处理大规模数据和复杂算法的 AI…

数据恢复软件:电脑丢失文件,及时使用数据恢复软件恢复!

数据恢复软件什么时候会用到&#xff1f; 答&#xff1a;如果真的不小心删除文件&#xff0c;清空回收站&#xff0c;电脑重装系统等情况发生&#xff0c;我们要懂的及时停止使用电子设备&#xff0c;使用可靠的数据恢复软件&#xff0c;帮助我们恢复这些电子设备的数据&#…

【SQL Server 】故障排除:端口冲突排查、网络问题诊断及日志分析与监控6.1 端口冲突排查

目录 第6章&#xff1a;故障排除 端口冲突排查 示例&#xff1a;使用 PowerShell 排查端口冲突 网络问题诊断 示例&#xff1a;使用 Wireshark 捕获 SQL Server 网络流量 日志分析与监控 示例&#xff1a;使用 SQL Server Profiler 监控网络连接 安全注意事项 第6章&am…