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 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统
  • ¥15 快手联盟怎么快速的跑出建立模型