iBatis(MyBatis)开启缓存后,通过外部程序修改或者删除数据库记录,如何让Cache清除?

当其外部的数据库连接甚至是数据库管理系统,对数据库进行了更改,iBatis(MyBatis)的缓存如果没有过期,是不会对数据库的修改做出相应的?这一点有什么好的解决方案?

再简单的描述一下(假设数据库系统为MySQL),例如有一个Java的应用持久层框架是使用iBatis(MyBatis)有一个每个500ms(毫秒)调用一次对数据库中ID为100的记录进行 select 操作,由于缓存的时间很长,此时有一个外部程序,假设此程序为一个C/C++程序通过mysql C API 连接到当前数据库(和java应用程序同一个数据库)它将ID为100的记录删除了。然而此时java应用中每个500ms对此记录进行select 操作依然有效!这个很郁闷,iBatis(MyBatis)的缓存有什么选项能够对外部数据库连接对记录进行修改或者删除能让iBatis(MyBatis)主动清除缓存?

0

3个回答

MyBatis中没有这个机制。
MyBatis二级缓存工作原理是所有针对数据源的CRUD操作都先经过
缓存处理,对于查询操作,如果能正好命中缓存中的数据,直接从
缓存中返回,减少和数据库的IO操作来提高性能,否则查询数据库
将数据加入缓存再返回。对于增删改,修改数据库以后在返回之前
同时修改缓存。
如果从外部不经过缓存直接修改数据,那么肯定缓存中的数据和
真实数据会不一致。
如果一定有这个需求,可以在系统中对外提供数据增、删、改的服务;
或者当外部修改数据后,向系统发送通知,系统再刷新缓存。

0

没办法

缓存本只改用于那些较少更改或者脏数据对应用影响不大的地方

如果需要数据库中实时的数据,那么就不适合用缓存了

0

