不经意间用了ibatis的缓存引发的一个问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhutulang/article/details/25750493

昨天遇到了一个比较奇怪的现象。我们的项目中使用了缓存,具体的做法是在每次请求时先看缓存中是否有数据,如果有的话就直接从缓存中获取返回,如果没有的话就调用存储过程查询返回,将查得的数据放入静态List中,这个List作为缓存。然后写一个定时任务每隔一段时间去清空这个List 。

我写的一个接口也是这么个流程,可是却有了问题。第一次请求以及在该缓存有效期内是没问题的,正常地查到了数据返回,可是有效期过了之后,缓存被清空了,正常情况下,程序会去查询存储过程并返回数据,然后然后将数据继续放入缓存中。可是现在,它返回为空了!以后它都返回为空了!我打了断点,明明看到程序去执行存储过程了,可是它就是返回空!第一次有数据,以后就没数据了!然后,昨天就结束了!

今天一大早我到公司,测试那个接口,它又有数据返回了。一个小时后,它又返回空了!对,没错,以后都是空!

我想,我看看这个接口和其它接口有什么不同吧,为毛其它接口没这个问题呢。

后来,我找到原因了,我差点晕了。

在ibatis 配置文件中,这个存储过程配置了ibatis的缓存!cacheModel="XXX"

缓存有效期是12h 。

难怪,过了一夜,它有数据了,一个小时(我的定时任务每小时会去清一次List缓存)后又没了,ibatis认为它在缓存(ibatis的)有效期内,所以并未去执行存储过程。

我们的项目中使用了ibatis ,我没有专门的去研究过它,上面的那段配置我是从项目中其它地方拷过来,然后修改的。尴尬

我不禁有了疑问,ibatis 有缓存机制,那么我们的项目中为什么还这么麻烦自己去写那种缓存的方法?我去问老员工,他的回答有些模棱两可。大概,在有些场合,ibatis的这种缓存机制不是很适用?

有很多东西都要去学习、了解!

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页