Merge pull request #5 from xpoft/master

DATAREDIS-102. Set usePrefix / Expire time
This commit is contained in:
Costin Leau
2012-08-14 06:52:57 -07:00
2 changed files with 43 additions and 9 deletions

View File

@@ -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();

View File

@@ -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;
}
}