你这个得改变缓存策略,既然有外部影响,不能光靠mybatis自身的缓存了,你自己可以实现应用一层的缓存比较好点,也不难,无非就是存对象取对象了。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何强制清除ibatis缓存
如何强制清除ibatis缓存,请高手给出详细配置
cache 缓存定时清除
清除缓存的时间是早上8点 // 清除缓存的时间是早上8点 $clear_time = strtotime("8:00:00"); $space_time = strtotime("23:59:00"); $now_time = strtotime(date("H:i:s", time())); $cache_time = $cl...
清除Cache缓存
/// /// 清除所有Cache缓存 /// public static void RemoveAllCache() { try { Cache _cache = HttpRuntime.Cache; IDiction
MyBatis缓存Cache源码分析
一、缓存接口介绍 MyBatis的一级缓存和二级缓存都是使用的Cache接口实现类,它的方法定义如下: public interface Cache { String getId(); void putObject(Object key, Object value); Object getObject(Object key); Object removeObject...
mybatis cache (缓存)的增加
1、jar 和配置文件 maven项目 .pom文件设置 2、resources目录下的config目录下加入 ehcache.xml 配置如下 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" updateCheck="false"          xsi:noNamespaceSchemaLocati...
iBATIS、MyBatis缓存设置
正如其他持久层框架一样,MyBatis同样提供了一级缓存和二级缓存的支持 一级缓存:基于PerpetualCache的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为
MyBatis自带的缓存配置(Cache)
如果要实现 mybatis 的二级缓存,一般来说有如下两种方式: 1. 采用 mybatis 内置的 cache 机制。 2. 采用三方 cache 框架, 比如ehcache, oscache 等等. 采用 mybatis 内置的 cache 机制。 在 sql 语句映射文件中加入 语句 , 并且相应的 model 类要实现 java Serializable 接口,因为缓存说
MyBatis源码通~缓存Cache
Cache缓存原理 Mybatis提供一级缓存和二级缓存,一级缓存即缓存在内存中的,二级缓存则是利用第三方缓存工具来缓存数据。对应类包括BaseExecutor、CachingExecutor、Cache接口实现类。 1、缓存实现类 implement Cache Mybatis提供了非常多的缓存实现类,有最基本的PerpetualCache实现类、实现LRU策略的LruCache、可保证线程...
Mybatis 学习笔记(七)——缓存(Cache)
目录一、什么是缓存(Cache)?二、为什么要用缓存(Cache)?三、一级缓存(一)原理(二)测试(三)应用四、二级缓存(一)原理(二)开启二级缓存(三)Cache参数(四)POJO类实现序列化(五)测试(六)应用五、Mybatis整合ehcache(一)加入ehcache的jar包(二)整合ehcache(三)加入ehcache配置文件 一、什么是缓存(Cache)?   Cache是高速缓冲...
Mybatis 外部修改数据库形成的缓存问题
MyBatis二级缓存工作原理是所有针对数据源的CRUD操作都先经过 缓存处理,对于查询操作,如果能正好命中缓存中的数据,直接从 缓存中返回,减少和数据库的IO操作来提高性能,否则查询数据库 将数据加入缓存再返回。对于增删改,修改数据库以后在返回之前 同时修改缓存。 如果从外部不经过缓存直接修改数据,那么肯定缓存中的数据和真实数据会不一致。 如果一定有这个需求,可以在系统中对
Yii2开启数据表结构缓存和清除
db组件开启结构缓存 Yii::$app->db->schema->refresh();//刷新所有表结构 Yii::$app->db->schema->refreshTableSchema($tableName);//刷新指定表结构
如何清除IIS的CACHE?
我都是依靠重新启动服务器来清楚的.有没有更好的办法?
如何清除Cache
清除整个站点的Cachern如何清除?rnCache.Remove(key)rn但并不知道所有的key啊
如何直接清除cache?
请问有什么办法直接清除CPU的高速缓存?rn
如何清除所有Cache?
求助:通过程序修改环境变量后,如何让其即时生效
最近手头上一个项目,因为需要将生成的控件输出到WORD文档,但C#代码中用到了非托管代码,所以现在需要设置程序的路径到环境变量中,并让其即时生效(不需要重新启动电脑),我找了一些资料,说使用SendMessageTimeout函数可以实现,但我使用过后,环境变量改变了。但没有使用其立即生效,将控件加载到WORD文档后,运行挂件时还是会报找不到DLL异常.rn求各位大大指点迷津.足感盛情.
开启数据库外部访问
执行sql语句:GRANT ALL PRIVILEGES ON *.* TO [email='myuser'@'192.168.0.101']%27myuser%27@%27192.168.0.101%27[/email] IDENTIFIED BY 'mypassword' WITH GRANT OPTION;  表示允许IP为192.168.0.101的电脑以myuser的账号连接本机数据库
通过源码分析MyBatis的缓存
2019独角兽企业重金招聘Python工程师标准>>> ...
如何删除、清除页面级缓存?
我在asp.net1.1里使用到页面级缓存 rnrnp.aspx里设置:rnrn<%@OutputCache Duration="120000" VaryByParam="bh" %>rnrnp.aspx?bh=1rnp.aspx?bh=2rnrn我如何指定bh=1的缓存失效而不影响p.aspx?bh=2的缓存?
数据库代码中缓存,如何设置Cache
我的数据是这样读取出来,并写到网页上的rn Dim objConn As New Data.OleDb.OleDbConnectionrn Dim strConnection As Stringrn strConnection = Server.MapPath("app_data/gametook.mdb")rn objConn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & strConnectionrn objConn.Open()rnrn Dim objCmd As New Data.OleDb.OleDbCommandrn objCmd.Connection = objConnrn objCmd.CommandText = "select top 8 * from List"rn Dim objReader As Data.OleDb.OleDbDataReader = objCmd.ExecuteReader()rnrn While objReader.Readrn rn Dim r As New HtmlTableRowrn rn Dim c1 As New HtmlTableCell()rnrn Dim a1 As New HtmlAnchorrn a1.InnerHtml = "[" & objReader.GetValue(1) & "]"rn a1.HRef = "reader.aspx?textid=" & objReader.GetValue(0)rn a1.Target = "_blank"rnrn c1.Controls.Add(a1)rn rn r.Cells.Add(c1)rn rn Table1.Rows.Add(r)rn rn End Whilernrn请问如何在代码中缓存,也就是设置Cache,得到部分数据缓存。rnrn先谢谢!
Ibatis学习(通过Ibatis实现简单的数据库的添加、删除、修改)
通过Ibatis实现简单的数据库的添加、删除、修改等功能的小小资料!
数据库记录的CACHE问题
我用TQuery控件通过BDE、ODBC访问ORACLE数据库, rn发现每执行一次查询TQuery都会把查询结果中的 rn所有记录读到本地缓存中,当结果集很大时性能 rn非常低,查了很多帮助还是找不到解决办法, rn而设置TQuery::UniDirectional为真或为假都没用, rn不知哪位高手知道如何不缓冲所有的查询结果? rn多谢了!rn
如何删除数据库记录,
一个2W条的数据库,如何删除前15000条,ID排序
Cache缓存
设置缓存: ArrayList myarray = new ArrayList();                  myarray.Add(mes);                            HttpRuntime.Cache.Add(phone, myarray, null, DateTime.Now.AddMinutes(5),                   
缓存 cache
opengl(3) opengl太阳系(3) midi(2) opengl动画(2) java浏览器(1) 魔方(1) 路灯(1) java笑脸(1) java(1) demo(1) opengl做的路灯(1) 3d(1) 太空(1) 太阳系(1) java换成结构(1) 迭代器(1) 算法分析(1) lucene(1) 开发自己的搜索引擎(1) adpcm(1) visual(1) c++(1) opengl开发库(1) 雷电(1) 围棋(1) 记事本(1) java画板(1) 五子棋(1) 薄饼游戏源代码(1) java连连看(1) java无色连珠游戏源代码(1) 货币转换(1) java画图(1) 打字游戏(1) opengl轮廓字体(1) opengl地形(1) cache(1) opengl台灯(1) opengl拼图(1) java电话(1) opengl闹钟(1) opengl喷
缓存Cache
前序:Spring Cache对Cache进行了抽象,提供了@Cacheable、@CachePut、@CacheEvict等注解。可用于大型系统或者分布式系统。应用系统需要通过Cache来缓存不经常改变的数据已提高系统性能,减少跟数据库的交互来增加系统的吞吐量。 一、Spring Boot Cache Spring Boot本身提供了一个基于ConcurrentHashMap的缓存机制,也集...
Cache——缓存
前言:    其实这是我在一本书中看到的一篇文章感觉写的挺有意思的,就谢谢自己的小感觉! 缓存是什么?    书中解释缓存原来指的是存放物品的场所。在当技术用语的时候,它的意思是“为了快速进行数据处理而存放曾经使用过的数据的地方”。     缓存是一个很常用的技术。比方说,显示一个含有大图片的Web页面的时候,第一次会稍微花点时间,但第二次会立即显示出来。这就是因为大图片被放在了缓存里(被
cache缓存
在Django框架内建cache表python manage.py createcachetable安装框架的Redis:python manage.py django-redis查看所有连接和侦听端口的命令:Windows:netstat -aLinux:netstat -taplcache缓存的设置与应用:【1.Django框架内置缓存 2.原生缓存 3.导入Django-redis的redi...
spring项目中通过xml配置缓存(cache)记录贴
配置一个spring默认实现的缓存(cache)&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt; &amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:cache=&quot;
如何清除IE缓存
css定义链接颜色rn如果点击过的颜色为红,rn正常的颜色为黑色的话rn我想实现正常按CSS定义的来,如果关闭IE的话,就清空rn等我再次打开时还是点击过的为黑色,没点的也是黑色,rn这样能实现吗
如何清除iis缓存
如何清除iis缓存
如何清除浏览器的缓存
使用了这个session_cache_limiter("private, max-age=10800");rn好象加了缓存rn如何才能把缓存中的东西都清除光呢??
***请问***如何清除IIS的Cache?
***请问***如何清除IIS的Cache?
如何清除用户控件缓存??
用户控件根据id来缓存,如VaryByParam="id",请问如何根据id来移除该缓存了? rnrn我在一用户控件页面加了 <%@ OutputCache Shared="true" Duration="7200" VaryByParam="id" %> rn请问在cs里如何根据id来移除缓存了?比如我修改了某分类的分类后如何更新为最新内容了?
如何清除控件缓存!!!
我把页面分隔成由N个用户控件页面组成rn但我想从后台管理,添加了某块信息后,可以手动清楚某个控件页面的缓存,如何做呢??rnrn实在不行,那如何清楚服务器上所有的缓存!
如何清除IE缓存?
先说下问题,做了一个图库左边右边显示,由于图都很大基本接近10M,每浏览一张新图片内存就曾加很多,一会就跑不动了。关闭IE后内存释放。rn对于内存方面问题不是很清除,不知道是不是IE缓存的问题,有没有人能指点一下?谢谢~
如何清除tomcat缓存
发布了程序后,需要清楚缓存。本文详细介绍了如何清除tomcat缓存,
ibatis缓存
Ibatis缓存 简单使用 一 缓存简单介绍     二 缓存简单使用           使用例子: cacheModelsEnabled="true"           单表 组织机构:     cacheModel type="LRU" id="organCache"> flushInterval minutes="30" /> flushOn
ibatis 缓存
1、最近在看ibatis缓存的源码,对CacheKey类一直不是很懂,是用来生成的key的hashValue的吗? rn2、还有一个问题,比如我从数据库中查询出来了2条数据,放入缓存中,再取5条数据,这5条数据中有2条数据已经在缓存中,那ibatis是从缓存中取两条数据,其余三条从数据库中取,先问是怎样实现这个功能的了,大家说说思路吧!rn
iBATIS缓存
NULL 博文链接:https://mov-webhobo.iteye.com/blog/1672240