package com.gxx.manage.shiro.cache; import java.util.Collection; import java.util.Set; import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheException; import com.gxx.manage.shiro.JedisManager; import com.gxx.manage.shiro.SerializeUtil; /** *
*
Title:
*
* Jedis实现Shiro缓存 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年9月22日 * @since manage * */ public class JedisShiroCache implements Cache { private static final String REDIS_SHIRO_CACHE = "shiro-cache:"; private static final int DB_INDEX = 1; private JedisManager jedisManager; private String name; public JedisShiroCache(String name, JedisManager jedisManager) { this.name = name; this.jedisManager = jedisManager; } /** * 自定义relm中的授权/认证的类名加上授权/认证英文名字 */ public String getName() { if (name == null) return ""; return name; } public void setName(String name) { this.name = name; } @SuppressWarnings("unchecked") @Override public V get(K key) throws CacheException { byte[] byteKey = SerializeUtil.serialize(buildCacheKey(key)); byte[] byteValue = new byte[0]; try { byteValue = jedisManager.getValueByKey(DB_INDEX, byteKey); } catch (Exception e) { e.printStackTrace(); System.out.println("get cache error"); } return (V) SerializeUtil.deserialize(byteValue); } @Override public V put(K key, V value) throws CacheException { V previos = get(key); try { jedisManager.saveValueByKey(DB_INDEX, SerializeUtil.serialize(buildCacheKey(key)), SerializeUtil.serialize(value), -1); } catch (Exception e) { e.printStackTrace(); System.out.println("put cache error"); } return previos; } @Override public V remove(K key) throws CacheException { V previos = get(key); try { jedisManager.deleteByKey(DB_INDEX, SerializeUtil.serialize(buildCacheKey(key))); } catch (Exception e) { e.printStackTrace(); System.out.println("remove cache error"); } return previos; } @Override public void clear() throws CacheException { //TODO } @Override public int size() { if (keys() == null) return 0; return keys().size(); } @Override public Set keys() { //TODO return null; } @Override public Collection values() { //TODO return null; } private String buildCacheKey(Object key) { return REDIS_SHIRO_CACHE + getName() + ":" + key; } }