java hgetall_详解Java使用Pipeline对Redis批量读写(hmsethgetall)
一般情况下,Redis Client端发出一个请求后,通常会阻塞并等待Redis服务端处理,Redis服务端处理完后请求命令后会将结果通过响应报文返回给Client。
感觉这有点类似于HBase的Scan,通常是Client端获取每一条记录都是一次RPC调用服务端。
在Redis中,有没有类似HBase Scanner Caching的东西呢,一次请求,返回多条记录呢?
通过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 data = new HashMap();
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 keys = redis.keys("*");
//直接使用Jedis hgetall
start = System.currentTimeMillis();
Map> result = new HashMap>();
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>> responses = new HashMap>>(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 hgetall_详解Java使用Pipeline对Redis批量读写(hmsethgetall)相关推荐
- 【java】详解Java的类文件(class文件)结构
1.概述 转载:详解Java的类文件(class文件)结构 大家好,我是二哥呀,今天我拿了一把小刀,准备解剖一下 Java 的 class 文件. CS 的世界里流行着这么一句话,"计算机科 ...
- java deepcopy_详解JAVA 深层拷贝 DeepCopy的使用方式
说到复制方法,在开发程序中要怎么复制呢?其实复制Java数组的方法很多,但大多数都是浅层复制,今天爱站技术频道小编带你寻找详解JAVA 深层拷贝 DeepCopy的使用方式. 方法实现很简单,提供两种 ...
- java命令详解 java -D
2019独角兽企业重金招聘Python工程师标准>>> JAVA 命令参数详解: 1.-D<name>=<value> set a system proper ...
- java nio详解,Java NIO API详解
Java NIO API详解 在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API.对于大多数应用来说,这样的API使用很方 便,然而,一些对 ...
- java jdbc_详解Java基础知识——JDBC
JDBC Java DataBase Connectivity,java数据库连接,为了降低操作数据的难度,java提供jdbc,按照java面向对象特点,对操作进行了很多封装. JDBC提供了很多接 ...
- Java注释详解-Java文档注释生成Java API文档
Java文档注释是一种功能强大的注释形式,如果在你所编写的程序中规范的添加文档注释,那你就可以生成一份系统正规的API文档.Java文档注释 /**文档注释内容*/,注意区分多行注释/*多行注释*/. ...
- 【java】详解java中的注解(Annotation)
目录结构: contents structure [+] 什么是注解 为什么要使用注解 基本语法 4种基本元注解 重复注解 使用注解 运行时处理的注解 编译时处理的注解 1.什么是注解 用一个词就可以 ...
- java cache详解,Java内存缓存详解
1.缓存为什么要存在 应用服务器资源是有限的,数据库每秒中接受请求的次数也是有限的.如果利用有限的资源来提供尽可能大的吞吐量呢,一个办法:减少计 算量,缩短请求流程(减少网络io或者硬盘io),这时候 ...
- byte java byte_详解java中的byte类型
Java中整数类型有:byte占8位, short 占16位, int占32位, long占64位 Java也提供了一个byte数据类型,并且是基本类型中的整数类型.java byte是作为最小的数字 ...
最新文章
- java创建node类型数据类型_[Java教程]js DOM Node类型
- 继续给力,持续一个星期位列NO.1
- 计算机网络中的时延有哪几部分,计算机网络中的四种延迟分别是什么?
- 分布式技术追踪 2018年第二十期
- 《Sibelius 脚本程序设计》连载(四十二) - 4.12 Selection
- ChannelHandler 与 ChannelPipeline 详解
- linux下(ubuntu)反删除(误删恢复)与回收站制作
- python graphviz中文乱码_graphviz画图与中文乱码等问题总结
- python取出满足条件的行_numpy ndarray 取出满足特定条件的某些行实例
- android顶部居中,如何将drawableLeft对齐到顶部,而不是在android TextView中居中?
- ssl证书 所属项目怎么上传_Typora + 七牛云图床快速配置,告别手动上传图片!...
- ogg oracle 测试kafka_云MSP技本功|基于OGG 实现Oracle到Kafka增量数据实时同步
- SAE J1939 协议源代码分析(一)-程序结构框架
- ppt设置外观样式_PPT中设置视频外观样式的方法
- css写三角兼容ie6
- 公司代码与采购组织的分配关系
- PPPD chat中文帮助
- Unity 导航系统Navigation
- php怎么定义字符串变量的值,php字符串变量怎么替换
- 破解软件的原理是什么(软件被破解公开)
热门文章
- 莎士比亚文集词频统计并行化算法
- [分治] 51Nod1472 Codeforces #549F. Yura and Developers
- 阿里云SLB负载均衡
- 关于PR安装在D盘初始化时闪退,加载到optical的时候PR直接闪退
- linux充气服务器,XenLinux balloon的实现分析
- 需求分析挑战之旅(疯狂的订餐系统)(2)——需求分析的大道理
- Asp.Net常见问题及技术实现方案(一)
- facetime 来电提醒_FaceTime应该比这更好
- 2020-11-02
- Windows Server2012 安装升级补丁更新