1. jedis的測試代碼
public class RedisClient {
@Test
//使用Jedis連接配接redis伺服器
public void jedisClient(){
Jedis jedis = new Jedis("192.168.83.128",);
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",);
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",));
nodes.add(new HostAndPort("192.168.83.128",));
nodes.add(new HostAndPort("192.168.83.128",));
nodes.add(new HostAndPort("192.168.83.128",));
nodes.add(new HostAndPort("192.168.83.128",));
nodes.add(new HostAndPort("192.168.83.128",));
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二選一即可。