如何开发redis的二级缓存

时间:2022-12-06 01:22

如何开发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"/>

标签:
随便看看
本类推荐
本类排行
热门标签

我国国家通讯社行不行啊细狗新年贺词祝福语2023年祝福语新年新年贺词新年贺词祝福语居家抗病毒小药箱除夕高速免费吗2022年除夕高速免费吗春联春联句子大全春联句子大全七字年夜饭十二道菜年夜饭十二道菜单年夜饭吃什么年夜饭吃什么菜吃年夜饭的寓意年夜饭黑芝麻菊花茶晒菊花茶腌腊肉送妈妈生日礼物汉白玉送闺蜜水钻送女人礼物爸爸生日送礼物送老公