8.Redis-set

news2024/12/30 2:48:36

Set

    • 常用命令
      • sadd
      • smembers
      • sismember
      • scard
      • spop
      • smove
      • srem
      • 集合间操作
        • sinter 交集
        • sinterstore
        • sunion 并集
        • sunionstore
        • sdiff 差集
        • sdiffstore
      • 命令总结
    • 内部编码
    • 应用场景
      • 使用 set来保存用户的“标签”

set(集合)就是把一些有关联的数据放刀一起。
它与list的区别如下:

  1. 集合中的元素是无序的!
    这里说的有序是指变换顺序后,就是不同的list,具体大致如下:
    list [1, 2, 3] 和 [2, 1, 3] 是两个不同的list,而set[1, 2, 3] 和[2, 1, 3]是同一个集合
  2. 集合中的元素是不能重复的。

集合中的元素叫做 member。

常用命令

sadd

作用:将⼀个或者多个元素添加到 set 中。注意,重复的元素⽆法添加到 set 中。
语法:SADD key member [member ...]
返回值:本次添加成功的元素个数。

在这里插入图片描述

smembers

作用:获取⼀个 set 中的所有元素,注意,元素间的顺序是⽆序的。
语法:SMEMBERS key

在这里插入图片描述

sismember

作用:判断⼀个元素在不在 set 中。
语法:SISMEMBER key member
返回值:1 表⽰元素在 set 中。0 表⽰元素不在 set 中或者 key 不存在。

在这里插入图片描述

scard

作用:用于获取集合中成员的数量
语法:SCARD key
在这里插入图片描述

spop

作用:从set中随机删除一个或多个 member 并返回一个或多个随机member。
语法:SPOP key [count]

在这里插入图片描述

smove

作用:把member 从 source 上删除,再插入到 destination 中。
语法:
SMOVE source destination member
返回值:1 表⽰移动成功,0 表⽰失败。
在这里插入图片描述
如果此时有个 key2 里面 有 member元素 4了,再从key3中把这个 member元素4 移动 key2时,key3中 4 会被删除,key2中不会新增多一个4。
在这里插入图片描述

srem

作用:将指定的 member 从 set 中删除。
语法:
SREM key member [member ...]
返回值:本次操作删除的元素个数。

在这里插入图片描述

集合间操作

sinter 交集

作用:获取给定 set 的交集中的元素。
语法:SINTER key [key ...]
返回值:交集的元素。
在这里插入图片描述

sinterstore

作用:获取给定 set 的交集中的元素并保存到⽬标 set 中。
语法:SINTERSTORE destination key [key ...]
返回值:交集的元素个数。
在这里插入图片描述

sunion 并集

作用:获取给定 set 的并集中的元素。
语法:SUNION key [key ...]
在这里插入图片描述

sunionstore

作用:获取给定 set 的并集中的元素并保存到⽬标 set 中。
语法:SUNIONSTORE destination key [key ...]
返回值:并集的元素个数。

在这里插入图片描述

sdiff 差集

作用:获取给定 set 的差集中的元素。
语法:SDIFF key [key ...]
在这里插入图片描述

sdiffstore

作用:获取给定 set 的差集中的元素并保存到⽬标 set 中
语法:SDIFFSTORE destination key [key ...]
在这里插入图片描述

命令总结

命令时间复杂度
sadd key element [element …]O(k),k是元素个数
srem key element [element …]O(k),k是元素个数
scard keyO(1)
sismember key elementO(1)
srandmember key [count]O(n),n 是 count
spop key [count]O(n),n 是 count
smembers keyO(k), k 是元素个数
sinter key [key …] sitnerstoreO(m * k)
sunion key [key …] sunionstoreO(k),k 是多个集合的元素个数总和
sdiff key [key …] sdiffstoreO(k),k 是多个集合的元素个数总和

内部编码

集合类型的内部编码有两种:

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

intset是为了节省空间,做出的特定优化,只有当元素全为整数,并且元素个数不是很多的时候才会被优化菜intset。
在这里插入图片描述

应用场景

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

集合类型比较典型的使⽤场景是标签(tag)。例如 A 用户对娱乐、体育板块比较感兴趣,B 用户 对历史、新闻比较感兴趣,这些兴趣点可以被抽象为标签。有了这些数据就可以得到喜欢同⼀个标签的⼈,以及用户的共同喜好的标签,这些数据对于增强用户体验和用户黏度都⾮常有帮助。 例如⼀个电⼦商务⽹站会对不同标签的用户做不同的产品推荐或者例如qq的好友推荐等。

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

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

相关文章

DP4863 国产双声道音频功率放大器芯片

产品概述: DP4863 电路是一种双声道桥接音频功率放大器。在 5 V 电源电压下,它能向 4 Ω 负载提供 2.2 W 的输出功率,或向 3 Ω 负载提供 2.5 W的输出功率,THD N 小于 1 %。此外,它还具有耳机输入端,可驱…

应用程序管理工具

应用程序管理是 DevOps 的重要组成部分。它可以定义为在所有阶段监控和管理软件应用程序的可用性、运行状况、性能和功能的过程,包括规划、设计、构建、测试、部署、维护和更新。这意味着应用程序从概念到停止都受到监控。 应用程序管理的重要性 管理应用程序可确…

关于一个git的更新使用流程

