一般情况下,Redis Client端发出一个请求后,通常会阻塞并等待Redis服务端处理,Redis服务端处理完后请求命令后会将结果通过响应报文返回给Client。

感觉这有点类似于HBase的Scan,通常是Client端获取每一条记录都是一次RPC调用服务端。
在Redis中,有没有类似HBase Scanner Caching的东西呢,一次请求,返回多条记录呢?
有,这就是Pipline。官方介绍 http://redis.io/topics/pipelining
通过pipeline方式当有大批量的操作时候,我们可以节省很多原来浪费在网络延迟的时间,需要注意到是用pipeline方式打包命令发 送,redis必须在处理完所有命令前先缓存起所有命令的处理结果。打包的命令越多,缓存消耗内存也越多。所以并不是打包的命令越多越好。
使用Pipeline在对Redis批量读写的时候,性能上有非常大的提升。
Java测试了一下:
package com.lxw1234.redis;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Response;
public class Test {
public static void main(String[] args) throws Exception {
Jedis redis = new Jedis("127.0.0.1", 6379, 400000);
Map<String,String> data = new HashMap<String,String>();
redis.select(8);
redis.flushDB();
//hmset
long start = System.currentTimeMillis();
//直接hmset
for (int i=0;i<10000;i++) {
data.clear();
data.put("k_" + i, "v_" + i);
redis.hmset("key_" + i, data);
}
long end = System.currentTimeMillis();
System.out.println("dbsize:[" + redis.dbSize() + "] .. ");
System.out.println("hmset without pipeline used [" + (end - start) / 1000 + "] seconds ..");
redis.select(8);
redis.flushDB();
//使用pipeline hmset
Pipeline p = redis.pipelined();
start = System.currentTimeMillis();
for (int i=0;i<10000;i++) {
data.clear();
data.put("k_" + i, "v_" + i);
p.hmset("key_" + i, data);
}
p.sync();
end = System.currentTimeMillis();
System.out.println("dbsize:[" + redis.dbSize() + "] .. ");
System.out.println("hmset with pipeline used [" + (end - start) / 1000 + "] seconds ..");
//hmget
Set<String> keys = redis.keys("*");
//直接使用Jedis hgetall
start = System.currentTimeMillis();
Map<String,Map<String,String>> result = new HashMap<String,Map<String,String>>();
for(String key : keys) {
result.put(key, redis.hgetAll(key));
}
end = System.currentTimeMillis();
System.out.println("result size:[" + result.size() + "] ..");
System.out.println("hgetAll without pipeline used [" + (end - start) / 1000 + "] seconds ..");
//使用pipeline hgetall
Map<String,Response<Map<String,String>>> responses = new HashMap<String,Response<Map<String,String>>>(keys.size());
result.clear();
start = System.currentTimeMillis();
for(String key : keys) {
responses.put(key, p.hgetAll(key));
}
p.sync();
for(String k : responses.keySet()) {
result.put(k, responses.get(k).get());
}
end = System.currentTimeMillis();
System.out.println("result size:[" + result.size() + "] ..");
System.out.println("hgetAll with pipeline used [" + (end - start) / 1000 + "] seconds ..");
redis.disconnect();
}
}
测试结果如下:
dbsize:[10000] .. hmset without pipeline used [243] seconds .. dbsize:[10000] .. hmset with pipeline used [0] seconds .. result size:[10000] .. hgetAll without pipeline used [243] seconds .. result size:[10000] .. hgetAll with pipeline used [0] seconds ..
使用pipeline来批量读写10000条记录,就是小菜一碟,秒完。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# redis
# hgetall
# 批量写入
# 批量读写
# Redis cluster集群的介绍
# Spring-data-redis操作redis cluster的示例代码
# Windows环境下Redis Cluster环境搭建(图文)
# 如何用docker部署redis cluster的方法
# 在Redis集群中使用pipeline批量插入的实现方法
# python使用pipeline批量读写redis的方法
# 详解redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作
# redis cluster支持pipeline的实现思路
# 越多
# 服务端
# 都是
# 这就是
# 上有
# 我们可以
# 注意到
# 在对
# 越好
# 会将
# 类似于
# 非常大
# 完后
# 多条
# 前先
# 大家多多
# 通常会
# 这有
# package
# import
相关文章:
小型网站制作HTML,*游戏网站怎么搭建?
高防服务器租用指南:配置选择与快速部署攻略
如何高效利用亚马逊云主机搭建企业网站?
C#如何使用XPathNavigator高效查询XML
音响网站制作视频教程,隆霸音响官方网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何做静态网页,sublimetext3.0制作静态网页?
c# 在高并发场景下,委托和接口调用的性能对比
如何续费美橙建站之星域名及服务?
如何零基础在云服务器搭建WordPress站点?
c# 在ASP.NET Core中管理和取消后台任务
如何彻底删除建站之星生成的Banner?
如何用PHP快速搭建高效网站?分步指南
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
建站之星安装提示数据库无法连接如何解决?
如何用AWS免费套餐快速搭建高效网站?
,购物网站怎么盈利呢?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何快速搭建支持数据库操作的智能建站平台?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
h5网站制作工具有哪些,h5页面制作工具有哪些?
如何选择网络建站服务器?高效建站必看指南
C++中引用和指针有什么区别?(代码说明)
专业公司网站制作公司,用什么语言做企业网站比较好?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
如何在IIS7上新建站点并设置安全权限?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
如何快速选择适合个人网站的云服务器配置?
已有域名和空间如何快速搭建网站?
如何用景安虚拟主机手机版绑定域名建站?
建站主机核心功能解析:服务器选择与网站搭建流程指南
Swift中swift中的switch 语句
网站制作企业,网站的banner和导航栏是指什么?
网站微信制作软件,如何制作微信链接?
建站主机默认首页配置指南:核心功能与访问路径优化
零服务器AI建站解决方案:快速部署与云端平台低成本实践
北京企业网站设计制作公司,北京铁路集团官方网站?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
广德云建站网站建设方案与建站流程优化指南
济南网站建设制作公司,室内设计网站一般都有哪些功能?
家具网站制作软件,家具厂怎么跑业务?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
家庭建站与云服务器建站,如何选择更优?
视频网站制作教程,怎么样制作优酷网的小视频?
网站制作软件有哪些,制图软件有哪些?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
*请认真填写需求信息,我们会在24小时内与您取得联系。