Merge pull request #5 from xpoft/master
DATAREDIS-102. Set usePrefix / Expire time
This commit is contained in:
@@ -43,6 +43,7 @@ class RedisCache implements Cache {
|
||||
private final byte[] setName;
|
||||
private final byte[] cacheLockName;
|
||||
private long WAIT_FOR_LOCK = 300;
|
||||
private final long expire;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -50,22 +51,23 @@ class RedisCache implements Cache {
|
||||
*
|
||||
* @param name cache name
|
||||
* @param prefix
|
||||
* @param cachePrefix
|
||||
*/
|
||||
RedisCache(String name, byte[] prefix, RedisTemplate<? extends Object, ? extends Object> template) {
|
||||
* @param template
|
||||
* @param expire
|
||||
*/
|
||||
RedisCache(String name, byte[] prefix, RedisTemplate<? extends Object, ? extends Object> template, long expire) {
|
||||
|
||||
Assert.hasText(name, "non-empty cache name is required");
|
||||
this.name = name;
|
||||
this.template = template;
|
||||
this.prefix = prefix;
|
||||
this.expire = expire;
|
||||
|
||||
StringRedisSerializer stringSerializer = new StringRedisSerializer();
|
||||
|
||||
// name of the set holding the keys
|
||||
String sName = name + "~keys";
|
||||
this.setName = stringSerializer.serialize(sName);
|
||||
this.cacheLockName = stringSerializer.serialize(name + "~lock");
|
||||
}
|
||||
this.setName = stringSerializer.serialize(name + "~keys");
|
||||
this.cacheLockName = stringSerializer.serialize(name + "~lock");
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
@@ -102,6 +104,9 @@ class RedisCache implements Cache {
|
||||
waitForLock(connection);
|
||||
connection.multi();
|
||||
connection.set(k, template.getValueSerializer().serialize(value));
|
||||
if (expire > 0) {
|
||||
connection.expire(k, expire);
|
||||
}
|
||||
connection.zAdd(setName, 0, k);
|
||||
connection.exec();
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ package org.springframework.data.redis.cache;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
@@ -42,6 +44,10 @@ public class RedisCacheManager implements CacheManager {
|
||||
private boolean usePrefix;
|
||||
private RedisCachePrefix cachePrefix = new DefaultRedisCachePrefix();
|
||||
|
||||
// 0 - never expire
|
||||
private long defaultExpireTime = 0;
|
||||
private Map<String, Long>expires = new HashMap<String, Long>();
|
||||
|
||||
public RedisCacheManager(RedisTemplate template) {
|
||||
this.template = template;
|
||||
}
|
||||
@@ -49,7 +55,8 @@ public class RedisCacheManager implements CacheManager {
|
||||
public Cache getCache(String name) {
|
||||
Cache c = caches.get(name);
|
||||
if (c == null) {
|
||||
c = new RedisCache(name, (usePrefix ? cachePrefix.prefix(name) : null), template);
|
||||
long expire = (expires.containsKey(name)) ? expires.get(name) : defaultExpireTime;
|
||||
c = new RedisCache(name, (usePrefix ? cachePrefix.prefix(name) : null), template, expire);
|
||||
caches.put(name, c);
|
||||
}
|
||||
|
||||
@@ -60,7 +67,11 @@ public class RedisCacheManager implements CacheManager {
|
||||
return names;
|
||||
}
|
||||
|
||||
/**
|
||||
public void setUsePrefix(boolean usePrefix) {
|
||||
this.usePrefix = usePrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the cachePrefix.
|
||||
*
|
||||
* @param cachePrefix the cachePrefix to set
|
||||
@@ -68,4 +79,22 @@ public class RedisCacheManager implements CacheManager {
|
||||
public void setCachePrefix(RedisCachePrefix cachePrefix) {
|
||||
this.cachePrefix = cachePrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default expire time.
|
||||
*
|
||||
* @param defaultExpireTime time in ms
|
||||
*/
|
||||
public void setDefaultExpireTime(long defaultExpireTime) {
|
||||
this.defaultExpireTime = defaultExpireTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set expire time for caches
|
||||
*
|
||||
* @param expires time in ms
|
||||
*/
|
||||
public void setExpires(Map<String, Long> expires) {
|
||||
this.expires = expires;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user