Atitit mybatis缓存遇到的问题与解决 1.1. 只有getobj 没有执行putobject 1 1.2. 默认所有的select要读取缓存怎么办。。执行过滤 可以自己定义个白名单。
Atitit mybatis缓存遇到的问题与解决
1.1. 只有getobj 没有执行putobject 1
1.2. 默认所有的select要读取缓存怎么办。。执行过滤 可以自己定义个白名单。 2
1.3. 默认namespace up del操作清空缓存,做了拦截不让他自动清空,不让缓存失效。使用时间到期清空模式 3
2. 缓存内容与执行顺序不对 增加synchronized 锁定 3
2.1. 可能没有走缓存,导致curkey还是上次的。每次put玩clr curkey 并put增加sync锁,保证走完 3
2.2. 每次getxx执行前去除curkey thredlocal遍量 3
2.3. 增加keytag 教研校验 这个额 keytag 是mybati配置文件里面的 nanespace.sqlid 4
1.1. 只有getobj 没有执行putobject
估计是因为没有提交,所以还没有putobj ,应该会自己putobj的,如果不能,那么需要自己在业务里面增加
可能是spring了但是却取消了事务模式。。所以没有提交
//ati set cache
new MybatisRedisCache().putObjectByThrdlocalCurKey( uMap);
//end set cache finish
public void putObjectByThrdlocalCurKey(Object uMap) {
Object curkey= MybatisRedisCache.curkey.get();
putObject(curkey,uMap);
}
public static ThreadLocal<Object> curkey;
// 获取员工编号和姓名
Map uMap = getOperation(map);
//ati set cache
Object curkey= MybatisRedisCache.curkey.get();
new MybatisRedisCache().putObject(curkey, uMap);
1.2. 默认所有的select要读取缓存怎么办。。执行过滤 可以自己定义个白名单。
白名单机制,不然每个select都要默认走,,要一个个加麻烦。。Usecache=false麻烦 还有黑名单机制
@Override
public void putObject(Object key, Object value) {
// Object curkey= MybatisRedisCache.curkey.get();
String string_curkey = key.toString().toLowerCase();
if(string_curkey.contains("tmp") || string_curkey.contains("temp") || string_curkey.contains("count") || string_curkey.contains("insert") || string_curkey.contains("update") || string_curkey.contains("delete") || string_curkey.contains("drop") || string_curkey.contains("exist"))
return;
try {
logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>putObject key:" + key + " ,val:" + value);
if(key==null)return;
Jedis Jedis1= createReids();
byte[] serialize_key = SerializeUtil_prjcli_pkgcache.serialize(key.toString());
Jedis1.set(serialize_key, SerializeUtil_prjcli_pkgcache.serialize(value));
Jedis1.expire(serialize_key, 300); //def 5min
} catch (Exception e) {
logger.error(" mybatisredis cache.putObject ", e);
e.printStackTrace();
}
}
public void putObjectByThrdlocalCurKey(Object uMap) {
Object curkey= MybatisRedisCache.curkey.get();
String string_curkey = curkey.toString().toLowerCase();
if(string_curkey.contains("tmp") || string_curkey.contains("temp") || string_curkey.contains("count") || string_curkey.contains("insert") || string_curkey.contains("update") || string_curkey.contains("delete") || string_curkey.contains("drop") || string_curkey.contains("exist"))
return;
byte[] key2 = SerializeUtil_prjcli_pkgcache.serialize(string_curkey);
Jedis Jedis1= createReids();
if(!Jedis1.exists(key2))
putObject(curkey,uMap);
1.3. 默认namespace up del操作清空缓存,做了拦截不让他自动清空,不让缓存失效。使用时间到期清空模式
2. 缓存内容与执行顺序不对 增加synchronized 锁定
2.1. 可能没有走缓存,导致curkey还是上次的。每次put玩clr curkey 并put增加sync锁,保证走完
2.2. 每次getxx执行前去除curkey thredlocal遍量
MybatisRedisCache.curkey.set(null);
synchronized (CliSendAdviceBo.class) {
MybatisRedisCache.curkey.set(null);
m = getBCK01A(map); // cache
//ati set cache
Object key=MybatisRedisCache.curkey.get();
new MybatisRedisCache().putObjectByThrdlocalCurKey_AsynProxy("getBCK01A",m);
//end set cache finish
}
Map m ;
synchronized (CliSendAdviceBo.class) {
m = getBCK01A(map); // cache
//ati set cache
new MybatisRedisCache().putObjectByThrdlocalCurKey(m);
//end set cache finish
}
2.3. 增加keytag 教研校验 这个额 keytag 是mybati配置文件里面的 nanespace.sqlid
public void putObjectByThrdlocalCurKey_AsynProxy(final String key_valideTag, final Object param_shouldbelist) {
//if("a".equals("a"))
//return;
final Object curkey1 = MybatisCacheWzGuava.curkey.get();
AsynUtil_prjcli.execMeth_Async(new FutureTask<>(newCallable() {
@Override
publicObject call()throwsException {
putObjectByThrdlocalCurKey(key_valideTag, curkey1, param_shouldbelist);
returnnull;
}
}), "threadName");
}
/**
*
* @param param_shouldbelist
* @param m
* @param parameter
*/
synchronized public void putObjectByThrdlocalCurKey(String key_valideTag, Object curkey1,
Object param_shouldbelist) {
Object curkey = MybatisRedisCache.curkey.get();
if (curkey1 == null)
return;
if (curkey1.toString().contains("getBCK01A"))
System.out.println("dbg");
if (key_valideTag.length() > 0)
if (!curkey1.toString().toLowerCase().contains(key_valideTag.toLowerCase().trim()))
return;
/clinical/src/main/java/com/cnhis/cloudhealth/clinical/util/cache/MybatisCacheWzGuava.java
Atitit mybatis缓存遇到的问题与解决 1.1. 只有getobj 没有执行putobject 1 1.2. 默认所有的select要读取缓存怎么办。。执行过滤 可以自己定义个白名单。相关推荐
- Android源码配置第三方应用电池白名单流程分析笔记
这里以MTK6765 Android S举例说明,Android系统在加载客户应用白名单的过程. 首先Android系统可以根据不同手机厂商的需要进行源码的定制,当然定制应用白名单也是可以的,一般情况 ...
- SpamAssassin白名单和黑名单选项
白名单和黑名单选项 whitelist_from 邮件地址 它用于指定通常被误判为发送的垃圾邮件的发信地址. 并不推荐使用这个选项,垃圾邮件或钓鱼邮件的发送者非常简单的就可以制造一些让它盲目信任的邮件 ...
- python白名单验证是什么意思_第10.5节 使用__all__定义Python模块导入白名单
一.引言 <第10.4节 Python模块的弱封装机制>介绍了Python模块的的弱封装机制,除了使用弱封装机制来从一定程度上防止导入特定成员外,Python模块中还提供可另外一种类似白名 ...
- 关于黑名单和白名单的一些思考
白名单和黑名单在手机通讯录里面常提及的两个概念. 默认相信别人,直到别人给出不相信的理由 默认不相信别人,直到别人给出相信的理由 我发现白名单和黑名单不仅是在软件领域,在人生里面也是类似的.你是哪种人 ...
- 服务器新网站白名单怎么添加,服务器怎么添加域名白名单
在服务器使用中经常会用到黑白名单规则,比如防火墙白名单.邮件白名单.域名白名单等.白名单启用后,在白名单中的用户或IP地址.邮件.域名等会优先通过,可以大大提高安全性和快捷性. 服务器添加域名白名单主 ...
- 【Java】Socket网络编程实现内网穿透、端口映射转发、内网穿透上网工具的编写,设置IP白名单防火墙
这里写目录标题 简介 更新 一.背景 1.1 情景假设 1.2 想要达到的目的 1.3 局限 1.3 解决方案一(路由器NAT) 1.4 解决方案二(云服务器转发) 二.方案介绍 2.1 方案简介 2 ...
- 解决微信公众平台IP白名单
微信公众平台,作为自媒体的旗舰级产品,越来越多的人已经投入它的怀抱.正如它的广告词所说:再小的个体,也有品牌 好吧,闲话不多说,今天要说的是它的IP白名单机制. 我们现在安装的大部分都是电信的家庭宽带 ...
- 【联想电脑升级网卡】BIOS 无线网卡白名单限制解决办法——不用刷BIOS,不用修改白名单,只需简单升级即可
高高兴兴买了最新款网卡AX210,期待享受WIFI6的爽感 收到网卡 拆机 插卡 插上电源,开机! 搓手! 几行白字,一点英文,艰难翻译,大无语... 报错:Unauthorized network ...
- 白名单模板_solidworks打开stp显示默认模板无效?如何解决!
如何[设为星标★],优先推送资料信息? Ta们都在看咱们:机械大佬群 注意及时保存和分享,若有不准确的地方,欢迎批评指正,我们将及时修正! ...
- 钉钉授权时报获取钉钉用户信息失败,失败原因:访问ip不在白名单之中的解决办法
前言 公司里的一个钉钉h5应用项目,进入里需要钉钉授权,提示:钉钉授权时报获取钉钉用户信息失败,失败原因:访问ip不在白名单之中的解决办法,这个错误有一段时间了,后来在官方的文档里找到解决方法 钉钉官 ...
最新文章
- wife信号服务器可以改吗,不换无线路由器 该怎么提升WiFi信号
- HDFS追本溯源:HDFS操作的逻辑流程与源码解析
- 又一位先驱陨落:伯特·萨瑟兰去世,他参与创造互联网、Java、图形界面PC、微处理器,也是明智的实验室领袖...
- [总结]Asp.net中的页面乱码的问题
- java 安装报错2503_Windows安装Node.js报错:2503、2502的解决方法
- linux非root用户启动桌面
- html中怎么选择相同的代码,不同的HTML,相同的代码隐藏和相同的控件
- 经验 | 计算机专业科班出身如何提高自己编程能力?
- html mysql 数据列表_html的列表加载数据库
- 控制算法(二)—— 模糊控制算法
- Typora下载加速
- 解决Ubuntu下任务栏不显示任务的问题
- linux系统下安装qq,Ubuntu 12.04安装QQ2012
- laravel与TP的区别
- kubeadm重新生成admin.conf
- C语言计算线性方程组
- python数据集处理一些方法备份(长期更新)
- Windows软件打包工具的使用
- 单调函数有界性类题目解法
- hadoop常用命令及端口
热门文章
- 实验室计算机系统权限管理规程,计算机辅助建筑设计实验室使用规范(试行)...
- hive 日誌怎麼查看_Hive日志调试 | 学步园
- 手机电子词典_一个落榜生的醒悟:我的梦想,是手机夺走的!
- Mysql批量添加数据
- 2. Windows编程基础
- 【MySQL】2、MySQL 创建数据库和表
- 一个不错的架构图:基于SpringCloud的微服务项目
- overflow-x和文字超出...显示
- mmap和MappedByteBuffer
- php中的魔术常量__FILE__