Kaynağa Gözat

cache expiration

albertshaw 8 yıl önce
ebeveyn
işleme
b129235d65

+ 10 - 1
src/main/java/com/goafanti/core/shiro/cache/ShiroRedisCache.java

@@ -3,6 +3,7 @@ package com.goafanti.core.shiro.cache;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.shiro.cache.Cache;
 import org.apache.shiro.cache.CacheException;
@@ -18,6 +19,8 @@ public class ShiroRedisCache implements Cache<String, Object> {
 
 	private Set<String>						emptySet	= new HashSet<>();
 
+	private long							expire		= -1l;
+
 	public ShiroRedisCache() {
 
 	}
@@ -27,6 +30,12 @@ public class ShiroRedisCache implements Cache<String, Object> {
 		this.name = name;
 	}
 
+	public ShiroRedisCache(RedisTemplate<String, Object> redisTemplate, String name, long expire) {
+		this.redisTemplate = redisTemplate;
+		this.name = name;
+		this.expire = expire;
+	}
+
 	@Override
 	public Object get(String key) throws CacheException {
 		if (key == null) {
@@ -42,7 +51,7 @@ public class ShiroRedisCache implements Cache<String, Object> {
 			return null;
 		}
 
-		redisTemplate.opsForValue().set(decorateKey(key), value);
+		redisTemplate.opsForValue().set(decorateKey(key), value, expire, TimeUnit.SECONDS);
 		return value;
 	}
 

+ 13 - 3
src/main/java/com/goafanti/core/shiro/cache/ShiroRedisCacheManager.java

@@ -7,11 +7,13 @@ import org.springframework.data.redis.core.RedisTemplate;
 
 public class ShiroRedisCacheManager extends AbstractCacheManager {
 
-	private RedisTemplate<String, Object> redisTemplate;
+	private RedisTemplate<String, Object>	redisTemplate;
+
+	private long							expire	= -1l;	// 秒
 
 	@Override
 	protected Cache<String, Object> createCache(String name) throws CacheException {
-		return new ShiroRedisCache(redisTemplate, name);
+		return new ShiroRedisCache(redisTemplate, name, expire);
 	}
 
 	public RedisTemplate<String, Object> getRedisTemplate() {
@@ -21,5 +23,13 @@ public class ShiroRedisCacheManager extends AbstractCacheManager {
 	public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
 		this.redisTemplate = redisTemplate;
 	}
-	
+
+	public long getExpire() {
+		return expire;
+	}
+
+	public void setExpire(long expire) {
+		this.expire = expire;
+	}
+
 }

+ 2 - 0
src/main/resources/spring/spring-shiro.xml

@@ -37,10 +37,12 @@
 
 	<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
 		<constructor-arg index="0" ref="redisTemplate" />
+		<property name="defaultExpiration" value="86400" />		
 	</bean>
 	
 	<bean id="shrioRedisCacheManager" class="com.goafanti.core.shiro.cache.ShiroRedisCacheManager">
 		<property name="redisTemplate" ref="sessionRedisTemplate" />
+		<property name="expire" value="43200" />
 	</bean>
 
 	<bean id="sessionIdGenerator"