<dependency >
<groupId > org.springframework.datagroupId >
<artifactId > spring-data-redisartifactId >
<version > 1.8.5.RELEASEversion >
dependency >
<dependency >
<groupId > org.apache.commonsgroupId >
<artifactId > commons-pool2artifactId >
<version > 2.3version >
dependency >
<dependency >
<groupId > redis.clientsgroupId >
<artifactId > jedisartifactId >
<version > 2.9.0version >
dependency >
<cache:annotation-driven cache-manager ="cacheManager" />
<bean id ="cacheManager" class ="org.springframework.cache.support.SimpleCacheManager" >
<property name ="caches" >
<set >
<bean class ="com.common.cache.redis.RedisCache" >
<property name ="name" value ="myCache" />
<property name ="redisTemplate" ref ="redisTemplate" />
bean >
set >
property >
bean >
<bean id ="poolConfig" class ="redis.clients.jedis.JedisPoolConfig" >
<property name ="maxIdle" value ="${redis.maxIdle}" />
<property name ="maxTotal" value ="${redis.maxTotal}" />
<property name ="testOnBorrow" value ="${redis.testOnBorrow}" />
bean >
<bean id ="connectionFactory" class ="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
<property name ="hostName" value ="${redis.host}" />
<property name ="port" value ="${redis.port}" />
<property name ="password" value ="${redis.pass}" />
<property name ="poolConfig" ref ="poolConfig" />
<property name ="usePool" value ="true" />
bean >
<bean id ="redisTemplate" class ="org.springframework.data.redis.core.RedisTemplate" >
<property name ="connectionFactory" ref ="connectionFactory" />
bean >
/**
* Cache adapter for Redis.
*/
public class RedisCache implements Cache {
private RedisTemplate redisTemplate;
private String name;
public void setRedisTemplate (RedisTemplate redisTemplate) {
this .redisTemplate = redisTemplate;
}
public void setName (String name) {
this .name = name;
}
@Override
public String getName () {
return this .name;
}
@Override
public Object getNativeCache () {
return this .redisTemplate;
}
/**
* 从缓存中获取key
*/
@Override
public ValueWrapper get (Object key) {
final String keyf = key.toString();
Object object;
object = redisTemplate.execute((RedisCallback) connection -> {
byte [] key1 = keyf.getBytes();
byte [] value = connection.get(key1);
if (value == null ) {
return null ;
}
return SerializationUtils.deserialize(value);
});
return (object != null ? new SimpleValueWrapper(object) : null );
}
/**
* 将一个新的key保存到缓存中
* 先拿到需要缓存key名称和对象,然后将其转成ByteArray
*/
@Override
public void put (Object key, Object value) {
final String keyf = key.toString();
final Object valuef = value;
final long liveTime = 86400 ;
redisTemplate.execute((RedisCallback) connection -> {
byte [] keyb = keyf.getBytes();
byte [] valueb = SerializationUtils.serialize(valuef);
connection.set(keyb, valueb);
if (liveTime > 0 ) {
connection.expire(keyb, liveTime);
}
return 1 L;
});
}
/**
* 删除key
*/
@Override
public void evict (Object key) {
final String keyf = key.toString();
redisTemplate.execute((RedisCallback) connection -> connection.del(keyf.getBytes()));
}
/**
* 清空key
*/
@Override
public void clear () {
redisTemplate.execute((RedisCallback) connection -> {
connection.flushDb();
return "ok" ;
});
}
@Override
public T get (Object key, Class type) {
return null ;
}
@Override
public T get (Object o, Callable callable) {
return null ;
}
@Override
public ValueWrapper putIfAbsent (Object key, Object value) {
return null ;
}
}
@Cacheable (value = "myCache" , key = "getMethodName()" )