redis 管道(Pipelining)

有时,我们需要采用异步方式,一次发送多个指令,不同步等待其返回结果。

利用pipeline的方式从client打包多条命令一起发出,不需要等待单条命令的响应返回,

而redis服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端(ps:有点类似存储过程的特点)。

这样可以取得非常好的执行效率。这就是管道,调用方法如下:

@Test
public void test4Pipelined() {
    Jedis jedis = new Jedis("localhost");
    Pipeline pipeline = jedis.pipelined();
    long start = System.currentTimeMillis();
    for (int i = 0; i < 100000; i++) {
        pipeline.set("p" + i, "p" + i);
    }
    List<Object> results = pipeline.syncAndReturnAll();
    long end = System.currentTimeMillis();
    System.out.println("Pipelined SET: " + ((end - start)/1000.0) + " seconds");
    jedis.disconnect();
}

内存数据库和普通数据库,优化的方式都差不多,连接池啊,批处理啊,乐观锁啊应该都是有的。
时间: 2024-12-19 05:34:27

redis 管道(Pipelining)的相关文章

Redis 管道技术

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应. 服务端处理命令,并将结果返回给客户端. Redis 管道技术 Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应. 实例 查看 redis 管道,只需要启动 redis 实例并输入以下命令: $(echo -en "PING\r\n SE

使用Redis管道提升性能

Redis 的 管道 (pipelining)是用来打包多条无关命令批量执行,以减少多个命令分别执行带来的网络交互时间.在一些批量操作数据的场景,使用管道可以显著提升 Redis 的读写性能. 原理演示 Redis 的管道实质就是命令打包批量执行,多次网络交互减少到单次.使用管道和不使用管道时的交互过程如下: 我们使用 nc 命令来直观感受下 Redis 管道的使用过程: # 安装nc命令 $ yum install nc # nc打包多个命令 $ (printf "PING\r\nPING\r

Redis(六)管道(Pipelining)

管道技术并不是Redis特有的,管道技术在计算机科学中有很多地方的应用. 来自wiki的解释: In computing, a pipeline, also known as a data pipeline,[1] is a set of data processing elements connected in series, where the output of one element is the input of the next one. The elements of a pipe

Redis管道

管道 Redis的底层通信协议对管道(pipelining)提供了支持.通过管道可以一次性发送多条命令并在执行完后一次性将结果返回,当一组命令中每条命令都不依赖于之前命令的执行结果时就可以将这组命令一起通过管道发出.管道通过减少客户端与Redis的通信次数来实现降低往返时延累计值的目的 如果发现错误,请轻拍,欢迎留言交流,谢谢

StackExchange.Redis 管道 批量 高性能插入数据

现在用redis来做数据缓存的越来越多了,很多项目都有初始化redis数据的过程,由于初始化的数据比较大,那么该过程越快越好.这里我们以HashSet方法为例, 这里我们推荐用HashEntry[] hashFields方法传入多个fields,应为它发送的HMSET指令即批量插入数据,另一个方法发送的HSET指令. 在阅读StackExchange.Redis里面我确实没有找到pipe指令,后来发现该指令的实现是:通过CreateBatch方法实现的.源码的单元测试例子是: using Sys

第三课补充01——set类型 sorted类型命令操作详解,redis管道及事务

1. set类型的命令操作: (1)sadd命令:向key指定的set集合添加成员 ##sadd命令:是设置set集合类型的数据,sadd  <key> <mumber> [<mumber>] ##<key>不存在的时候,sadd命令创建key并向集合添加成员: ##注意,成员之间空格分隔,如果用逗号,则表示是同一个成员 ##set集合里,member是不重复的 (2)smove命令:是原子操作,将指定的member从source移动到desitinatio

PHP中利用Redis管道加快执行

$redis->muti($mode)->get($key)->set($key)->exec(): 既然是这样的, 也就是说当我要使用管道执行一万次操作的时候需要写一万次操作在muti()的后面,,,还是我找到更好的写法?设计者没有想到这个问题么?今天测试成功了 [php] view plaincopy <? php   $redis = new Redis(); $redis->connect('10.1.132.86', 6379); $pipe = $redis

redis管道(pipeline)

redis pipeline redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常 会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client.基本的通信过程如下: (Client)127.0.0.1:6379> incr x (Server)(integer) 1 (Client)127.0.0.1:6379> incr x (

day24——NoSQL简介、redis服务搭建、redis连接池、redis管道

一.Redis 安装 yum install -y epel-releaseyum install -y gcc jemalloc-devel wgetcd /usr/local/srcwget https://codeload.github.com/antirez/redis/tar.gz/2.8.21 -O redis-2.8.21.tar.gztar xf redis-2.8.21.tar.gzcd redis-2.8.21makemake PREFIX=/usr/local/redis