如何开发redis的二级缓存


开发redis二级缓存的示例:

redis二级缓存的实现,主要是重写了Cache.java的方法,代码:

publicclassimplementsCache{

privatestaticfinalLoggerlogger=LoggerFactory.getLogger(MybatisRedisCache.class);

privatefinalReadWriteLockreadWriteLock=newReentrantReadWriteLock();

privateRedisTemplateredisTemplate;

privateStringid;

privatestaticfinallongEXPIRE_TIME_IN_MINUTES=30;

public(Stringid){

if(id==null){

thrownewIllegalArgumentException("CacheinstancesrequireanID");

}

logger.info("=====================================Rediscacheid="+id);

this.id=id;

}

publicStringgetId(){

returnid;

}

publicvoidputObject(Objectkey,Objectvalue){

logger.debug("==============================redisput="+key);

RedisTemplateredisTemplate=getRedisTemplate();

ValueOperationsopsForValue=redisTemplate.opsForValue();

opsForValue.set(key,value,EXPIRE_TIME_IN_MINUTES,TimeUnit.MINUTES);

}

publicObjectgetObject(Objectkey){

logger.debug("================================redisget================================");

RedisTemplateredisTemplate=getRedisTemplate();

ValueOperationsopsForValue=redisTemplate.opsForValue();

returnopsForValue.get(key);

}

publicObjectremoveObject(Objectkey){

logger.debug("==========================================redisremove==========================");

RedisTemplateredisTemplate=getRedisTemplate();

redisTemplate.delete(key);

returnnull;

}

publicvoidclear(){

logger.debug("=====================================clearredis================================");

RedisTemplateredisTemplate=getRedisTemplate();

redisTemplate.execute(newRedisCallback(){

@Override

publicObjectdoInRedis(RedisConnectionconnection)throwsDataAccessException{

大专栏redis实现二级缓存

connection.flushDb();

return"OK";

}

});

}

@Override

publicintgetSize(){

return0;

}

@Override

publicReadWriteLockgetReadWriteLock(){

returnreadWriteLock;

}

publicRedisTemplategetRedisTemplate(){

if(redisTemplate==null){

redisTemplate=ApplicationContextHolder.getBean("redisTemplate");

}

returnredisTemplate;

}

publicvoidsetRedisTemplate(RedisTemplateredisTemplate){

this.redisTemplate=redisTemplate;

}

}

使用redisTemplate方法实现一个ApplicationContextHolder工具类,代码:

@Component

publicclassApplicationContextHolderimplementsApplicationContextAware{

privatestaticApplicationContextapplicationContext;

@Override

publicvoidsetApplicationContext(ApplicationContextctx)throwsBeansException{

applicationContext=ctx;

}

/**

*Getapplicationcontextfromeverywhere

*

*@return

*/

publicstaticApplicationContextgetApplicationContext(){

returnapplicationContext;

}

/**

*Getbeanbyclass

*

*@paramclazz

*@param<T>

*@return

*/

publicstatic<T>TgetBean(Class<T>clazz){

returnapplicationContext.getBean(clazz);

}

/**

*Getbeanbyclassname

*

*@paramname

*@param<T>

*@return

*/

@SuppressWarnings("unchecked")

publicstatic<T>TgetBean(Stringname){

return(T)applicationContext.getBean(name);

}

}

在mapper中添加自定义cache,使用二级缓存,例如:

<cachetype="com.yif.utils.MybatisRedisCache"eviction="LRU"/>


上一篇:宝塔linux怎么搭建站台

下一篇:怎么查看cdn是否生效


redis 二级缓存
Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器