脚本宝典收集整理的这篇文章主要介绍了mybatis本地缓存&分布式缓存干货分享,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
前言:干货记录学习mybatis实际开发中缓存的使用。
环境: sPRingboot2.X + mybatis3.x
Mybatis是一款持久层框架,它提供了一级缓存和二级缓存。
缓存原理:PErpetualCache 的 HashMap本地缓存
<!--mybatise 配置文件中设置-->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<!--某一个mapper中开启,mapper 配置文件中设置-->
<cache type="org.apache.ibatis.cache.impl.PerpetualCache" 具体执行缓存操作的类,mybatis默认PerpetualCache,我们可以自定义修改
blocking="false" (是否使用阻塞缓存): 默认为false,当指定为true时将采用BlockingCache进行封装,使用BlockingCache会在查询缓存时锁住对应的Key,如果缓存命中了则会释放对应的锁,否则会在查询数据库以后再释放锁这样可以阻止并发情况下多个线程同时查询数据.
eviction="LUR" 回收策略 默认 LUR 最近最少使用
flushInterval="" 缓存刷新时间间隔,单位毫秒,不设置则在调用时刷新
readOnly="true" 只读
size="1024" 缓存对象的个数 默认1024/>
<!-- 操作 CUD的 statement时候,会强制刷新二级缓存 -->
<!-- 我们可以指定 某一个 setect 操作 使用缓存或者不使用缓存 useCache 可以指定某一个 cud 操作 是否强制刷新缓存 flushCache -->
**注意:被缓存的对象可以被序列化和反序列化,就是实现实现Serializable接口**
//功能简写了,使用时根据自己实际情况修改
public class MyRedisCache implements Cache {
private final String id; //当前放入缓存的Mapper的 namespace 名称空间
private final Map<Object, Object> cache = new HashMap<>();
public MyRedisCache(String id) {
this.id = id;
}
// 返回cache的唯一标识
@override
public String getId() {
return id;
}
// 缓存放入值
// redis --- RedisTemplate StringRedisTemplate
@Override
public void putObject(Object key, Object value) {
getRedisTemplate().opsForHash().put(key,value);
}
// 从缓存中获取值
@Override
public Object getObject(Object key) {
return getRedisTemplate().opsForHash().get(key);
}
@Override
public void clear() {
//清空namespace
getRedisTemplate().delete(id.toString());//清空缓存
}
...
}
<!--使自定义的缓存执行类生效-->
<cache type="...MyRedisCache" .../>
@configuration
public class ApplicationContextUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
//工厂中获取对象 工厂中RedisTemplate 默认 name redisTemplate
public static Object getBean(String beanName){
return applicationContext.getBean(beanName);
}
}
感谢您的阅读,各位大佬有什么意见和问题欢迎评论区留言! 觉得文章对你有帮助记得给我点个赞,欢迎大家关注和转发文章!
以上是脚本宝典为你收集整理的mybatis本地缓存&分布式缓存干货分享全部内容,希望文章能够帮你解决mybatis本地缓存&分布式缓存干货分享所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。