1. jedis的测试代码
public class RedisClient {
@Test
//使用Jedis连接redis服务器
public void jedisClient(){
Jedis jedis = new Jedis("192.168.83.128",6379);
jedis.set("s3", "333");
String result = jedis.get("s3");
System.out.println(result);
jedis.close();
}
@Test
//使用JedisPool连接redis服务器
public void jedisPool(){
JedisPool pool = new JedisPool("192.168.83.128",6379);
Jedis jedis = pool.getResource();
String result = jedis.get("s1");
System.out.println(result);
jedis.close();
pool.close();
}
@Test
public void jedisPool_Spring(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
JedisPool jedisPool = context.getBean("jedisPool", JedisPool.class);
Jedis jedis = jedisPool.getResource();
jedis.set("s1", "111");
String result = jedis.get("s1");
System.out.println(result);
jedis.close();
jedisPool.close();
}
@Test
public void jedisCluster(){
Set<HostAndPort> nodes = new HashSet();
nodes.add(new HostAndPort("192.168.83.128",7001));
nodes.add(new HostAndPort("192.168.83.128",7002));
nodes.add(new HostAndPort("192.168.83.128",7003));
nodes.add(new HostAndPort("192.168.83.128",7004));
nodes.add(new HostAndPort("192.168.83.128",7005));
nodes.add(new HostAndPort("192.168.83.128",7006));
JedisCluster cluster = new JedisCluster(nodes);
cluster.set("ss","123");
String result = cluster.get("ss");
System.out.println(result);
cluster.close();
}
}
2. Spring整合Jedis
2.1 整合JedisPool
<!-- 连接池配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大连接数 -->
<property name="maxTotal" value="30" />
<!-- 最大空闲连接数 -->
<property name="maxIdle" value="10" />
<!-- 每次释放连接的最大数目 -->
<property name="numTestsPerEvictionRun" value="1024" />
<!-- 释放连接的扫描间隔(毫秒) -->
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<!-- 连接最小空闲时间 -->
<property name="minEvictableIdleTimeMillis" value="1800000" />
<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
<property name="softMinEvictableIdleTimeMillis" value="10000" />
<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
<property name="maxWaitMillis" value="1500" />
<!-- 在获取连接的时候检查有效性, 默认false -->
<property name="testOnBorrow" value="false" />
<!-- 在空闲时检查有效性, 默认false -->
<property name="testWhileIdle" value="true" />
<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
<property name="blockWhenExhausted" value="false" />
</bean>
<!-- redis单机 通过连接池 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool"
destroy-method="close">
<constructor-arg name="poolConfig" ref="jedisPoolConfig" />
<constructor-arg name="host" value="192.168.242.130" />
<constructor-arg name="port" value="6379" />
</bean>
2.2 整合JedisCluster
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg index="0">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
<constructor-arg index="1" value="7001"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
<constructor-arg index="1" value="7002"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
<constructor-arg index="1" value="7003"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
<constructor-arg index="1" value="7004"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
<constructor-arg index="1" value="7005"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg index="0" value="192.168.101.3"></constructor-arg>
<constructor-arg index="1" value="7006"></constructor-arg>
</bean>
</set>
</constructor-arg>
<constructor-arg index="1" ref="jedisPoolConfig"></constructor-arg>
</bean>
3技巧
step1.将Jedis中通用的方法抽取到一个接口中
public interface JedisClient {
public String set(String key, String value);
public String get(String key);
public Long hset(String key, String item, String value);
public String hget(String key, String item);
public Long incr(String key);
public Long decr(String key);
public Long expire(String key, int second);
public Long ttl(String key);
public Long hdel(String key,String item);
}
step2.使用JedisPool去实现这个接口
public class JedisClientSingle implements JedisClient{
@Autowired
private JedisPool jedisPool;
@Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String string = jedis.set(key, value);
jedis.close();
return string;
}
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String string = jedis.get(key);
jedis.close();
return string;
}
@Override
public Long hset(String key, String item, String value) {
Jedis jedis = jedisPool.getResource();
Long hset = jedis.hset(key, item, value);
jedis.close();
return hset;
}
@Override
public String hget(String key, String item) {
Jedis jedis = jedisPool.getResource();
String hget = jedis.hget(key, item);
jedis.close();
return hget;
}
public Long hdel(String key,String item){
Jedis jedis = jedisPool.getResource();
Long hdel = jedis.hdel(key, item);
jedis.close();
return hdel;
}
@Override
public Long incr(String key) {
Jedis jedis = jedisPool.getResource();
Long incr = jedis.incr(key);
jedis.close();
return incr;
}
@Override
public Long decr(String key) {
Jedis jedis = jedisPool.getResource();
Long decr = jedis.decr(key);
jedis.close();
return decr;
}
@Override
public Long expire(String key, int second) {
Jedis jedis = jedisPool.getResource();
Long expire = jedis.expire(key, second);
jedis.close();
return expire;
}
@Override
public Long ttl(String key) {
Jedis jedis = jedisPool.getResource();
Long ttl = jedis.ttl(key);
jedis.close();
return ttl;
}
}
step3.用JedisCluster去实现这个接口
public class JedisClientCluster implements JedisClient {
@Autowired
private JedisCluster jedisCluster;
@Override
public String set(String key, String value) {
String set = jedisCluster.set(key, value);
return set;
}
@Override
public String get(String key) {
String string = jedisCluster.get(key);
return string;
}
@Override
public Long hset(String key, String item, String value) {
Long hset = jedisCluster.hset(key, item, value);
return hset;
}
@Override
public String hget(String key, String item) {
String hget = jedisCluster.hget(key, item);
return hget;
}
@Override
public Long hdel(String key, String item) {
Long hdel = jedisCluster.hdel(key, item);
return hdel;
}
@Override
public Long incr(String key) {
Long incr = jedisCluster.incr(key);
return incr;
}
@Override
public Long decr(String key) {
Long decr = jedisCluster.decr(key);
return decr;
}
@Override
public Long expire(String key, int second) {
Long expire = jedisCluster.expire(key, second);
return expire;
}
@Override
public Long ttl(String key) {
Long ttl = jedisCluster.ttl(key);
return ttl;
}
}
<bean id="jedisClient" class="com.taotao.order.dao.JedisClientSingle"></bean>
<bean id="jedisClient" class="com.taotao.order.dao.JedisClientCluster"></bean>
</beans>
使用时,两个Bean二选一即可。