Redis管道-pipeline

Redis Pipeline管道使用 1.Redis单条命令使用场景 Redis客户端连接到Redis服务端执行一条命令需要经历的步骤如下: 以上过程称为Round Trip Time(RTT,往返时间),mget和mset命令节约了RTT,但是大部分指令不支持批量操作。 Redis通过TCP来对外提供服务,Client通过Socket连接发起请求,每个请求在命令发出后会阻塞等待Redis服务器进行处理,处理完毕后将结果... 阅读详情

Redis管道的作用

使用pipeline的方式将命令打包发送,redis必须在处理完所有命令前先缓存起所有命令的处理结果。

当我们使用客户端对 Redis 进行一次操作时,客户端将请求传送给服务器,服务器处理完毕后,再将响应回复给客户端。这要花费一个网络数据包来回的时间。 如果连续执行多条指令,那就会花费多个网络数据包来回的时间。
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。

Redis 管道 (Pipeline) 本身并不是 Redis 服务器直接提供的技术,这个技术本质上是由客户端提供的。

Redis管道常用方法

pipelined():开启管道
sync():将管道中的命令发送给Redis执行
syncAndReturnAll():将管道中的命令发送给Redis执行,并返回结果。返回结果是一个按命令执行顺序返回的list,

注意:无法在管道开启中获取到查询操作的结果,必须等待执行sycn()后才能获取到结果


小知识点 try-with-resource

所有实现了 java.lang.AutoCloseable 接口(其中,它包括实现了 java.io.Closeable 的所有对象),使用try-with-resource语法,无需自己编写close方法。jdk底层会自动帮我们调用close方法

try(Resource res = new Resource()) {
	res.doSome();
} catch(Exception ex) {
	ex.printStackTrace();
}

使用Demo

package com.study.redis管道pipeline;

import java.util.List;

import org.apache.log4j.Logger;

import com.study.utils.RedisSimplePool;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;

package com.study.redis管道pipeline;

import java.util.List;

import org.apache.log4j.Logger;

import com.study.utils.RedisSimplePool;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
/**
 * 
 * @描述: 使用redis 管道Pipeline,将命令打包推送,按顺序返回执行结果 
 *       中间某个命令执行报错,并不会影响后面命令的执行。报错会返回一个异常对象JedisDataException
 * @版权: Copyright (c) 2020 
 * @公司: 
 * @作者: 严磊
 * @版本: 1.0 
 * @创建日期: 2020年5月31日 
 * @创建时间: 上午11:06:07
 */
 public class RedisPipeline
{
    private static final Logger logger        = Logger.getLogger(RedisPipeline.class);
    
    public static void main(String[] args)
    {
        Jedis jedis = RedisSimplePool.getJedis();
        
        //try-with-resource Resource的定义:所有实现了 java.lang.AutoCloseable 接口(其中,它包括实现了 java.io.Closeable 的所有对象),可以使用作为资源
        try (Pipeline pipeline = jedis.pipelined())
        {
            String key = "pipeline_map_key1";
            pipeline.hset(key, "field1", "value1");
            pipeline.hset(key, "field2", "value2");
            pipeline.hset(key, "field3", "value3");
            pipeline.expire(key, 30);//过期时间30秒
            
            Response<String> hgetResponse = pipeline.hget(key, "field3");
            System.out.println("在管道操作的中途,无法获取到结果:"+hgetResponse);
            
            pipeline.incrBy("pipeline_map_key1", 1);//报错  redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value
            
            key = "pipeline_map_key2";
            pipeline.hset(key, "field1", "value1");
            pipeline.hset(key, "field2", "value2");
            pipeline.hset(key, "field3", "value3");
            pipeline.expire(key, 60);//过期时间30秒
            
            List<Object> result = pipeline.syncAndReturnAll();
            System.out.println("管道批量执行后返回的结果:"+result);
            System.out.println("管道批量执行后可以获取到结果:"+hgetResponse.get());
        }
        catch (Exception ex)
        {
            logger.error("资源关闭时发生Exception", ex);
        }
        RedisSimplePool.returnJedis(jedis);
    }
}



