博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.通过Jedis访问Redis——八种调用方式
阅读量:4047 次
发布时间:2019-05-25

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

package com.gqshao.redis.connection;import org.junit.Test;import redis.clients.jedis.*;import java.util.Arrays;import java.util.List;/** * Redis的Java客户端Jedis的八种调用方式 */public class ConnectionTest {    /**     * 普通连接方式     * Simple SET: 95.437 seconds     */    @Test    public void testNormal() {        Jedis jedis = new Jedis("192.168.3.98", 6379);        long start = System.currentTimeMillis();        for (int i = 0; i < 100000; i++) {            String result = jedis.set("n" + i, "n" + i);        }        long end = System.currentTimeMillis();        System.out.println("Simple SET: " + ((end - start) / 1000.0) + " seconds");        // 销毁        jedis.close();    }    /**     * 普通连接池方式     * POOL SET: 99.789 seconds     *     */    @Test    public void testSimplePool() {        JedisPool pool = new JedisPool(new JedisPoolConfig(), "192.168.3.98", 6379, 0);        Jedis jedis = pool.getResource();        long start = System.currentTimeMillis();        for (int i = 0; i < 100000; i++) {            String result = jedis.set("np" + i, "vp" + i);        }        long end = System.currentTimeMillis();        pool.returnResource(jedis);        System.out.println("POOL SET: " + ((end - start) / 1000.0) + " seconds");        // 销毁        jedis.close();    }    /**     * 事务方式(Transactions)     * 通过multi(开启一个事务)、exec(执行)、discard(放弃事务)     * Transaction SET: 0.926 seconds     */    @Test    public void testMulti() {        Jedis jedis = new Jedis("192.168.3.98", 6379);        long start = System.currentTimeMillis();        Transaction tx = jedis.multi();        for (int i = 0; i < 100000; i++) {            tx.set("t" + i, "v" + i);        }        List results = tx.exec();        long end = System.currentTimeMillis();        System.out.println("Transaction SET: " + ((end - start) / 1000.0) + " seconds");        jedis.close();    }    /**     * 管道(Pipelining)     * 异步方式,一次发送多个指令     * Pipelined SET: 0.742 seconds     */    @Test    public void testPipelining() {        Jedis jedis = new Jedis("192.168.3.98", 6379);        Pipeline pipeline = jedis.pipelined();        long start = System.currentTimeMillis();        for (int i = 0; i < 100000; i++) {            pipeline.set("p" + i, "p" + i);        }        List results = pipeline.syncAndReturnAll();        long end = System.currentTimeMillis();        System.out.println("Pipelined SET: " + ((end - start) / 1000.0) + " seconds");        jedis.close();    }    /**     * 管道中调用事务     * 测试中会发生 java.lang.StackOverflowError     */    @Test    public void testPipeliningWithMulti() {        Jedis jedis = new Jedis("192.168.3.98", 6379);        long start = System.currentTimeMillis();        Pipeline pipeline = jedis.pipelined();        pipeline.multi();        // >10000次会内存溢出        /*for (int i = 0; i < 100000; i++) {            pipeline.set("" + i, "" + i);        }*/        for (int i = 0; i < 1000; i++) {            pipeline.set("" + i, "" + i);        }        pipeline.exec();        List results = pipeline.syncAndReturnAll();        long end = System.currentTimeMillis();        System.out.println("Pipelined transaction: " + ((end - start) / 1000.0) + " seconds");        jedis.close();    }    /**     * 分布式直接连接同步调用     * 通过List
中Info的顺序和key,计算hash,确定key为固定的Redis上 * Simple@Sharing SET: 95.106 seconds */ @Test public void testshardNormal() { List
shards = Arrays.asList( new JedisShardInfo("192.168.3.98", 6379), new JedisShardInfo("192.168.3.98", 6380)); ShardedJedis sharding = new ShardedJedis(shards); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String result = sharding.set("sn" + i, "n" + i); } long end = System.currentTimeMillis(); System.out.println("Simple@Sharing SET: " + ((end - start) / 1000.0) + " seconds"); sharding.close(); } /** * 分布式直接连接管道异步调用,key的分配结果同 分布式直接连接同步调用 相同 * Pipelined@Sharing SET: 0.856 seconds */ @Test public void testshardPipelining() { List
shards = Arrays.asList( new JedisShardInfo("192.168.3.98", 6379), new JedisShardInfo("192.168.3.98", 6380)); ShardedJedis sharding = new ShardedJedis(shards); ShardedJedisPipeline pipeline = sharding.pipelined(); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { pipeline.set("sp" + i, "p" + i); } List
results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); System.out.println("Pipelined@Sharing SET: " + ((end - start) / 1000.0) + " seconds"); sharding.close(); } /** * 分布式连接池同步调用 */ @Test public void testShardSimplePool() { List
shards = Arrays.asList( new JedisShardInfo("192.168.3.98", 6379), new JedisShardInfo("192.168.3.98", 6380)); ShardedJedisPool pool = new ShardedJedisPool(new JedisPoolConfig(), shards); ShardedJedis one = pool.getResource(); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String result = one.set("spn" + i, "n" + i); } long end = System.currentTimeMillis(); pool.returnResource(one); System.out.println("Simple@Pool SET: " + ((end - start) / 1000.0) + " seconds"); pool.destroy(); } /** * 分布式连接池异步调用相同,返回管道与分布式直接连接管道异步调用 * Simple@Pool SET: 94.094 seconds */ @Test public void testShardPoolWithPipelined() { List
shards = Arrays.asList( new JedisShardInfo("localhost", 6379), new JedisShardInfo("localhost", 6380)); ShardedJedisPool pool = new ShardedJedisPool(new JedisPoolConfig(), shards); ShardedJedis one = pool.getResource(); ShardedJedisPipeline pipeline = one.pipelined(); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { pipeline.set("sppn" + i, "n" + i); } List
results = pipeline.syncAndReturnAll(); long end = System.currentTimeMillis(); pool.returnResource(one); System.out.println("Pipelined@Pool SET: " + ((end - start) / 1000.0) + " seconds"); pool.destroy(); }}

 

转载地址:http://kqyci.baihongyu.com/

你可能感兴趣的文章
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
Oracle 物化视图
查看>>
PHP那点小事--三元运算符
查看>>
解决国内NPM安装依赖速度慢问题
查看>>
Brackets安装及常用插件安装
查看>>
Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
查看>>
fastcgi_param 详解
查看>>
Nginx配置文件(nginx.conf)配置详解
查看>>
标记一下
查看>>
IP报文格式学习笔记
查看>>
autohotkey快捷键显示隐藏文件和文件扩展名
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>
学习设计模式(3)——单例模式和类的成员函数中的静态变量的作用域
查看>>
自然计算时间复杂度杂谈
查看>>
当前主要目标和工作
查看>>
使用 Springboot 对 Kettle 进行调度开发
查看>>
一文看清HBase的使用场景
查看>>
解析zookeeper的工作流程
查看>>