Redis集合深入

Redis 的集合不是一个线性结构,而是一个哈希表结构,它的内部会根据 hash 分子来存储和查找数据,理论上一个集合可以存储 2 的 32 次方减 1 个节点(大约 42 亿)个元素,因为采用哈希表结构,所以对于 Redis 集合的插入、删除和查找的复杂度都是 0(1),只是我们需要注意 3 点。

	对于集合而言,它的每一个元素都是不能重复的,当插入相同记录的时候都会失败。集合是无序的。集合的每一个元素都是 String 数据结构类型。

Redis 的集合可以对于不同的集合进行操作,比如求出两个或者以上集合的交集、差集和并集等。

集合命令
在这里插入图片描述

表中命令的前缀都包含了一个 s,用来表达这是集合的命令,集合是无序的,并且支持并集、交集和差集的运算,下面通过命令行客户端来演示这些命令。
在这里插入图片描述

交集、并集和差集保存命令的用法,如下图所示。

在这里插入图片描述

这里的命令主要是求差集、并集和交集,并保存到新的集合中。下面将在 Spring 中操作它们,代码如下所示。

// 请把 RedisTemplate 值序列化器设置为 StringRedisSerializer 测试该代码片段
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);
Set set = null;
// 将元素加入列表
redisTemplate.boundSetOps ("set1").add ("vl","v2","v3","v4","v5", "v6");
redisTemplate.boundSetOps ("set2").add( "v0","v2","v4","v6","v8");
//求集合长度
redisTemplate.opsForSet().size ("set1");
//求差集
set = redisTemplate.opsForSet().difference ("set1","set2");
//求并集
set = redisTemplate.opsForSet().intersect ("set1","set2");
//判断是否集合中的元素
boolean exists = redisTemplate.opsForSet().isMember("set1", "vl");
//获取集合所有元素
set = redisTemplate.opsForSet().members ("set1");
//从集合中随机弹出一个元素
String val = (String)redisTemplate.opsForSet().pop("set1");
//随机获取一个集合的元素
val = (String) redisTemplate.opsForSet().randomMember("set1");
//随机获取2个集合的元素
List list = redisTemplate.opsForSet ().randomMembers ("set1", 2L);
//删除一个集合的元素,参数可以是多个
redisTemplate.opsForSet().remove ("setl","v1");
//求两个集合的并集
redisTemplate.opsForSet().union ("set1","set2");
//求两个集合的差集,并保存到集合diff_set中
redisTemplate.opsForSet().differenceAndStore("set1", "set2", "diff_set");
//求两个集合的交集,并保存到集合inter_set中
redisTemplate.opsForSet().intersectAndStore("set1","set2" "inter_set");
//求两个集合的并集,并保存到集合union_set中
redisTemplate.opsForSet().unionAndStore ("set1", "set2", "union_set");

上面的注释已经详细地描述了代码的含义,这样我们就可以在实践中使用 Spring 操作 Redis 的集合了。

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

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

相关文章

达尔豪西大学 计算机科学,达尔豪西大学计算机科学硕士专业.pdf

达尔豪西大学计算机科学硕士专业.pdf留学监理服务网达尔豪西大学计算机科学 - Computer Science基本信息所 达尔豪西大 所属 学 - 在计算机科学学院学 Dalhousie 院校 University 系专 学计算机科学业 历- Computer 硕士名 层Science称 次授 专予 计算机科学 业计算机与信息科学…

Redis有序集合详解

有序集合和集合类似,只是说它是有序的,和无序集合的主要区别在于每一个元素除了值之外,它还会多一个分数。分数是一个浮点数,在 Java 中是使用双精度表示的,根据分数,Redis 就可以支持对分数从小到大或者从…

如何为你的网站启用HTTPS

步骤一:获取SSL/TLS证书 选择SSL证书提供商: 选择一家可信赖的SSL证书提供商。对于小型网站,JoySSL提供的免费证书是一个不错的选择。购买或申请证书: 根据你的网站需求,购买相应类型的SSL证书。证书的类型包括单域、…

紫金计算机网络,南京理工大学紫金学院《计算机网络技术》考试复习题集试题(卷)(含答案解析)2.doc...

一、选择题:(每题2分,共40分)1.在TCP/IP参考模型中,TCP协议工作在( )。A、应用层 B、传输层 C、互联网层 D、网络接口层2.下列( )是合法的E-mail地址。A、mnetwork B、mnetworkC、mnetwork.ecjtu.jxonline D、3&#x…

Redis HyperLogLog常用命令

基数并不是存储元素,存储元素消耗内存空间比较大,而是给某一个有重复元素的数据集合(一般是很大的数据集合)评估需要的空间单元数,所以它没有办法进行存储,加上在工作中用得不多,我们要介绍一下…

大学计算机课程第六章答案,大学计算机网络课程第六章.ppt

大学计算机网络课程第六章.ppt第6章 文件管理 6.1 文件的概念 6.1 文件的概念 6.1 文件的概念 6.1 文件的概念 6.1 文件的概念 6.1 文件的概念 6.1 文件的概念 6.1 文件的概念 6.1 文件的概念 6.1 文件的概念 6.1 文件的概念 6.2 目录结构 6.2 目录结构 6.2 目录结构 6.2 目录结…