参考链接:https://www.cnblogs.com/yepei/p/5662734.html

Redis 管道技术—Pipeline,python交互中的使用 文章目录Redis 管道技术—Pipeline普通命令模式管道模式管道技术解决了什么问题?管道技术需要注意的事项管道使用 Redis 管道技术—Pipeline 管道技术(Pipeline)是客户端提供的一种批处理技术,用于一次处理多个 Redis 命令,从而提高整个交互的性能。 通常情况下 Redis 是单行执行的,客户端先向服务器发送请求,服务端接收并处理请求后再把结果返回给客户端,这种处理模式在非频繁请求时不会有任何问题。 但如果出现集中大批量的请求时,因为每个请求都要经历先请求再响应的过程,这就会造 阅读详情

相关推荐

redis管道命令pipeline的使用

阅读目录1 redis管道技术的诞生原因2 正常命令和管道命令流程图3 注意事项4 时间消耗对比 1 redis管道技术的诞生原因 redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。 因此无论是发出请求还是接收响应,都必须经过网络传输。 即客户端必须接收到服务端完整的响应,才能进行后续请求。 网络传输不可避免的会造成一定的延迟,特别是在跨机器远程访问redis的时候。 一条命令对应一次请求和响应的话,大量命令累计的延迟会显得很高。 所以诞生了redis管道命令。 2 正常命令和管道命令流

wgchen 1109

redis pipeline和直接hset写入对比

性能:直接使用hset对于每个命令都会产生一次网络请求和响应,而在大量数据写入时,使用pipeline可以显著减少网络通信的开销,提升写入速度。应用场景:对于少量数据写入,直接使用hset简便快捷;而对于大量数据或需要频繁写入操作的场景,使用pipeline能带来更好的性能表现。

南军Opt的博客 752

Redis 管道技术——Pipeline

管道技术(Pipeline)是客户端提供的一种批处理技术,用于一次处理多个 Redis 命令,从而提高整个交互的性能。 通常情况下 Redis 是单行执行的,客户端先向服务器发送请求,服务端接收并处理请求后再把结果返回给客户端,这种处理模式在非频繁请求时不会有任何问题。 但如果出现集中大批量的请求时,因为每个请求都要经历先请求再响应的过程,这就会造成网络资源浪费,此时就需要管道技术来把所有的命令整...

磊哥聊Java 1050

Redis测试分析(pipeline模式推荐)

测试环境 Redis测试版本:2.2.12 使用Java Jedis客户端进行测试 测试数据量:50万, 超过2亿 速度 1) mset函数插入效率最高,插入Redis的速度达到20万条数据/秒。但是该函数所耗内存较高,对于我们实际应用一表每天2.4亿的数据量来说,需要消耗近32G内存; 2) mset函数中当m值达到200以上时,插入速度接近饱和,因此实际应用中,应设定该值 >=...

愚夫 515

AD9371实战:如何用ZCU106搭建JESD204B TX时钟链(含关键参数计算)

本文详细解析了如何基于Xilinx ZCU106开发板为AD9371搭建JESD204B TX时钟链。文章从系统需求出发,逐步推导出从IQ采样率到GTH线速率的关键参数计算公式,并提供了在Vivado中配置GTH收发器(包括QPLL选择、分频比设置)的实战步骤与调试技巧,旨在帮助硬件工程师快速实现稳定可靠的JESD204B高速数据传输链路。

weixin_29164843的博客 293

TC397 EB配置ADC软件触发:从零实现周期采样与中断处理

本文详细介绍了如何在Infineon AURIX TC397芯片上使用EB Tresos工具配置ADC软件触发,实现周期采样与中断处理。通过硬件连接、EB模块配置、代码初始化及数据处理的全流程解析,帮助开发者快速掌握ADC软件触发技术,提升嵌入式系统开发效率。

root9的博客 231

【Java 进阶篇】Jedis 操作 Hash:Redis中的散列类型

