Redis远程字典服务器(7)—— set类型详解

目录

一,基本情况

二,常用命令

2.1 sadd

2.2 smembers,sismember

2.3 spop,srandmember

2.3 smove,srem

2.4 sinter,sinterstore求交集

2.5 sunion,sunionstore求并集

2.6 sdiff,sdiffstore求差集

三,内部编码

四,应用场景

4.1 标签

4.2 共同好友

4.3 统计UV


一,基本情况

set表示含义叫做“集合”,一个术语可能有多种含义,比如:set有“集合”的含义,也有“设置”的含义。

集合就是把一些有关联的数据放到一起,有下面几个特点:

  1. 集合中的元素是“无序”的,这里的“无序”是和list对应的,有序还是无序,关键就在于元素顺序是否重要
  2. 集合中的元素不能重复,这点和list也是相反的
  3. 和list类似,集合中的每个元素也都是string类型(我们也可以用json的格式让set存结构化数据)

二,常用命令

官方命令文档传送门:Commands | Docs (redis.io)

2.1 sadd

SADD key member [member ...]

sadd是set add的缩写,也就是往set里面添加元素,我们一般把集合里的元素叫做 “member”,每个member都是一个string字符串

2.2 smembers,sismember

smembers作用是获取一个set里的是所有元素,是无序的;sismember作用是判断一个元素是否在set里

集合的操作都是带有“ S ”前缀的,判定当前元素是否在集合中

2.3 spop,srandmember

 pop一般表示“从末尾”删除一个元素,由于集合中的元素是无序的,此时“哪一个元素是末尾”就无关紧要了,使用spop删除元素的时候,是“随机删除”;srandmember作用是“随机”从key中获取一个数

spop key [count] #其中当count不写的时候,随机删除一个;写的时候,写几个删几个

注意:官方文档保证,spop每次删除时,都是随机的,因为在源码中实现spop可执行程序时,就采用了生成随机数的方式:

2.3 smove,srem

smove source destination member

smove作用是把 member 从 source 上删除,再插入到 destination 中,两个都是set类型,当source没有member时,smove返回0;srem作用是删除指定的member,可以一次删除多个

smove: 

当set1有1时,再从set2移动一个1过来,但是由于元素不能重复,虽然smove会返回1表示插入成功,但是set2只有一个1,set1的1被删除

srem: 

2.4 sinter,sinterstore求交集

set既然称为“集合”,那么也应该有集合的功能,比如数学里的“交集”,“并集”,“差集”,Redisset类型也支持这几个操作,并且效果和数学一致:

sinter key [key...]

sinter表示获取给定的set中交集的元素,每个key都对应一个set集合,返回值就是最终交集的数据

sinterstore destination key [key...]

sinterstore作用也是求交集,但是它直接把算好的交集放进一个destination 这个 key 对应的集合中

 注意:如果key已经存在,再写入会覆盖原先的集合里的元素:

2.5 sunion,sunionstore求并集

sunion作用是获取给定的set并集中的元素,返回值为并集结果;sunionstore和上面的sinterstore一样,也是将结果存到指定key的集合中:

2.6 sdiff,sdiffstore求差集

sdiff作用是求差集,用法也和上面的一样;sdiffstore也是一样的:

 

三,内部编码

  • intset(整数集合):当集合中的元素都是整数并且元素的个数⼩于 set-max-intset-entries 配置 (默认 512 个)时,Redis 会选⽤ intset 来作为集合的内部实现,从⽽减少内存的使⽤。(为了节省空间,做出的特定优化)
  • hashtable(哈希表):当集合类型⽆法满⾜ intset 的条件时,Redis 会使⽤ hashtable 作为集合 的内部实现。

四,应用场景

4.1 标签

使用set来保存用户的“标签”(tag)

例如 A用户对娱乐、体育板块比较感兴趣,B用户对历史、新闻比较感兴趣,这些兴趣点可以被抽象为标签。有了这些数据就可以得到喜欢同⼀个标签的人,以及用户的共同喜好的标签,这些数据对于增强用户体验和用户黏度都非常有帮助。 例如⼀个 电子商务网站会对不同标签的用户做不同的产品推荐。