1.第一步使用git bash 使用git bash命令来进行操作(当然我是个人比较喜欢用这种方法的) 2. 第二步:连接 3.第三步:进入 4.第四步:查看分支 5.第五步:切换分支 将本地文件更新后之后进行提交 6.第六步&am…

山西电力市场日前价格预测【2023-09-01】

日前价格预测 预测明日(2023-09-01)山西电力市场全天平均日前电价为305.25元/MWh。其中,最高日前电价为349.30元/MWh,预计出现在19: 30。最低日前电价为240.52元/MWh,预计出现在12: 45。 价差方向预测 1: 实…

业主方怎么管理固定资产

业主方可以通过以下几种方式来管理固定资产: 建立资产管理制度:制定明确的资产采购、使用、维护、报废等流程和标准,确保资产管理的规范性和透明度。 采用专业的资产管理软件:通过数字化手段对固定资产进行管理和监控,…

【Dart】学习使用(二):基本类型

前言 基本类型是语言的基础。 Dart 语言支持以下基础类型:Numbers(int、double), 整形Strings(String), 字符串Booleans(bool) , 布尔型Records((value1,value2)) 记录Lists(List ) 数组Sets(Set) 集合Maps(Map) 映射Runes(Runes,通常由 characters AP…

docker作业

目录 1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 1.1启动镜像 1.2启动cloud镜像 1.3浏览器访问 ​编辑 2、安装搭建私有仓库 Harbor 2.1下载docker-compose 2.2 磁盘挂载,保存harbor 2.3 修改配置文件 2.4安装 2.5浏览器访问 2.6 新…

解决OpenCV的GStreamer warning警告

调用 cv::VideoCapture出现的警告: [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1758) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Internal data stream error. [ WARN:0] global .…

匿名函数( lambda 表达式)

在 C 中,匿名函数也被称为 lambda 表达式。C11 引入了 lambda 表达式,使得在需要函数对象(函数符)的地方可以使用匿名函数来代替。 lambda 表达式的基本语法如下: [capture list] (parameter list) -> return typ…

pyinstaller入门小例子

【问题提出】 我们知道C编译之后会直接生成可执行文件,其他人电脑上即使没有安装编译器,也可以直接执行。 而python是一门解释性语言,不能像C一样直接编译。所以一个自然的想法就是,将python程序及其解释器一起打包,这…

将符号分隔的文本文件txt转换为excel的实现

文本文件如下: 现在不好处理,打算将其转换为excel,其中通过冒号分割:line.split(":") main方法如下: public static void main(String[] args) {String textFilePath "D:\\zoom\\期刊\\J_Medline\\J_…

【力扣】62. 不同路径 <动态规划>

【力扣】62. 不同路径 一个机器人位于一个 m m m x n n n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条…

学习pytorch8 土堆说卷积操作

土堆说卷积操作 官网debug torch版本只有nn 没有nn.functional代码执行结果 B站小土堆视频学习笔记 官网 https://pytorch.org/docs/stable/nn.html#convolution-layers 常用torch.nn, nn是对nn.functional的封装,使函数更易用。 卷积核从输入图像左上角&#xf…

generative-model [ From GAN to WGAN ]

目录 Kullback–Leibler and Jensen–Shannon Divergence Generative Adversarial Network (GAN) What is the optimal value for D? What is the global optimal? What does the loss function represent? Problems in GANs Hard to achieve Nash equilibrium Low …

【Vue】集成百度地图

Vue 集成 百度地图 1、获取百度地图 ak 密钥 2、登录网址 https://lbsyun.baidu.com/ 3、注册百度地图开放平台账号,填写认证信息,并且创建应用 安装 npm install vue-baidu-map --savemain.js import BaiduMap from vue-baidu-map;Vue.use(BaiduM…

进程间通信之System V 共享内存

文章目录 一、共享内存 进程具有独立性,因此进程间通信的前提是两个进程能看到同一份资源 一、共享内存 在内存中申请一块空间,并将起始地址分别映射到两个进程的虚拟地址空间上,便可以让两个进程看到同一份资源 操作系统为了管理共享内存&…

DP读书:不知道干什么就和我一起读书吧——以《鲲鹏处理器 架构与编程》中鲲鹏软件的构成为例

DP读书:不知道干什么就和我一起读书吧 为啥写博客:好处一:记录自己的学习过程优点二:让自己在各大社群里不那么尴尬推荐三:坚持下去,找到一个能支持自己的伙伴模版:鲲鹏软件构成硬件特定软件1. …

五、工厂方法模式

一、什么是工厂方法模式 工厂方法模式是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。   工厂方法模式的主要角色如下。 抽象工厂(Abstract Factory):提…

USB集线器设计

参考电路 参考1 基于FE1.1S四路USB集线器设计 基于FE1.1S四路USB集线器设计 - 嘉立创EDA开源硬件平台 (oshwhub.com)https://oshwhub.com/beibu/ji-yufe1-1s-si-luusb-ji-xian-qi-she-ji 参考2 C479658_LCYZB-SL2.1A USB集线器验证板-V1 C479658_LCYZB-SL2.1A USB集线器验…

视频导出文件太大如何变小?缩小视频这样做

作为一名视频制作爱好者,我们经常需要导出视频文件,但是,有时候我们会发现导出的视频文件太大,给上传和分享带来很大的不便。那么,如何将视频文件变小呢?下面将为你介绍三个方法,让你轻松解决视…