通过本文的介绍,你已经学会了如何使用Jedis操作Redis中的Hash类型数据。Jedis提供了简单而强大的API,使得开发者能够轻松地进行Hash类型数据的存储、获取和各种操作。同时,掌握了一些高级功能,如批量操作、增量操作等,可以更好地满足各种场景下的需求。希望通过学习本文,你对Jedis中Hash的操作有了更深入的理解,并能够灵活运用在你的项目中。在实际开发中,充分发挥Jedis的优势,将有助于提升系统性能和代码质量。

繁依Fanyi的博客 2764

openEuler 22.03 LTS SP4离线安装UKUI桌面全攻略(附依赖包下载)

本文提供openEuler 22.03 LTS SP4系统离线安装UKUI桌面环境的完整实战指南。针对无网络环境,详细解析了利用dnf工具下载依赖包、配置离线软件源、处理依赖冲突及安装后优化的全流程,并附带了关键依赖包资源,帮助运维人员高效完成图形化部署。

c7d8e9的博客 478

redis expire方式设置缓存时间的坑

最近入职后一直很忙,今天国庆值班,把前段时间遇到的问题抛出来总结一下。 1、背景 在项目中需要记录用户的相关状态,这些状态会在一天内清除,且又不止0/1这两种状态,于是考虑将其放在一个hash的key当中。 但是redis对于hash类型,并没有提供直接设置超时时间的支持,于是设计采用expire一个key的过期的时间方式来实现当日过期。 2、问题 通过观察发现,隔天的数据,在共用一个k...

禅机寒山的博客 4960

【WILEY】从Revision到Online:一次投稿的完整状态演进与关键节点实战解析

本文详细解析了从Revision到Online发表的完整投稿流程,包括修改稿准备、回复信撰写、状态跟踪等关键节点。特别针对Wiley期刊,提供了实用的操作技巧和常见问题解决方案,帮助作者高效完成论文修改与发表。

weixin_29219189的博客 361

别再折腾老教程了!树莓派4B/5最新系统(Raspberry Pi OS Bookworm)红外遥控配置,用gpio-ir驱动一次成功

本文详细介绍了树莓派4B/5在最新Raspberry Pi OS Bookworm系统下配置红外遥控的完整指南,摒弃过时的lirc-rpi驱动,采用现代gpio-ir驱动方案。从硬件连接到软件配置,提供10分钟快速上手指南,涵盖驱动加载、信号测试、按键映射及高级应用场景,帮助用户高效完成红外遥控配置。

weixin_42520909的博客 442

Redis学习日记(二):Redis 小工具及持久化

目录 七、Redis的瑞士军刀 1 . 慢查询 2 . pipeline(管道) 3 . 发布订阅 a、角色 b、模型 c、API d、订阅模式和消息队列 4 . bitmap a、这是什么? b、怎么用? c、用哪里? 5 . hyperloglog 八、Redis的持久化 1 、持久化 a、什么是持久化 b、持久化的方式 2 、RDB模式 a、什么是RDB...

CrazyZomble的博客 698

AI工具如何提升产品经理工作效率

AI工具在现代产品管理中扮演着越来越重要的角色,从需求挖掘到原型设计再到交付物制作,AI技术正在重塑产品经理的工作流程。通过自然语言处理(NLP)和机器学习(ML)技术,AI工具能够自动化处理大量重复性任务,如用户访谈转录、竞品分析、原型生成等,显著提升工作效率。以ChatGPT和Notion AI为例,这些工具可以快速生成结构化分析框架和PRD初稿,将传统需要数小时甚至数天的工作压缩到几分钟内完成。在产品设计阶段,工具如Uizard和Galileo AI能够根据文本描述自动生成可交互原型,大幅缩短设计探索

weixin_29194817的博客 241

Redis中pipeline(管道)详解

