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,一经查实,立即删除!

相关文章

Redis有序集合详解

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

如何为你的网站启用HTTPS

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

Redis HyperLogLog常用命令

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

Redis的基础事务

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

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;…

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,…

C 杨辉三角形

使用C语言实现杨辉三角形 C语言使用循坏输出10行的杨辉三角形。 完整代码&#xff1a; #include <stdio.h>int main() {int i,j;int a[10][10];printf("\n");for(i0;i<10;i) {a[i][0]1;a[i][i]1;}for(i2;i<10;i)for(j1;j<i;j)a[i][j]a[i-1][j-1]a[…

计算机项目开发流程,产品开发项目建议流程图怎样画

产品开发项目建议流程图怎样画2019-01-14 10:30:270点赞3收藏0评论每一个新产品即将问世的时候会对其进行一系列的测试&#xff0c;测试的结果以及需要更改的地方我们会用表格将其整理起来&#xff0c;流程图就是一个比较实用的图表&#xff0c;可以清晰的看到整件事情的操作流…

C 画点

C语言画点 使用C语言画点。 完整代码 #include "stdio.h" #include "graphics.h" int main() {int i,j,driverVGA,modeVGAHI;initgraph(&driver,&mode,"");setbkcolor(YELLOW);for(i50;i<230;i20)for(j50;j<230;j)putpixel(i,j…

C 画椭圆

C语言画圆 使用C语言画椭圆。 完整代码 #include "stdio.h" #include "graphics.h" #include "conio.h" int main() {int x360,y160,driverVGA,modeVGAHI;int num20,i;int top,bottom;initgraph(&driver,&mode,"");topy-30…

C++ 画图

使用C画图 C实现画图&#xff0c;采用ellipse and rectangle实现。 完整代码 #include "stdio.h" #include "graphics.h" #include "conio.h" main() {int driverVGA,modeVGAHI;int i,num15,top50;int left20,right50;initgraph(&driver,…

计算机办公价格,公职人员,你的办公电脑最少要用6年,而价格不能超过这个数?...

小王&#xff0c;是个公职人员&#xff0c;每天的工作&#xff0c;都离不开电脑。可是&#xff0c;他的电脑最近似乎不太给力&#xff0c;而且动不动就死机。有一次&#xff0c;领导在开会前&#xff0c;着急要个发言材料&#xff0c;就把这活安排给了小王。还有一个小时&#…

C 画美丽的图案

C语言画图案 使用C语言技术画一个美丽的图案在控制台输出。 完整代码 #include "graphics.h" #include "math.h" #include "dos.h" #include "conio.h" #include "stdlib.h" #include "stdio.h" #include &quo…