(一)单机版
1、创建一个interface
public interface IRedis {
String set(String key,String value);
String get(String key);
Boolean exists(String key);
Long expire(String key,int seconds);
Long ttl(String key);
Long incr(String key);
String hget(String key,String field);
Long hset(String key, String field, String value);
Long hdel(String key,String... field);
Boolean hexistes(String key,String field);
List<String> hvals(String key);
Long del(String key);
}
2、实现接口
package com.aynu.redis.imp;
import java.util.List;
import com.aynu.redis.IRedis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class Redis implements IRedis {
//jedis连接池文件
private JedisPool jedispool;
public JedisPool getJedispool() {
return jedispool;
}
public void setJedispool(JedisPool jedispool) {
this.jedispool = jedispool;
}
@Override
public String set(String key, String value) {
// TODO Auto-generated method stub
//从连接池中获得一个连接
Jedis jedis=jedispool.getResource();
//直接操作redis String result = jedis.set(key, value);
//关闭该连接 jedis.close();
return result;
}
@Override
public String get(String key) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
String result = jedis.get(key);
jedis.close(); return result;
}
@Override
public Boolean exists(String key) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
Boolean result = jedis.exists(key);
jedis.close(); return result;
}
@Override
public Long expire(String key, int seconds) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
Long result = jedis.expire(key, seconds);
jedis.close(); return result;
}
@Override
public Long ttl(String key) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
Long result = jedis.ttl(key);
return result;
}
Override
public Long incr(String key) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
Long result = jedis.incr(key);
jedis.close();
return result;
}
@Override
public String hget(String key, String field) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
String result = jedis.hget(key, field);
jedis.close();
return result;
}
@Override
public Long hdel(String key, String... field) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
Long result = jedis.hdel(key, field);
jedis.close();
return result;
}
@Override
public Boolean hexistes(String key, String field) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
Boolean result = jedis.hexists(key, field);
jedis.close();
return result;
}
@Override
public List<String> hvals(String key) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
List<String> result = jedis.hvals(key);
jedis.close();
return result;
}
@Override
public Long del(String key) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
Long result = jedis.del(key); jedis.close(); return result; }
@Override public Long hset(String key, String field, String value) {
// TODO Auto-generated method stub
Jedis jedis=jedispool.getResource();
Long result = jedis.hset(key, field, value);
jedis.close();
return result;
}
}
3、创建一个spring-redis.xml文件
<bean id="redis" class="com.aynu.redis.imp.Redis">
<property name="jedispool" ref="jedispool"/>
</bean>
<bean id="jedispool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="192.168.146.128"/>
<constructor-arg name="port" value="6379"/>
</bean>
4、在service层使用
策略:查询时,先从redis中查,如果有,直接返回,没有从数据库中查,将查到的结果放到redis中在查询缓存时,和添加缓存时为了防止没有查到报异常而影响整个系统的运行,我们采用try,catch方式进行捕获;
//1.注入上面的接口
@Autowired
private IRedis redis;
//2.去缓存中查找:
try { //去缓存中查,得到的是个json类型数据
String json = redis.hget("customer", "pageStartIndex");
//判断是否为空,不为空将json转为list
if(! json.isEmpty()) {
List<Customer> list=new ArrayList<Customer>();
list=JSONObject.parseArray(json, Customer.class);
}
return list;
}catch (Exception e) {
// TODO: handle exception
}
//3.如果缓存中没有,从数据库中查,将结果放入:
redis.hset("customer", "pageStartIndex", customerdata);
redis.hset("customer", "pageStartIndex", customerdata);
redis.hset("customer", "pageStartIndex", customerdata);
(二)集群版
1、集群实现类
package com.aynu.redis.imp;
import java.util.List;
import com.aynu.redis.IRedis;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
public class Cluster implements IRedis {
private JedisCluster jedisCluster;
public JedisCluster getJedisCluster() {
return jedisCluster;
}
public void setJedisCluster(JedisCluster jedisCluster) {
this.jedisCluster = jedisCluster;
}
@Override
public String set(String key, String value) {
// TODO Auto-generated method stub
return jedisCluster.set(key, value);
}
@Override
public String get(String key) {
// TODO Auto-generated method stub
return jedisCluster.get(key);
}
@Override
public Boolean exists(String key) {
// TODO Auto-generated method stub
return jedisCluster.exists(key);
}
@Override
public Long expire(String key, int seconds) {
// TODO Auto-generated method stub
return jedisCluster.expire(key, seconds);
}
@Override
public Long ttl(String key) {
// TODO Auto-generated method stub
return jedisCluster.ttl(key);
}
@Override
public Long incr(String key) {
// TODO Auto-generated method stub
return jedisCluster.incr(key);
}
@Override
public String hget(String key, String field) {
// TODO Auto-generated method stub
return jedisCluster.hget(key, field);
}
@Override
public Long hset(String key, String field, String value) {
// TODO Auto-generated method stub
return jedisCluster.hset(key, field, value);
}
@Override
public Long hdel(String key, String... field) {
// TODO Auto-generated method stub
return jedisCluster.hdel(key, field);
}
@Override
public Boolean hexistes(String key, String field) {
// TODO Auto-generated method stub
return jedisCluster.hexists(key, field);
}
@Override
public List<String> hvals(String key) {
// TODO Auto-generated method stub
return jedisCluster.hvals(key);
}
@Override
public Long del(String key) {
// TODO Auto-generated method stub
return jedisCluster.del(key);
}
}
2、配置
<bean id="cluster" class="com.aynu.redis.imp.Cluster">
<property name="JedisCluster" ref="jedisCluster"/>
</bean>
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="nodes">
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7001"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7002"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7003"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7004"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7005"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.146.130"/>
<constructor-arg name="port" value="7006"/>
</bean>
</set>
</constructor-arg>
</bean>