博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java实现Redis pipeline比较
阅读量:6545 次
发布时间:2019-06-24

本文共 2973 字,大约阅读时间需要 9 分钟。

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

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

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

在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
mp = new HashMap
(); 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
mp = new HashMap
(); 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文件了。

 

你可能感兴趣的文章
腾讯2017暑期实习编程题3
查看>>
Intellij IDEA 构建Spring Web项目 — 用户登录功能
查看>>
[AHOI2013]作业
查看>>
git push被忽略的文件 处理
查看>>
C#中用ILMerge将所有引用的DLL打成一个DLL文件
查看>>
PHP生成HTML静态页面
查看>>
Makefile 中:= ?= += =的区别【转】
查看>>
使用makecontext实现用户线程【转】
查看>>
Comet:基于 HTTP 长连接的“服务器推”技术
查看>>
BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
查看>>
四种方法校验数组中是否包含某个指定的字符串
查看>>
29、Java并发性和多线程-非阻塞算法
查看>>
安装OpenResty开发环境
查看>>
第0课 从0开始
查看>>
hadoop无法启动DataNode问题
查看>>
java泛型中<?>和<T>区别
查看>>
这里是指推送通知跟NSNotification有区别:
查看>>
用户ID的代码生成
查看>>
win7经常出现“关闭xxxx前您必须关闭所有会话框”
查看>>
SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)
查看>>