客户端连接
Redis通过监听TCP端口或Unix socket方式接收来自客户端连接。
打开Redis服务:
打开PowerShell或cmd,进入客户端:
redis-cli.exe//进入客户端
config get maxclients //得到客户端最大连接数 默认10000 redis2.6可以在redis.conf中修改
可以在服务启动时设置最大连接数:
redis-server --maxclients 100000
管道
一种基于客户端-服务端模型以及请求/响应协议的TCP服务
运行步骤:
客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
服务端处理命令,并将结果返回给客户端。
管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应,提升服务响应速度:
使用Java测试Redis有无管道运行速度对比,首先要导入Redis的jar包才可以使用,详情可看:Java使用Redis
package Demo;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
public class RedisPipe {
public static int commandNum=10000;
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
//jedis.auth("password") 如果设置密码需要
System.out.println("运行成功");
System.out.println("正在运行" +jedis.ping());
System.out.println("有无管道命令执行速度对比");
withoutPipeline(jedis);
withPipeline(jedis);
}
private static void withoutPipeline(Jedis jedis){
Long start=System.currentTimeMillis();
for (int i = 0; i < commandNum; i++) {
jedis.set("无管道",String.valueOf(i));
}
long end=System.currentTimeMillis();
long cost=end - start;
System.out.println("无管道的执行时间为"+cost+"ms");
}
private static void withPipeline(Jedis jedis){
Pipeline pipeline=jedis.pipelined();
Long start=System.currentTimeMillis();
for (int i = 0; i < commandNum; i++) {
jedis.set("有管道",String.valueOf(i));
}
long end=System.currentTimeMillis();
long cost=end - start;
System.out.println("有管道的执行时间为"+cost+"ms");
}
}
显然,10000条命令,有管道执行命令时间比无管道执行命令时间更快,提升Redis服务性能。