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 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员