论坛首页 Java企业应用论坛

ibatis的缓存

浏览 10358 次
锁定老帖子 主题:ibatis的缓存
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-01-16  
如何知道ibatis是否使用了缓存?
我的配置:
<cacheModel id="user_cache" type="LRU" >
<flushInterval hours="24" />
<flushOnExecute statement="updateUser" />
<property value="600" name="size"/>
</cacheModel>
<select id="getUserByCache" resultClass="user"
cacheModel="user_cache">
<![CDATA[
    SELECT id,username,password FROM user where id <70
    ]]>
</select>

<settings cacheModelsEnabled="true" enhancementEnabled="true"
lazyLoadingEnabled="true" .../>

java代码:
public List<User> getAllUserByCache() {
SqlMapClient sqlMap = getSqlMap();
List list = null;
try {
sqlMap.startTransaction();
list = sqlMap.queryForList(GET_USER_BY_CACHE, null);
sqlMap.commitTransaction();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
sqlMap.endTransaction();
} catch (Exception e) {
}
}
return list;
}
本来缓存了24小时的数据, 也没执行更新操作. 理论上说,除了第一次执行时,要到数据库中查找外, 后面的几次应该不需要从数据库中查找吧, 且结果也只有70条, 远没超出600条的缓存大小.
但是从关log4j日志分析: 每次查询, 总有'SimpleDataSource - Created connection 7306473.'和'SimpleDataSource - Returned connection 7306473 to pool.'等日志.
请问,后面的几次仍有Created connection的记录, 是否表示, 缓存没在起作用, 每次都从数据库中读数据? 谢谢.
   发表时间:2008-01-16  
关注

实际使用过程中好像感觉不到缓存的存在
0 请登录后投票
   发表时间:2008-01-28  
你可以通过在后台,通过数据库客户端工具"偷偷"的放数据库里新增加一条记录,然后看前台所有记录列表,如果记录发生了变化,则缓存没有生效.如果记录还是原来的记录,则缓存生效了.
0 请登录后投票
   发表时间:2008-01-29  
一言惊醒梦中人,多谢javaji
0 请登录后投票
   发表时间:2008-01-29  
不好意思, 名字错了, 应该是
多谢javajia
0 请登录后投票
   发表时间:2008-01-29  
    事实证明,这时,缓存没有起作用.
         我的测试方法是一个只查询前10条记录的语句, 运行程序, 读出这10条记录, 更新第一条记录, 再运行程序, 打印结果是打印了刚更新的记录, 可见还是从数据库读数据,这里缓存没起作用.
    请问ibatis中如何使用缓存?
0 请登录后投票
   发表时间:2008-02-03  
这个缓存功能真不是很好用~
0 请登录后投票
   发表时间:2008-02-08  
我这两天也在做这方面的测试,好像没有你说的问题。
试一下我用的方法:
1. 改一下LOG4J的设置:log4j.logger.java.sql.PreparedStatement=DEBUG
2. 在getAllUserByCache方法里面,把sqlMap.queryForList执行两次,看一下控制台的sql日志是否执行了两次select语句。
0 请登录后投票
   发表时间:2008-02-08  
刚才又测试了一下,iBATIS的缓存只有在使用了同一个Connection的情况下才生效
0 请登录后投票
   发表时间:2008-02-19  
<cacheModel id="user_cache" type="LRU" >
<flushInterval hours="24" />
<flushOnExecute statement="updateUser" />
<property value="600" name="size"/>
</cacheModel>

试一试改成
<cacheModel id="user_cache" type="LRU" readOnly="false" serialize="true">
<flushInterval hours="24" />
<flushOnExecute statement="updateUser" />
<property value="600" name="size"/>
</cacheModel>

Ibatis默认serialize="false"代表不是全局缓存。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics