-
iBatis(MyBatis)开启缓存后,通过外部程序修改或者删除数据库记录,如何让Cache清除?5
当其外部的数据库连接甚至是数据库管理系统,对数据库进行了更改,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)主动清除缓存?2011年9月01日 00:28
3个答案 按时间排序 按投票排序
-
采纳的答案
MyBatis中没有这个机制。
MyBatis二级缓存工作原理是所有针对数据源的CRUD操作都先经过
缓存处理,对于查询操作,如果能正好命中缓存中的数据,直接从
缓存中返回,减少和数据库的IO操作来提高性能,否则查询数据库
将数据加入缓存再返回。对于增删改,修改数据库以后在返回之前
同时修改缓存。
如果从外部不经过缓存直接修改数据,那么肯定缓存中的数据和
真实数据会不一致。
如果一定有这个需求,可以在系统中对外提供数据增、删、改的服务;
或者当外部修改数据后,向系统发送通知,系统再刷新缓存。2011年9月01日 01:11
-
你这个得改变缓存策略,既然有外部影响,不能光靠mybatis自身的缓存了,你自己可以实现应用一层的缓存比较好点,也不难,无非就是存对象取对象了。
2011年9月01日 09:09
相关推荐
#### 一、MyBatis缓存机制概述 在MyBatis中,缓存是一项重要的性能优化措施。它能够显著减少数据库的访问次数,提高应用程序的响应速度。MyBatis提供了两种级别的缓存支持:一级缓存和二级缓存。 - **一级缓存**:...
在Java开发中,MyBatis是一个非常流行的持久层框架,它简化了数据库操作,通过XML或注解方式灵活地映射SQL语句。而Redis则是一款高性能的内存数据存储系统,常被用作缓存解决方案,以提高系统的响应速度和处理能力。...
通过使用Mybatis-plus基于Redis实现二级缓存过程解析,我们可以大幅度提高应用程序的性能,减少数据库查询操作的次数。在高并发、高性能的应用场景中,使用二级缓存机制可以带来明显的性能提升。
1. **开启全局缓存**:在MyBatis的主配置文件(mybatis-config.xml)中,设置`cacheEnabled`为`true`来开启缓存功能。 ```xml ``` 2. **配置二级缓存**:在Mapper接口对应的XML配置文件中,定义一个`...
在 MyBatis 中,延迟加载(Lazy Loading)和缓存是两个非常重要的特性,它们对于提升应用程序性能和减少数据库访问有着显著作用。 **延迟加载(Lazy Loading)** 延迟加载是一种设计模式,它在对象被首次请求时才...
- **启用二级缓存**:在MyBatis的配置文件中启用全局缓存,并在Mapper接口的XML配置文件中添加`<cache>`标签,指定缓存策略。 - **自定义缓存实现**:若系统需求特殊,可以自定义缓存实现类,通过`@...
3. 缓存数据的操作:插入、更新和删除操作会影响缓存,因此在执行这些操作后,你需要清除对应缓存,以保证数据的一致性。可以通过`<update>`标签的`flushCache="true"`属性来实现。 4. 注意,虽然二级缓存可以提高...
一级缓存是基于org.apache.ibatis.cache.impl.PerpetualCache类的HashMap本地缓存,其作用域是Sqlsession。在同一个Sqlsession中,两次执行相同的sql语句,第一次执行完毕后,会将查询结果写入到缓存中,第二次会从...
3. **启用二级缓存**:在MyBatis的Mapper接口或XML文件中启用二级缓存,通过`<cache>`标签进行配置,指定缓存类型为Redis。 4. **自定义缓存实现**:创建一个实现`org.apache.ibatis.cache.Cache`接口的类,该类将...
在MyBatis中配置二级缓存,我们需要编写一个自定义的Cache实现类,该类继承自`org.apache.ibatis.cache.Cache`接口。这里我们将使用RedisTemplate来存储和检索缓存数据: ```java import org.apache.ibatis....
MyBatis是一个开源的持久层框架,它的全称是“MyBatis 3”,它是iBatis的升级版,专注于POJO(Plain Old Java Object,普通Java对象)和数据库之间的映射关系。MyBatis消除了几乎所有的JDBC代码和手动设置参数以及...
Mybatis核心应用配置与原理解析 Mybatis 作为一个流行的持久层...Mybatis 的缓存机制可以提高应用程序的性能,减少对数据库的查询次数。但是,我们需要根据实际情况选择合适的缓存机制,以确保数据的正确性和一致性。
#### 十、MyBatis缓存 MyBatis支持一级缓存和二级缓存。一级缓存默认开启,用于缓存同一个SQLSession内的查询结果;二级缓存则需要显式启用,并可以跨SQLSession共享查询结果。 示例: ```xml <cache/> ... `...
在这种情况下,可以通过调整应用程序逻辑,比如减少不必要的数据库访问,或者优化数据访问模式来解决。 综上所述,MyBatis 提供了丰富的配置选项和扩展点,能够很好地满足不同场景下的需求。对于与 Spring 的集成来...
MyBatis是一个流行的Java持久层框架,用于简化数据库操作,将SQL与Java代码紧密集成,提供了灵活的映射机制,让开发人员能够更好地控制SQL执行。`mybatis-3.1.1.jar`是MyBatis框架的一个核心库,包含了运行MyBatis...
在开发过程中,我们经常需要对数据库访问层进行调整,特别是在使用iBatis这种持久层框架时,修改SQL映射文件是常有的事。然而,每次修改后都需要重启应用服务器,这无疑降低了开发效率。本篇将详细介绍如何在不重启...
MyBatis 使用简单的 XML 或注解来进行配置和原始映射,并能够将接口和 Java 的 POJOs 映射为数据库中的记录。 #### 入门 每个 MyBatis 应用的核心都是 `SqlSessionFactory` 对象。该对象可以通过 `...
mybatis源码中文注释版 需要导入模块:需要将mybatis-parent模块导入。mybatis-parent模块 1.兵马未动,日志先行 org.apache.ibatis.logging org.apache.ibatis.logging.commons org.apache.ibatis.logging.jdbc ...
`<cache>`标签在XML配置文件中定义缓存配置,通过SqlSession的getCache()方法获取缓存实例。 7. **事务管理** iBatis 3.0支持编程式和声明式事务管理。编程式通过SqlSession的beginTransaction(), commit()和...
MyBatis是一个强大的Java持久层框架,源自Apache的iBatis项目,并在后续的发展中迁移至Google Code,最终落户于GitHub。它主要负责实现对象关系映射(ORM),即Object Relational Mapping,使得开发者能够方便地将...