yinhong2006 2011-09-01 00:28
浏览 694
已采纳

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)主动清除缓存?

  • 写回答

3条回答 默认 最新

  • weixin_42565855 2011-09-01 01:11
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误