Redis中的Set类型

news2024/11/27 15:40:52

目录

set的相关命令

sadd

smembers

sismember

scard

spop

smove

srem

操作集合间的命令

sinter

sinterstore

sunion

sunionstore

sdiff

sdiffstore

内部编码

set类型的应用场景


redis中的集合类型是保存多个字符串类型的元素的.

作为集合,有两个关键的特性:1.集合中的元素是无序的.2.集合中的元素是不能重复的.

此处所说的无序是和前面list的有序对应的.

有序:顺序很重要,变换以下顺序,就是不同的list了.

无序:顺序不重要,变化以下顺序,集合还是那个集合.

和list是类似的,集合中的元素都是string类型,可以使用json格式让string也能存储结构化的数据.

set的相关命令

sadd

我们把集合中元素叫做member.

sadd就表示向集合中添加元素.

返回的值表示本次操作,成功添加了几个元素.

时间复杂度为O(1).

smembers

.

获取一个set中的所有元素,注意,元素之间的顺序是无序的.

时间复杂度是O(N),N表示集合中的元素个数.

sismember

判断一个元素在不在set中.

返回值为1表示元素在set中,返回0表示元素不在set中或者key不存在.

时间复杂度O(1).

scard

获取一个set的基数,即set中的元素个数.

返回的是集合中元素的个数.

spop

从set中删除并返回一个或者多个元素.

不写count就随机删除一个,写了就写几个删几个.

注意:由于set是无序的,所以spop在删除元素的时候是随机删除.

返回的是取出的元素.

时间复杂度是O(N),n是count的值.

smove

把member从source上删除,在插入到destination中.

时间复杂度是O(1)

返回的是1表示移动成功,0表示失败.

如果目标集合里已经存在了要移动的member,会怎么样?

针对上述的情况,smove不会视为出错,也会按照删除在插入的方式进行执行.

如果要移动的元素在source中不存在,就会返回0表示移动失败.

srem

删除集合中的元素.

可以一次删除一个元素,也可以一次删除多个元素.

返回值表示删除成功的元素个数.

时间复杂度O(N),N表示删除的元素个数.

操作集合间的命令

集合间的操作:交集(inter),并集(union),差集(diff).

sinter

求交集.此处的每个key都对应一个集合,返回值就是最终交集的数据.

时间复杂度:O(N*M),N是最小的集合元素个数,M是最大的集合元素个数.

sinterstore

直接把计算好的交集,放到destination这个key对应的集合当中去. 

返回值是交集的元素个数,要想直到交集的内容,可以按照集合的方式访问destination这个key.

sunion

sunion返回的是并集的结果数据.

时间复杂度是O(N),N指的是所有集合中总的元素个数.

sunionstore

直接把并集的结果存储到destination对应的集合中去.

返回的是并集的元素个数.

sdiff

返回的是差集的结果.

时间复杂度是O(N),N指的是所有集合中总的元素个数.

sdiffstore

返回的是差集的元素个数.

时间复杂度是O(N),N指的是所有集合中总的元素个数.

差集的结果和两个集合的顺序有关,A-B和B-A的结果可能是不一样的.

内部编码

集合类型的内部编码有两种:intset(整数集合)和hashtable(哈希表).

当集合中的元素都是整数并且元素的个数⼩于 set-max-intset-entries 配置 (默认 512个)时,Redis 会选⽤ intset 来作为集合的内部实现,从⽽减少内存的使⽤。

当集合类型无法满足intset的条件时,redis会使用hashtable作为集合的内部编码.


set类型的应用场景

使用set来保存用户的标签

一些软件会根据用户的使用记录来生成一些针对于该用户的特征(标签),分析清除特征之后,在投其所好,设置更符合用户需求的软件环境.

这些标签数据对于增强用户体验和用户黏度时非常有帮助的.

还可以使用set来计算用户之间的共同好友,从而达到推荐好友的功能.此功能的实现就可以基于集合求交集.

同时我们也可以使用set来统计uv.

统计uv我们利用的是集合的去重特性.

一个互联网如何衡量用户规模主要的指标有两个方面:1pv(page view),用户每次访问服务器,每次的访问都是产生一个pv.2.uv(user view),每个用户访问服务器都会产生一个uv,但是同一个用户多次访问服务器,不会是uv增加.pv和uv的使用通常会指定在一段时间内.

uv需要按照用户来进行去重,此时就可以使用set来实现.

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

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

相关文章

CSS实现鼠标移至图片上显示遮罩层及文字效果

效果图&#xff1a; 1、将遮罩层html代码与图片放在一个div 我是放在 .proBK里。 <div class"proBK"><img src"../../assets/image/taskPro.png" class"proImg"><div class"imgText"><h5>用户在线发布任务&l…

C++ 动态规划。。。

#include <iostream> #include <algorithm> using namespace std; // 定义一个常量&#xff0c;表示无穷大 const int INF 1e9; int dp[1000 2];// 定义一个函数&#xff0c;计算数组中某个区间的和 int sum(int arr[], int start, int end) {int s 0;for (int …

【C/C++】什么是POD(Plain Old Data)类型

2023年11月6日&#xff0c;周一下午 目录 POD类型的定义标量类型POD类型的特点POD类型的例子整数类型&#xff1a;C 风格的结构体&#xff1a;数组&#xff1a;C 风格的字符串&#xff1a;std::array:使用 memcpy 对 POD 类型进行复制把POD类型存储到文件中&#xff0c;并从文…

干货丨Linux终端常见用法总结(收藏)

