import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.ibatis.cache.Cache; import org.redisson.RedissonClient; import org.redisson.core.RBucket; import org.redisson.core.RSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.yijiupi.himalaya.order.Constants; /** * ******************************************* * ClassName: MybatisRedisCache * * @Description: Mybatis 基于redis 的缓存 * * @author 章英杰 * @date 2016年5月10日 * ******************************************** */ public class MybatisRedisCache implements Cache{ private Logger logger=LoggerFactory.getLogger(getClass()); private RedissonClient redissonClient; private String id; private RSet<String> keys; public MybatisRedisCache(final String id) { if (id == null) { throw new IllegalArgumentException("Cache instances require an ID"); } this.id = id; logger.info("redis>>>>MybatisRedisCache:id="+this.id); if(null==redissonClient){ redissonClient=AppConfig.getBean(RedissonClient.class); } keys=redissonClient.getSet(Constants.MYBATIS_CACHE_ID+ id); } @Override public String getId() { return id; } @Override public void putObject(Object key, Object value) { RBucket<Object> obj= redissonClient.getBucket(key.toString()); obj.set(value, Constants.MYBATIS_CACHE_TIME_TO_LIVE, Constants.MYBATIS_CACHE_TIME_UNIT); if(!keys.contains(key.toString())){ keys.add(key.toString()); } } @Override public Object getObject(Object key) { RBucket<Object> obj= redissonClient.getBucket(key.toString()); return obj.get(); } @Override public Object removeObject(Object key) { RBucket<Object> obj= redissonClient.getBucket(key.toString()); Boolean flag=false; if(obj.delete()){ flag=keys.remove(key.toString()); } return flag; } @Override public void clear() { for(String key:keys){ RBucket<Object> obj= redissonClient.getBucket(key.toString()); obj.delete(); } keys.clear(); } @Override public int getSize() { return keys.size(); } @Override public ReadWriteLock getReadWriteLock() { return redissonClient.getReadWriteLock(getId()); } }
基于redison 实现mybatis的自定义cache
猜你喜欢
转载自zaq369cde.iteye.com/blog/2297209
今日推荐
周排行