`
zhanghaj00
  • 浏览: 64318 次
社区版块
存档分类
最新评论

Spring-data-redis 第三天(Pipeline)

阅读更多

1.我们首先来说下pipeline(我只是 一个想自学的小人物,很多地方说的不对 请一定要一定要说一下,谢谢)

 

    Pipeline 也就是管道,也是一种设计思想,在很多web 服务器设计上都有体现,比如很出名的Netty(这是下一个学习任务) tomcat 还有Struts2 框架。所以说Pipeline 是什么呢,

    在我看来,我觉得用一个词很容易描述,工作流,一个request进来,通过管道,管道中就有很多网(filter,handler)然后从另一个口出来, 这是我理解的,但这看起来是同步的呀,也就是一条道走到黑那种,那Netty 这种是异步的呀,想了想,结合Redis中得pipeline,同样 我们先设定管道,然后把一条条request 也就是set get 操作放入管道中,然后一起执行,这个过程中 和普通的没有Redis Pipeline有什么区别,

  非pipleline模式:

    Request---->执行

    ---->Response

    Request---->执行

    ---->Response

    Pipeline模式下:

    Request---->执行,Server将响应结果队列化

    Request---->执行,Server将响应结果队列化

    ---->Response

    ---->Response

    Client端根据Redis的数据协议,将响应结果进行解析,并将结果做类似于“队列化”的操作。

 

这个异步的过程看起来就很明白了,也明白了为什么要使用Pipeline 的效率高了。

 

2 Jedis 中Pipeline的操作:

 

Pipeline p1 = jedis.pipelined();  
        p1.incr(key);  
        System.out.println("Request incr");  
        p1.incr(key);  
        System.out.println("Request incr");  
        //结束pipeline,并开始从相应中获得数据  
        List<Object> responses = p1.syncAndReturnAll();  
        if(responses == null || responses.isEmpty()){  
            throw new RuntimeException("Pipeline error: no response...");  
        }  
        for(Object resp : responses){  
            System.out.println("Response:" + resp.toString());//注意,此处resp的类型为Long  
        }  

 

那么Spring-data-redis 中是怎么支持Pipeline的呢?

这个我也想问!!!

 

我看了最新的源码,最后还是发现还是要用和事务的调用方法一样,要使用redisTemplate 中的 rediscallback 中的connection 也就是 我们在Spring 配置文件中注入的redisconnection,这货不是我们原生态的Jedis操作么。Spring-data-redis 也就是提供了一个配饰器吧。 把不同的Redis 的Java API 给整合在一起,有没有大牛教教我我这么理解对不对,要是错的话应该是什么,把这个帖子发到技术,应该能有大牛给解释下。先跪谢了。

 

 更新:

我用的版本和github版本不一样! 最新的spring-data-redis 中 有支持pipeline的方法

public List<Object> executePipelined(final SessionCallback<?> session, final RedisSerializer<?> resultSerializer) {
		Assert.isTrue(initialized, "template not initialized; call afterPropertiesSet() before using it");
		Assert.notNull(session, "Callback object must not be null");

		RedisConnectionFactory factory = getConnectionFactory();
		// bind connection
		RedisConnectionUtils.bindConnection(factory);
		try {
			return execute(new RedisCallback<List<Object>>() {
				public List<Object> doInRedis(RedisConnection connection) throws DataAccessException {
					connection.openPipeline();
					boolean pipelinedClosed = false;
					try {
						Object result = executeSession(session);
						if (result != null) {
							throw new InvalidDataAccessApiUsageException(
									"Callback cannot return a non-null value as it gets overwritten by the pipeline");
						}
						List<Object> closePipeline = connection.closePipeline();
						pipelinedClosed = true;
						return deserializeMixedResults(closePipeline, resultSerializer, hashKeySerializer, hashValueSerializer);
					} finally {
						if (!pipelinedClosed) {
							connection.closePipeline();
						}
					}
				}
			});
		} finally {
			RedisConnectionUtils.unbindConnection(factory);
		}
	}

 

还有昨天的事务,最新的springdataredis中 也对multi方法做了处理,还是要看最新的东西,,旧的还是不全

 

分享到:
评论
3 楼 yeohx 2019-03-01  
请问是否使用过rediccluser:例如:
    @Bean
    RedisClusterConfiguration redisClusterConfiguration(){
        List<String> nodes = new ArrayList<>();
        nodes.add("192.168.145.141:7001");nodes.add("192.168.145.141:7002");nodes.add("192.168.145.141:7003");
        nodes.add("192.168.145.141:7004");nodes.add("192.168.145.141:7005");nodes.add("192.168.145.141:7006");
        RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(nodes);
        return redisClusterConfiguration;
    }
    @Bean("redisConnectionFactory")
    JedisConnectionFactory redisConnectionFactory(){
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration());
        return jedisConnectionFactory;
    }
    @Bean("redisCacheManager")
    public RedisCacheManager redisCacheManager() {
        return RedisCacheManager.create(redisConnectionFactory());
    }
我在使用 redisCacheManager.getCache()时候失败
2 楼 zhanghaj00 2014-04-18  
finallygo 写道
应该不是你理解的这样,应该是客户端把命令都缓存了,之后一次性发送到服务器端执行,之后服务端再将结果放到队列中依次返回客户端, 具体参考:http://redis.io/topics/pipelining

没有 我贴的那个是异步管道的思想,redis 中pipeline 和 事务 都是一次全部发送到客户端吧, 哎。。。。。。好难搞呀
1 楼 finallygo 2014-04-18  
应该不是你理解的这样,应该是客户端把命令都缓存了,之后一次性发送到服务器端执行,之后服务端再将结果放到队列中依次返回客户端, 具体参考:http://redis.io/topics/pipelining

相关推荐

    【岗位说明】销售副经理职能说明书.xls

    【岗位说明】销售副经理职能说明书

    西门子变频器 SINAMICS STARTER V5.6 HF1 软件 STARTER V56 STARTERV56HF1 ISO 003

    西门子变频器 SINAMICS STARTER V5.6 HF1 软件 STARTER V56 STARTERV56HF1 ISO 003

    农用喷雾机市场规模:预计2031年年复合增长率(CAGR)为2.7%

    农用喷雾机市场:2024年全球农用喷雾机市场销售额达到了22.49亿美元 在农业机械化的浪潮中,农用喷雾机作为植保机械的重要一环,正经历着前所未有的变革。从手动到背负式,再到车载式,技术的每一次飞跃都标志着农业生产方式的升级。如今,随着对高效、精准和环保喷洒设备需求的激增,农用喷雾机市场迎来了前所未有的发展机遇。那么,在这片充满潜力的市场中,如何精准把握趋势,抢占先机? 市场概况: 根据QYR(恒州博智)的统计及预测,2024年全球农用喷雾机市场销售额达到了22.49亿美元,预计2031年将达到27.03亿美元,年复合增长率(CAGR)为2.7%(2025-2031)。中国农用喷雾机市场规模持续扩大,2023年已达到约10.58亿元。 市场细分产品中,动力喷雾机(小型喷雾机)占比最重,达到40.5%,喷杆式喷雾机占比39.2%,风送式喷雾机占比20.3%。这些数据不仅反映了农业生产对高效喷雾设备的需求,也预示着未来市场的发展方向。 技术创新与趋势: 技术创新是推动农用喷雾机市场发展的重要动力。高压喷雾技术、静电喷雾技术等先进科技的引入,不仅提高了喷雾效率,还减少了化学农药的使用量,更加

    Safari_Technology_Preview_v18.2_Release_210_WebKit_20621.1.8.111.2.pkg

    Safari_Technology_Preview_v18.2_Release_210_WebKit_20621.1.8.111.2.pkg

    机械设计快走丝电火花线切割机床(毕设ug8+cad+说明书)非常好的设计图纸100%好用.zip

    机械设计快走丝电火花线切割机床(毕设ug8+cad+说明书)非常好的设计图纸100%好用.zip

    蓝桥杯java算法学习笔记(强烈推荐!!!!对新手小白非常友好)

    蓝桥杯java算法学习笔记(强烈推荐!!!!对新手小白非常友好)

    机械设计轧机机架step非常好的设计图纸100%好用.zip

    机械设计轧机机架step非常好的设计图纸100%好用.zip

    python pytorch- TextCNN TextRNN FastText Transfermer文本情感分类-数据集

    python pytorch- TextCNN TextRNN FastText Transfermer文本情感分类-数据集。资源来源于网络分享,如有侵权请告知!

    机械设计90度圆弧转弯机sw18可编辑非常好的设计图纸100%好用.zip

    机械设计90度圆弧转弯机sw18可编辑非常好的设计图纸100%好用.zip

    储能变流器三相并网电压矢量控制控制(双向充放电) 0.0~0.7s:储能向电网供电50kW 0.7 ~1.2s:电网向电池充电50kW 0.7秒电池充电切放电,电网380AC,母线电压800V,电池

    储能变流器三相并网电压矢量控制控制(双向充放电) 0.0~0.7s:储能向电网供电50kW 0.7 ~1.2s:电网向电池充电50kW 0.7秒电池充电切放电,电网380AC,母线电压800V,电池额定电压360V 包括[下] [hot]整流 逆变桥 [hot]双向buck-boost变器 [1]电池控制:电流单环控制 [2]并网控制:电压定向矢量控制,SPWM调制

    GD32F303ZKT6微控制器GPIO实验报告

    内容概要:该实验围绕GD32F303ZKT6微控制器的GPIO应用展开,涵盖基本实验和四个扩展实验。主要内容包括通过C语言对微控制器GPIO接口编程控制8个LED灯光流水灯效果(支持方向和延时控制)、数码管显示学号及数字循环,并涉及使用外部中断引脚响应物理按钮点击事件的处理逻辑,还包括了对GD32库函数的操作讲解及其实际应用场景介绍。此外,探讨了常见的硬件问题(如按键抖动引发的异常)及其解决办法,最后总结了实验收获。 适合人群:从事嵌入式系统学习的研究者和技术爱好者,以及有志于深入了解单片机原理及编程的学生群体。 使用场景及目标:①了解并掌握微控制器GPIO的配置与操作;②熟悉嵌入式C语言开发流程及常用库函数;③学习如何调试常见硬件故障;④加深对中断处理机制的理解;⑤练习复杂控制逻辑的设计和实施。 其他说明:文中还包含了详细的硬件接线指导和程序流图解析。

    IOS源码IOS应用源码之俄罗斯方块Demo

    IOS源码IOS应用源码之俄罗斯方块Demo提取方式是百度网盘分享地址

    前端数据采集(数据埋点).zip

    前端数据采集(数据埋点)开源数据采集 Collct.js 使用说明数据采集​​ Collect.js使用页面中引用和简单配置即可。主管职责配置 `<script> var _YS = _YS || []; _YS.push(['Url','http://127.0.0.1:3000/users?']); // 收集的平台 host,默认不需要配置 _YS.push(['systemName','myWap']); // 用户自定义收集字段 _YS.userConfig = { author: '白云飘飘' }; _YS.push(['_setAccount', 'YS-Test-1']); //_YS.push(['Action','Title']); _YS.push(['Target','a','div','button']); _YS.syserror = []; //记录客户端脚本错误 window.onerror = function(error) { try { var msg;

    postgresql-10.23.tar.gz

    postgresql-10.23.tar.gz,PostgreSQL 安装包。 PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。

    基于java+springboot+vue+mysql的体育商品推荐系统 源码+数据库+论文(高分毕业设计).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql5.7以上 部署环境:maven 数据库工具:navicat

    【岗位说明】酒店销售部文员岗位职责.doc

    【岗位说明】酒店销售部文员岗位职责

    基于springboot的贸易行业crm系统(代码+数据库+LW)

    摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于springboot的贸易行业crm系统的开发全过程。通过分析基于springboot的贸易行业crm系统管理的不足,创建了一个计算机管理基于springboot的贸易行业crm系统的方案。文章介绍了基于springboot的贸易行业crm系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本基于springboot的贸易行业crm系统有管理员和员工两个角色。管理员功能有个人中心,部门管理,员工管理,产品分类管理,产品信息管理,客户信息管理,市场活动管理,销售订单管理,配送订单管理。员工可以操作自己的个人中心,客户信息,产品信息,销售订单,配送订单,售后回访等。因而具有一定的实用性。 本站是一个B/S模式系统,采用Spring Boot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于springboot的贸易行业crm系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出

    中文心理问答数据集.zip

    中文心理问答数据集中文心理问答数据集20200505102845 条社区问答对 示例数据{ "ques_id": "eccbc87e4b5ce2fe28308fd9f2a7baf3", "ques_info": { "title": "纠结求助!,我想我心理不正常了…", "content": "lz最近喜欢一个男的,因为在大学社团一起工作,很迷恋,他的幽默风趣,他的踏实稳重… \r\n重点是!我现在有对象,因为大一的时候和高中的对象分了后随便找的一个,不是很喜欢也不是很讨厌的那种,只是不喜欢一个人那么寂寞… \r\n重点是!我现在喜欢的男的也有对象,据打听也是刚在一起的… \r\n很久都没有那么喜欢一个人了,以为自己再也找不到这种感觉了,现在满脑子都是他,也不知道该怎么面对我现在的对象了…哎,我怎么可以这", "answer_count": "1", "reward_num": -1, "ques_label": [

    神策数据官方Java埋点SDK,是一款轻量级的Java端的数据采集埋点SDK .zip

    神策数据官方Java埋点SDK,是一款轻量级的Java端的数据采集埋点SDK。神策简介神策数据(传感器Data),隶属于神策网络科技(北京)有限公司,是一家专业的大数据分析服务公司,大数据分析行业开拓者,为客户提供深度行为用户分析平台、以及专业的咨询服务和行业解决方案,致力于帮助客户实现数据驱动。神策数据立足大数据及用户行为分析的技术与实践前沿,业务现已覆盖以互联网、金融、零售快消、高科技、制造等为代表的十多个主要行业、并可支持企业多个职能部门。公司总部位于北京,并在上海、深圳、合肥、武汉等地拥有本地化的服务团队,覆盖东区及南区市场公司拥有专业的服务团队,为客户提供多元化的客户服务。公司在大数据领域积累的核心关键技术,包括海量数据采集、存储、清理、分析挖掘、可视化、智能应用、安全与隐私保护等领域。更多的SDK简介神策数据官方Java埋点SDK,是一款针对Java端的数据采集埋点SDK的轻量级使用说明使用方法请参考文档https://manual.sensorsdata.cn/sa/latest/java-sdk-1573929.html新产品推荐《数据驱动从

    30天开发操作系统 第 11 天 - 制作窗口

    第十一天

Global site tag (gtag.js) - Google Analytics