一般情况下,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
相关文章:
如何用好域名打造高点击率的自主建站?
怎么将XML数据可视化 D3.js加载XML
网站制作软件免费下载安装,有哪些免费下载的软件网站?
建站之星与建站宝盒如何选择最佳方案?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何快速搭建高效WAP手机网站吸引移动用户?
如何快速查询网址的建站时间与历史轨迹?
企业微网站怎么做,公司网站和公众号有什么区别?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
C#怎么创建控制台应用 C# Console App项目创建方法
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
微课制作网站有哪些,微课网怎么进?
如何在万网自助建站中设置域名及备案?
Android使用GridView实现日历的简单功能
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
外贸公司网站制作,外贸网站建设一般有哪些步骤?
建站之星会员如何解锁更多建站功能?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
建站之星免费版是否永久可用?
建站主机选哪家性价比最高?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何在云主机上快速搭建网站?
*服务器网站为何频现安全漏洞?
建站之星如何实现五合一智能建站与营销推广?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
定制建站流程步骤详解:一站式方案设计与开发指南
已有域名如何快速搭建专属网站?
如何通过虚拟主机快速完成网站搭建?
Python多线程使用规范_线程安全解析【教程】
网站制作公司排行榜,抖音怎样做个人官方网站
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
建站之星2.7模板快速切换与批量管理功能操作指南
网站设计制作企业有哪些,抖音官网主页怎么设置?
如何选择建站程序?包含哪些必备功能与类型?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
内部网站制作流程,如何建立公司内部网站?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
c# 在高并发场景下,委托和接口调用的性能对比
如何挑选最适合建站的高性能VPS主机?
建站之星2.7模板:企业网站建设与h5定制设计专题
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何在Golang中指定模块版本_使用go.mod控制版本号
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
*请认真填写需求信息,我们会在24小时内与您取得联系。