开发环境:
- JDK11;
- Redis3.2;
使用流水线优化读写新能:
与传统关系型数据库类似,每次客户端与服务端建立连接是需要开销的,对于每一个客户端而言,将多个操作封装在一次连接内是十分有必要的,从而产生了Redis的流水线操作,应用步骤如下:
- 开启流水线;
- 加入命令;
- 执行流水线;
程序如下:
/**
* 10619ms
* 普通执行
*/
private static void test3()
{
Jedis jedis = new Jedis("127.0.0.1", 6379);
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++)
{
// 写
jedis.set("key_" + i, "value_" + i);
// 读
jedis.get("key_" + i);
}
long end = System.currentTimeMillis();
System.out.println("普通耗时:" + (end - start));
}
/**
* 630ms
* 流水线执行
*/
private static void test4()
{
Jedis jedis = new Jedis("127.0.0.1", 6379);
long start = System.currentTimeMillis();
// 开启流水线
Pipeline pipeline=jedis.pipelined();
for (int i = 0; i < 100000; i++)
{
// 写
pipeline.set("key_" + i, "value_" + i);
// 读
pipeline.get("key_" + i);
}
// 执行流水线,但不返回读的结果,syncAndReturnAll方法会返回结果
pipeline.sync();
long end = System.currentTimeMillis();
System.out.println("流水线耗时:" + (end - start));
}
Redis的发布订阅:
刚开始学的时候笔者也是十分懵,这个发布订阅的作用不如流水线、锁机制等来的明显,其实捋一捋还是有点眉目的,Redis发布订阅无非就是通过Redis提供的渠道将消息发送到这个渠道上,而通过多个系统去监听这个渠道就可以获取消息。
典型应用的一个例子就是移动支付,当你通过微信或支付宝来消费时,就会把消费信息发布到该渠道,此时短信、微信或者支