开始实验这个,是因为Redis实战.pdf上面有例子。

上面用的是 org.jredis包,可是发现这个包不在maven的公共仓库里。需要先下载然后放在本地,导入maven依赖。详见:

http://blog.csdn.net/zhu_tianwei/article/details/44900955

https://github.com/alphazero/jredis

在Redis实战.pdf上也有例子。

而Maven公共仓库提供的是jedis包。网上也有例子:

http://www.tuicool.com/articles/aeuAfaN

就用这个包来实验吧。

代码如下,注意,加了auth的密码验证:

package com.myapp.redisdemo;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Response; import java.util.HashMap;
import java.util.Map;
import java.util.Set; /**
* Created by baidu on 16/10/16.
*/
public class RedisDemo { public static void main(String[] args) {
String redisIP = "10.117.146.16";
int redisPort = 6379;
Jedis jedis;
try {
jedis = new Jedis(redisIP, redisPort);
jedis.auth("[用户名]");
jedis.select(8);
}
catch (Exception e) {
e.printStackTrace();
System.out.printf("初始化Redis连接错误:%s, %d", redisIP, redisPort);
return;
} jedis.flushDB();
long start = System.currentTimeMillis();
notusePipeline(jedis);
long end = System.currentTimeMillis();
System.out.printf("不使用Pipeline的方式用时:%d毫秒", end-start); jedis.flushDB();
start = System.currentTimeMillis();
usePipeline(jedis);
end = System.currentTimeMillis();
System.out.printf("使用Pipeline的方式用时:%d毫秒", end-start); } private static void notusePipeline(Jedis jedis) {
Map<String, String> mp = new HashMap<String, String>();
try {
for (int i=0; i<10000; i++) {
mp.clear();
mp.put("k"+i, "v"+i);
jedis.hmset("keys"+i, mp);
}
}
catch (Exception e) {
e.printStackTrace();
}
} private static void usePipeline(Jedis jedis) {
Map<String, String> mp = new HashMap<String, String>();
try {
Pipeline pl = jedis.pipelined();
for (int i=0; i<10000; i++) {
mp.clear();
mp.put("k"+i, "v"+i);
pl.hmset("keys"+i, mp);
}
pl.sync();
}
catch (Exception e) {
e.printStackTrace();
}
}
}

运行(不用配置,直接命令行运行),报错:

初始化Redis连接错误:10.117.146.16, 6379

判断因为是需要把端口设置到8000以上。

所以把Redis主库的端口改到了8379,从库的端口保持不变(注意改下从库里主从同步的端口)。

另外,10000次操作实在太慢了,所以改到了1000次。(运行过程中,可以select 8,然后dbsize来看已经插入了多少条)。

现在能够运行成功了,运行结果如下:

开始运行不使用Pipeline的方式
不使用Pipeline的方式用时:72464毫秒
开始运行使用Pipeline的方式
使用Pipeline的方式用时:173毫秒 Process finished with exit code 0

不用Pipeline的方式,跑了72秒多,平均每秒操作十多条数据。

而采用Pipeline的方式,只运行了173毫秒,吞吐量提高非常多。

这也说明了:大量的时间是在网络交互上,Redis本身处理能力是很强的。

用更大量的数据来试一下Pipeline的时间。

10000条:
开始运行使用Pipeline的方式
使用Pipeline的方式用时:769毫秒 50000条:
开始运行使用Pipeline的方式
使用Pipeline的方式用时:1275毫秒 100000条:
开始运行使用Pipeline的方式
使用Pipeline的方式用时:7297毫秒

注意,量非常大的时候,以前用Python的经验是,Pipeline会出错。不知道Jedis本身会不会做优化。还是需要使用的时候,有所注意。

在降低网络传输消耗,提高吞吐量,和保证每次操作成功性方面做一个好的平衡。

现在db 8里面有100000条数据,可以flushdb来删除本db的数据,然后就可以用之前学到的命令 bgrewriteaof来压缩aof文件了。

Java实现Redis pipeline比较的更多相关文章

  1. redis pipeline

    redis pipeline 简而言之就是把多个redis命令打包,一起发送给redis server,并且一起返回结果,减少客户端和服务器之间的多次“折返跑”

  2. java操作redis之jedis篇

    首先来简单介绍一下jedis,其实一句话就可以概括的,就是java操作redis的一种api.我们知道redis提供了基本上所有常用编程语言的clients,大家可以到http://redis.io/ ...

  3. Java连接redis的使用演示样例

    Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...

  4. Java的redis 操作类-优化通用版本

    java操作redis多节点处理方式;http://blog.itpub.net/29254281/viewspace-1188644/首先maven引入依赖包 <dependency> ...

  5. redis学习心得之三-【java操作redis】

    今天主要是讲讲java对redis的操作,来段代码掩饰下基本操作即可明白. java调用你需要下载jedis.jar包 下载网址:https://github.com/xetorthio/jedis/ ...

  6. java 操作redis

    使用Java操作Redis需要jedis-2.1.0.jar,如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar package com.test; import ja ...

  7. java操作redis redis连接池

    redis作为缓存型数据库,越来越受到大家的欢迎,这里简单介绍一下java如何操作redis. 1.java连接redis java通过需要jedis的jar包获取Jedis连接. jedis-2.8 ...

  8. java 操作 redis

    1.Java 使用 Redis 只需要下载一个jar包即可 地址:http://maven.outofmemory.cn/redis.clients/jedis/2.5.2/ 工程

  9. java 使用redis 数据库

    [TOC] java 使用redis 数据库 连接redis package com.wsc.redis.Test1; import java.util.List; import java.util. ...

随机推荐

  1. django “如何”系列3:如何编写模型域(model filed)

    django自带很多的域类--CharField,DateField等等--,如果django的这些域都不能满足你精确的要求,那么你可以编写自己的模型域. django自带的域没有和数据库列类型一一对 ...

  2. POJ-2563

    Pick-up sticks Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10364   Accepted: 3842 D ...

  3. Next Permutation&&Permutation Sequence

    Next Permutation Implement next permutation, which rearranges numbers into the lexicographically nex ...

  4. Permutations I&&II

    Permutations I Given a collection of distinct numbers, return all possible permutations. For example ...

  5. Mysql 中的Text字段的范围

    mysql中text 最大长度为65,535(2的16次方–1)字符的TEXT列.如果你觉得text长度不够,可以选择 MEDIUMTEXT最大长度为16,777,215. LONGTEXT最大长度为 ...

  6. .NET 二进制序列化器,SOAP序列化器,XML序列化器

    这里就不说JSON序列化了,只介绍三种:二进制序列化器,SOAP序列化器,XML序列化器 直接上代码: /// <summary> /// 二进制序列化器. /// 最节省流量,压缩程度最 ...

  7. 如何去除windows下文本的^M

    使用vi编辑,输入命令: :%s/^M/\r/g 用来把^M换成回车 注意的是^M要使用CTRL-V CTRL-M生成,而不是直接键入^M

  8. TarjanLCA学习笔记

    1.前言 首先我们介绍的算法是LCA问题中的离线算法-Tarjan算法,该算法采用DFS+并查集,再看此算法之前首先你得知道并查集(尽管我相信你如果知道这个的话肯定是知道并查集的),Tarjan算法的 ...

  9. Flask实战第59天:首页帖子布局完成

    编辑front_index.html <div id="carousel-example-generic" class="carousel slide index- ...

  10. 【Floyd】POJ2139 -Six Degrees of Cowvin Bacon

    普通的Floyd了分分秒可以水过,结果在submit前删调试段落的时候把程序本体给删了吃了两个WA…… #include<iostream> #include<cstring> ...