Java使用redis和管道技术
Java使用redis
java中有jedis的jar可以提供一些API
下载jedis-2.9.0.jar和commons-pool2-2.5.0.jar。
其中commons-pool2-2.5.0.jar是使用连接池方式。
使用连接池方式
下面演示一个使用连接池方式
private static JedisPool pool;
/** * 建立连接池 真实环境,一般把配置参数缺抽取出来。*/
private static void createJedisPool() {
// 建立连接池配置参数
JedisPoolConfig config = new JedisPoolConfig();
// 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
config.setBlockWhenExhausted(true);
// 设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)
config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
// 是否启用pool的jmx管理功能, 默认true
config.setJmxEnabled(true);
// 最大空闲连接数, 默认8个 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
config.setMaxIdle(8);
// 最大连接数, 默认8个
config.setMaxTotal(200);
// 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
config.setMaxWaitMillis(1000 * 100);
// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
config.setTestOnBorrow(true);
// 创建连接池
pool = new JedisPool(config, "192.168.0.103", 6379,1000,"redis");
}
/**在多线程环境同步初始化*/
private static synchronized void poolInit() { if (pool == null) createJedisPool();}
/**获取一个jedis 对象*/
public static Jedis getJedis() {
if (pool == null) poolInit();
return pool.getResource();
}
/** 归还一个连接*/
public static void returnRes(Jedis jedis) { jedis.close();}
管道技术
管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
下面以JAVA为例子编写
Jedis conn = new Jedis("192.168.0.103");
conn.auth("redis");
Pipeline pipe = conn.pipelined();//获取一个pipeline
pipe.multi();//设置事务
pipe.set("lin2", "for");//设置string
//设置hash
pipe.hset("linhash1", "name", "fff");
pipe.hset("linhash1", "age", "31");
pipe.hset("linhash1", "gender", "male");
Response<List<Object>> response = pipe.exec();//事务获取结果
pipe.sync();//一定要调用这个才能获取结果
List<Object> list = response.get();
for(Object o:list){ System.out.println(o); }
pipe.close();
conn.close();