这里说的标签,就是一些简短的字符串,此时就可以把标签保存到Redis的set中了 

“用户画像”,这种事情其实是挺复杂的事情,一般的大厂都会有专门的团队做这样的工作,用来准确描述一个人的喜好等

上面的玩法,某音是玩得最好得,其他互联网大厂一看,也都纷纷效仿和跟进 --> 信息茧房 --> 你看到的东西都是你愿意看到的,你不愿意看的就很难被你看到 --> 你看到的内容始终是一个小圈子 --> 到处传递焦虑的,当你很认真看了一个焦虑视频之后,人家服务器就判定,你非常爱看这种类型的视频,然后就给你狂推送

4.2 共同好友

 set还有一个用处,就是使用set来计算用户之间的共同好友,就是“基于求交集

比如QQ就有时候显示“您与***有多个共同好友,点击查看详情”之类的显示

4.3 统计UV

一个互联网产品,如何衡量用户量,用户规模?

主要有两方面:

  1. PV:page view,比如我打开必应,搜索一个东西,中间的每次点击,都会产生这样一个PV,简单来说就是用户每次访问这个服务器都会产生一个PV
  2. UV:PV是针对一个用户的,UV就是每个用户,访问服务器,都会产生一个UV,但是同一个用户多次访问服务器,UV也不会增加了;所以UV需要按照用户进行去重,所以我们就可以使用set来实现

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

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

相关文章

MySQ分库分表与MyCat安装配置

目录 介绍 拆分策略 垂直拆分 1. 垂直分库 2. 垂直分表 水平拆分 1. 水平分库‘ 2. 水平分表 实现技术 MyCat概述 安装 概念介绍 MyCat入门 需求 环境准备 分片配置 启动服务 连接测试 执行SQL语句测试 MyCat配置 1. schema.xml 1. schema标签 2. dat…

python | 图片转换为 pdf 实现方法

目录 一、PIL 库简介及安装使用方法 (一)python 不同版本下 PIL 的使用方法 二、图片转换为 pdf 的两种实现方法 (一)简易版——pdf 页面尺寸跟随图片大小 (二)常用版——pdf 每页尺寸统一为 A4 一、P…

C++,std::bind 详解

文章目录 1. 概述2. 基本用法2.1 使用占位符2.2 示例 3. 总结 1. 概述 std::bind 是 C11 引入的一个功能,它允许你将函数(或成员函数、函数对象)与其参数绑定,生成一个新的可调用对象。这个功能在需要将函数及其参数一起传递给其…

闲鱼IP属地地址:去外地会自动变化吗?解析实时更新机制

在数字化时代,网络交易平台如闲鱼已成为我们日常生活中不可或缺的一部分。在进行二手交易时,了解对方的地理位置信息成为许多买家和卖家的关切点。那么,去外地闲鱼IP会变吗?闲鱼IP属地地址是实时更新吗?本文将深入探讨…

基于百度智能云爆破验证码识别

目录 基于百度智能云爆破验证码识别 一、基于php提供验证码校验接口 二、基于百度云API识别验证码 1、领取资源,创建应用 2、利用应用的API Key和Secret Key获取Access Token 3、文字识别 4、编写爆破程序 基于百度智能云爆破验证码识别 一、基于php提供验证…

华为手机换ip地址怎么换?手机换ip地址有什么影响

在数字化时代,网络已成为我们生活中不可或缺的一部分。无论是日常沟通、工作学习还是娱乐休闲,我们都离不开互联网。然而,随着网络安全问题的日益突出,如何保护个人隐私和信息安全成为了用户关注的焦点。更换手机IP地址作为提升网…

2024年下半年,单独划定的地区报名软考的温馨提示

软考分数线分为全国分数线、省分数线(陕西省下半年已取消,仅剩青海省)、以及单独划线地区分数线。目前各地2024年下半年软考正在接受报名,请单独划线地区的考生注意——有些地区可能要求考生在考试后进行单独划线申请,…

删除或丢失的移动硬盘数据如何恢复?三种办法助你找回宝贵资料