一、前言 熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率&#xff0c;笔者结合自身学习实践&#xff0c;总结以下终端用法供同行交流学习。 二、常见用法 1.快捷键 1.1.Alt. 在光标位置插入上一次执行命令的最后一个参数。 1.2.CtrlR 模糊搜索历…

jenkins gitlab CI/CD

jenkins的安装教程就不说了&#xff1a;Jenkins docker 一键发布 (一)_jenkins 一键发布-CSDN博客 最近打算从svn切换到gitlab&#xff0c;所以配置了一下jenkins的git 很简单&#xff0c;直接上图 1 选择 Git 2 录入gitlab的http地址&#xff08;由于我的git地址不是22端口&…

数据结构与算法之美代码:排序算法3

目录 算法原理桶排序 代码实现桶排序代码实现计数排序代码实现 算法原理 桶排序 核心思想是将要排序的数据分到几个有序的桶里&#xff0c;每个桶里的数据再单独进行排序。桶内排完序之后&#xff0c;再把每个桶里的数据按照顺序依次取出&#xff0c;组成的序列就是有序的了。…

【小白专用】PHP中的JSON转换操作指南 23.11.06

一、JSON的基础知识 1.1JSON数据格式 JSON数据格式是一组键值对的集合&#xff0c;通过逗号分隔。键值对由“键”和“值”组成&#xff0c;中间使用冒号分隔。JSON数据格式可以嵌套&#xff0c;而且可以使用数组 二、PHP中的JSON函数 JSON的操作需要使用编程语言进行处理&am…

接口测试及接口测试工具

首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把数据库共享给你&#xff0c;他只能给你…

【NI-DAQmx入门】外部采样时钟相关

1.时钟的作用 时钟在几乎所有测量系统中都起着至关重要的作用。通过硬件定时测量&#xff0c;时钟控制采样或更新的发生时间。与依赖软件计时测量相比&#xff0c;您可以选择硬件定时测量来实现采样或更新之间更一致的时间间隔。以数模转换器特性分析为例。该应用由三个基本部分…

阿里云安全恶意程序检测(速通一)

阿里云安全恶意程序检测 赛题理解赛题介绍赛题说明数据说明评测指标 赛题分析数据特征解题思路 数据探索数据特征类型数据分布箱型图 变量取值分布缺失值异常值分析训练集的tid特征标签分布测试集数据探索同上 数据集联合分析file_id分析API分析 特征工程与基线模型构造特征与特…

大厂面试题-innoDB如何解决幻读

从三个方面来回答&#xff1a; 1、Mysql的事务隔离级别 Mysql有四种事务隔离级别&#xff0c;这四种隔离级别代表当存在多个事务并发冲突时&#xff0c;可能出现的脏读、不可重复读、幻读的问题。 其中InnoDB在RR的隔离级别下&#xff0c;解决了幻读的问题。 2、什么是幻读&…

Java手动引入Maven依赖的Jar包

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

65从零开始学Java之初学者必会的几个常用Java类

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 我们在解决实际问题时&#xff0c;除了经常需要对数字、日期、时间进行操作之外&#xff0c;有时候还…

js原型链

什么叫原型链 原型链是js中的核心&#xff0c;原型链将各个属性链接起来&#xff0c;在原型链上面定义&#xff0c;原型链上的其他属性能够使用&#xff0c;原型链就是保证继承 原型链区分 原型链分为显式原型和隐式原型 显式原型&#xff1a;只有函数和构建函数才有显式原型…

【ARM AMBA AXI 入门 12 -- AXI协议中的 WLAST 与 RLAST】

文章目录 AXI协议中的 WLAST 与 RLAST AXI协议中的 WLAST 与 RLAST AMBA AXI协议是由ARM公司定义的一种高性能&#xff0c;高频率的总线协议。总线协议中的 WLAST 信号是一个重要的信号&#xff0c;它在 AXI 协议中用来标识一个突发&#xff08;Burst&#xff09;传输的最后一…

requests库编写的爬虫程序没有那么难!

下文是用requests库编写的爬虫程序&#xff0c;用于爬取toutiao上的图片。程序使用了代理服务器&#xff0c;代理服务器的地址为duoip&#xff0c;端口号为8000。 import requests from bs4 import BeautifulSoup# 设置代理服务器 proxy_host duoip proxy_port 8000 proxy {…

STM32创建工程步骤

以创建led工程为例&#xff1a; 新建一个led文件夹 新建一个以led命名的工程&#xff08;用keil_uVision5&#xff09;并添加三个组。 Library文件夹里放置库函数文件。 User&#xff1a; 点亮led灯的程序&#xff1b; 直接给寄存器赋值 调用库函数。 #include "stm…

网络运维Day05

文章目录 实验环境用户与组概述用户账号创建查看用户-查创建用户-增修改用户属性-改删除用户-删 用户密码管理交互式修改密码非交互式修改密码 用户初始配置文件基本权限和归属基本权限的类别权限适用对象(归属)查看权限 修改权限设置基本权限如何判断用户对某目录所具备怎样的…

〔002〕虚幻 UE5 发送 get、post 请求、读取 json 文件

✨ 目录 🎈 安装 varest 扩展🎈 开启 varest 扩展🎈 发送 get 请求🎈 发送 post 请求🎈 读取 json 文件🎈 安装 varest 扩展 打开 虚幻商城,搜索 varest 关键字进行检索, varest 是一个 api 调用插件,支持 http/https 请求,也支持 json 文件的读取,最关键是该…

基于SSM的新闻类网站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…