德州计算机速成班培训,德州办公软件培训速成班

德州办公软件培训速成班?公文管理主要负责公文的发送与接收工作,发送流程按照流程定制来完成,所以还包括流程定制功能。这三大块是OA的核心部分,实现也为复杂,特别是流程定制功能,是一个非常灵活的模块&…

Redis的基础事务

Redis 存在事务,尽管它没有数据库那么强大,但是它还是很有用的,尤其是在那些需要高并发的网站当中。 使用 Redis 读/写数据要比数据库快得多,如果使用 Redis 事务在某种场合下去替代数据库事务,则可以在保证数据一致性…

音乐美术计算机在中考,2022年音乐、美术进中考?教育部最新回应...

原标题:2022年音乐、美术进中考?教育部最新回应...国务院日前印发《关于全面加强和改进新时代学校体育工作的意见》和《关于全面加强和改进新时代学校美育工作的意见》。10月16日,在教育部新闻发布会上,教育部体育卫生与艺术教育司…

Redis事务回滚深入

对于 Redis 而言,不单单需要注意其事务处理的过程,其回滚的能力也和数据库不太一样,这也是需要特别注意的一个问题——Redis 事务遇到的命令格式正确而数据类型不符合,如图所示。 从图中可知,我们将 key1 设置为字符串…

计算机辅助设计的发展及应用,计算机辅助设计的发展与应用

计算机维普资讯 http://doc.xuehai.net第 1卷第 34 2、期19 98年 9月株洲工学院学报V 11 o34 o 2N .、 .J OURNAL OF HUZ Z HOU NS TUTE OF TEC I TI HNOL OGY S p 1 9 e .98⑦计算机辅助设计的发展与应用7摘要廖建勇(洲工学院株株洲 420) 1 0 87讨论计算机辅助设计( AD) c技术…

Java 画圆

Java控制台画圆 画空心圆 完整代码: //空心圆 import java.util.Scanner; class circle2 { public static void main(String[] args) { new circle2().print();} //画圆函数void print() {System.out.println("输入半径:"); Sca…

智能控制和计算机控制的区别,解析智能控制技术是什么及与传统控制的区别

描述智能控制是什么智能控制(intelligent controls)在无人干预的情况下能自主地驱动智能机器实现控制目标的自动控制技术。对许多复杂的系统,难以建立有效的数学模型和用常规的控制理论去进行定量计算和分析,而必须采用定量方法与定性方法相结合的控制方…

C++ 画直线

使用C画直线 完整代码 #include "graphics.h" int main() {int driver,mode,i;float x0,y0,y1,x1;float j12,k;driverVGA;modeVGAHI;initgraph(&driver,&mode,"");setbkcolor(GREEN);x0263;y0263;y1275;x1275;for(i0;i<18;i){setcolor(5);lin…

计算机系统性错误,《深入理解计算机系统-异常》

现代操作系统通过使控制流发生突变来对某些意外情况(磁盘读写数据准备就绪、硬件定时器产生信号等)做出反应。一般而言&#xff0c;我们把这些突变命名为异常控制流(Exceptional Contral Flow ECF)。异常控制流发生在计算机系统的各个层次。比如&#xff0c;在硬件层&#xff0…

C 画矩形

使用C画矩形 使用C语言的相关知识在控制台输出一个矩形。 完整代码 #include "graphics.h" int main() {int x0,y0,y1,x1,driver,mode,i;driverVGA;modeVGAHI;initgraph(&driver,&mode,"");setbkcolor(YELLOW);x0263;y0263;y1275;x1275;for(i0;…

中职计算机组成原理期末,计组期末复习

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼(1)阶码和尾数均为原码。(2)阶码和尾数均为补码。(3)阶码为移码&#xff0c;尾数为补码。解&#xff1a;据题意画出该浮点数的格式&#xff1a;阶符1位阶码4位数符1位尾数10位将十进制数转换为二进制: x1 -27/1024-0.0000011011B …

C++ 画圆

C画圆 使用C技术在控制台输出一个圆形。 完整代码 # define PAI 3.1415926 # define B 0.809 # include "graphics.h" #include "math.h" int main() {int i,j,k,x0,y0,x,y,driver,mode;float a;driverCGA;modeCGAC0;initgraph(&driver,&mode,&…

C 画图

使用C语言画图 使用C语言相关知识画图。 完整代码 #include "graphics.h" #define LEFT 0 #define TOP 0 #define RIGHT 639 #define BOTTOM 479 #define LINES 400 #define MAXCOLOR 15 int main() {int driver,mode,error;int x1,y1;int x2,y2;int dx1,dy1,dx2,…

计算机基础 英文版本,计算机基础,全英文版的.ppt

“Introduction to Computer Science”;“Introduction to Computer Science”;Contents;Chapter 1 Computers and digital basics ;Section A all things digital;A computer network is a group of computers linked by wired or wireless technology to share data and reso…