在数字化时代,移动硬盘已成为我们存储重要数据不可或缺的工具。然而,数据丢失或误删除的情况时有发生,让人倍感焦虑。别担心,本文将为你详细介绍如何恢复删除或丢失的移动硬盘数据,帮助你找回那些宝贵的资料。 一、检…

『 C++ 』IO流

文章目录 IO流概述iostream 的标准对象C流和C标准库I/O函数的同步 sync_with_stdiofstream 文件流文件流的打开标志二进制读写二进制读写的浅拷贝问题文本读写 字符串流注意 IO流概述 流是指数据的有序传输序列,路表示数据从一个地方流向另一个地方的过程,流可以是输入流也可以…

用Python在Ashare获取金融数据官方文档解读

Ashare,也被写作AKShare,是一个基于Python的开源完全免费的财经数据接口库。它的主要目的是为用户提供股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据的采集、清洗和落地的一整套工具。AKSha…

算法的学习笔记—把二叉树打印成多行(牛客JZ78)

😀前言 在算法面试中,二叉树的层序遍历是一个经典的题目。而这道题的要求是进一步将二叉树的每一层结点值打印成多行,即同一层结点从左至右输出,最终结果存放到一个二维数组中返回。接下来,我们将通过代码实例详细解析…

什么是光伏气象站—光伏气象站的简述

随着全球对可再生能源需求的日益增长,光伏发电作为清洁、可再生的能源形式,正逐步成为能源结构转型的重要力量。然而,光伏电站的发电效率受到多种气象因素的影响,如太阳辐射强度、温度、风速、湿度等。为了最大化光伏系统的发电潜…

C/C++ 多线程[1]---线程创建+线程释放+实例

文章目录 前言1. 多线程创建2. 多线程释放3. 实例总结 前言 说来惭愧,写了很久的代码,一个单线程通全部。可能是接触的项目少吧,很多多线程的概念其实都知道,但是实战并没有用上。前段时间给公司软件做一个进度条,涉及…

Java 2.4 - JVM

一、Java 内存区域详解(重点) 本篇讨论的是 HotSpot 虚拟机 相比于 C 而言,程序员不需要对每个 new 操作都写对应的 delete / free 操作,这些操作我们会交给虚拟机去做。因此,如果不了解虚拟机的原理,一旦…

【Vue3】集成 Ant Design Vue

【Vue3】集成 Ant Design Vue 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗…

Android TableLayout中TextView文本不居中问题

概述 | 平台 RK3288 Android 8.1 compileSdkVersion 26. | 问题 使用了TableLayout布局电话的拨号按键界面, 效果如下图 (正常): 在后续开发过程的某次修改后, 出现效果图(不正常): 合并两张效果图可看得更明显(红线参考位置): 在布局中 TextView 的 android:g…

SEO优化:如何优化自己的文章,解决搜索引擎不收录的问题

可以使用bing的URL检查,来检查自己的文章是不是负荷收录准测,如果页面有严重的错误,搜索引擎是不会进行收录的,而且还会判定文章为低质量文章! 检查是否有问题。下面的页面就是有问题,当然如果是误报你也可…

Stage模型应用程序包结构

一、开发态包结构 在DevEco Studio上创建一个项目工程,并尝试创建多个不同类型的Module。根据实际工程中的目录对照本章节进行学习,可以有助于理解开发态的应用程序结构。 工程结构主要包含的文件类型及用途如下: 文件类型说明配置文件 包括…

ISO 26262中的失效率计算:IEC 61709-Clause 17_Switches and push-buttons

概要 IEC 61709是国际电工委员会(IEC)制定的一个标准,即“电子元器件 可靠性 失效率的基准条件和失效率转换的应力模型”。主要涉及电学元器件的可靠性,包括失效率的基准条件和失效率转换的应力模型。本文介绍IEC 61709第十七章&…

docker部署postgresSQL 并做持久化

先安装docker,安装docker 方法自行寻找方法 然后安装pgsql 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres:latest运行容器 docker run -it --name postgres --privileged --restart always -e POSTGRES_PASSWORDYo5WYypu0mCCh…