锁定老帖子 主题:ibatis的缓存
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-16
我的配置: <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的记录, 是否表示, 缓存没在起作用, 每次都从数据库中读数据? 谢谢. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-01-16
关注
实际使用过程中好像感觉不到缓存的存在 |
|
返回顶楼 | |
发表时间:2008-01-28
你可以通过在后台,通过数据库客户端工具"偷偷"的放数据库里新增加一条记录,然后看前台所有记录列表,如果记录发生了变化,则缓存没有生效.如果记录还是原来的记录,则缓存生效了.
|
|
返回顶楼 | |
发表时间:2008-01-29
一言惊醒梦中人,多谢javaji
|
|
返回顶楼 | |
发表时间:2008-01-29
不好意思, 名字错了, 应该是
多谢javajia |
|
返回顶楼 | |
发表时间:2008-01-29
事实证明,这时,缓存没有起作用.
我的测试方法是一个只查询前10条记录的语句, 运行程序, 读出这10条记录, 更新第一条记录, 再运行程序, 打印结果是打印了刚更新的记录, 可见还是从数据库读数据,这里缓存没起作用. 请问ibatis中如何使用缓存? |
|
返回顶楼 | |
发表时间:2008-02-03
这个缓存功能真不是很好用~
|
|
返回顶楼 | |
发表时间:2008-02-08
我这两天也在做这方面的测试,好像没有你说的问题。
试一下我用的方法: 1. 改一下LOG4J的设置:log4j.logger.java.sql.PreparedStatement=DEBUG 2. 在getAllUserByCache方法里面,把sqlMap.queryForList执行两次,看一下控制台的sql日志是否执行了两次select语句。 |
|
返回顶楼 | |
发表时间:2008-02-08
刚才又测试了一下,iBATIS的缓存只有在使用了同一个Connection的情况下才生效
|
|
返回顶楼 | |
发表时间: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"代表不是全局缓存。 |
|
返回顶楼 | |