对于服务端来说,所需要的是能够处理一个客户端通过同一个TCP连接发来的多个命令,可以理解为,这里将多个命令切分,和处理单个命令一样,Redis就是这样处理的。当使用Pipeline时,它允许多个命令的读通过一次read()操作,多个命令的应答使用一次write()操作,它允许客户端可以一次发送多条命令,而不等待上一条命令执行的结果。管道是一种在Redis中提高命令批量执行效率的机制,通过将多个命令一次性发送到服务器并一次性接收响应,减少了网络通信的开销,提高了命令执行的效率。管道可以用于批量执行多个操作。

m0_67265654的博客 2281

手把手教你学simulink实例--基于Simulink的船舶动力装置性能评估与仿真

船舶动力装置是船舶运行的核心系统,其性能直接影响船舶的安全性、经济性和环保性。基于MATLAB/Simulink平台进行船舶动力装置性能评估与仿真是研究和优化船舶动力系统的重要手段。通过建模与仿真,可以分析动力装置在不同工况下的性能表现,并验证控制策略的有效性。本项目旨在构建一个完整的船舶动力装置性能评估与仿真模型,包括发动机建模、传动系统建模、负载分析以及性能评估模块,并通过仿真分析其动态响应和性能指标。

MHD0815的博客 972

PCL 欧式聚类分割【2026最新版】

PCL中欧式聚类提取算法原理详解、代码实现以及一个大自然场景地物分割提取并保存分割结果到本地文件夹的应用案例。

点云侠的博客 40万+

Redis管道(pipeline)

Redis管道

冯同学的博客 2249

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

php redis管道,redis管道pipeline的运用

Redis使用的是客户端-服务器(CS)模型和请求/响应协议的TCP服务器。这意味着通常情况下一个请求会遵循以下步骤:客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。服务端处理命令,并将结果返回给客户端。普通模式与管道模式分析普通模式:由于通信会有网络延迟,假如client和server之间的包传输时间需要0.125秒。那么上面的三个命令6个报文至少需要0...

weixin_33350741的博客 603

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Redis管道命令Pipeline使用

Redis管道技术Pipeline使用 Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。服务端处理命令,并将结果返回给客户端。 Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。 ...

qq_31459039的博客 5611

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Redis管道技术——Pipeline

这里写目录标题一级目录二级目录三级目录 一级目录 二级目录 三级目录

weixin_45414689的博客 828

【赵渝强老师】Redis的管道Pipeline

管道PipeLine通过减少客户端与Redis服务器端的通信次数来实现降低往返延时时间,而且管道PipeLine 实现的原理是队列,而队列的原理是时先进先出,这样就保证数据的顺序性。提示:管道PipeLine在某些场景下非常有用,比如有多个命令需要被"及时的"提交,而且他们对相应结果没有互相依赖,对结果响应也无需立即获得,那么管道PipeLine就可以充当这种"批处理"的工具;而且在一定程度上,可以较大的提升性能,性能提升的原因主要是TCP连接中减少了"交互往返"的时间。

赵渝强老师优快云博客主页 1064

【redis】pipeline管道

Redis Pipeline(管道)是一种将多个命令批量发送到服务器的技术。与逐个发送命令的传统方式不同,Pipeline允许客户端一次性打包多条命令,通过完成批量操作。

morris 4万+

Redis Pipeline 管道 ✨

Redis Pipeline 管道Redis Pipeline 管道。

lenyan~的博客 837

Redis | 管道 —— PipeLine

在我们使用 Redis 的时候,通常是使用一条一条的命令来进行操作,比如我们可以执行一个 “set key1 value1” 这样的操作,然后再执行一个 "set key2 value" 这样的操作。Redis 是基于客户端和服务端的模式,当客户端和服务端进行通信的时候,通常会使用 Socket 来进行网络的通信。当我们执行 "set key value" 时,客户端会对服务器发送一个数据包,当我们再次执行 "set key2 value2" 时,客户端又会对服务器发送一个数据包。这样,看起来没有什么太多的

daobuxinzi的博客 886
上一篇: 可控的异步任务-FutureTask
下一篇: Redis事务
村口老师傅
博客等级 码龄9年 67粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值