今天跟大家伙儿聊聊我最近捣鼓的一个东西——hibernate 的二级缓存。我这项目跑得挺顺溜的,可后来数据一多,这查询速度就跟老牛拉破车似的,慢得让人捉急。我就琢磨着,...
今天跟大家伙儿聊聊我最近捣鼓的一个东西——hibernate 的二级缓存。我这项目跑得挺顺溜的,可后来数据一多,这查询速度就跟老牛拉破车似的,慢得让人捉急。我就琢磨着,得想个法子提提速!
然后我就开始在网上找资料,发现有个叫“二级缓存”的东西,说是能把常用的数据给存起来,下次再用就不用去数据库里捞,能快不少。听着挺美,我就决定试试水。
第一步,当然是得把这“二级缓存”的家伙什儿给备齐。我记得 hibernate 自己好像没带这玩意儿,得另外找。我就从网上找到一个叫 ehcache 的东西,听说挺好使。然后我就去下载一堆相关的 jar 包,大概是这个 hibernate-release-4.2.*\lib\optional\ehcache\.jar,一股脑的复制到项目里,再把那个什么 * 的配置文件也复制到应用的类路径下。这个文件我是在 hibernate-release-4.2.*\project\etc 里找到,然后给它丢到项目的 src 目录下。
然后,得告诉 hibernate,咱要用这“二级缓存”。
打开 * 这个配置文件,往里头加两句话:
一句是 <property name="*_second_level_cache">true</property>,
另一句是 <property name="*.factory_class">*.*</property>。
这两句话的意思,大概就是告诉 hibernate:“兄弟,咱要用二级缓存,你给咱准备”
我还得告诉我这项目,哪些数据要用这个二级缓存。我在需要缓存的实体类上加个注解,叫 @Cacheable,然后又加个 @Cache,指定一个缓存策略啥的。这块儿有点绕,我也没太搞明白,反正照着网上的例子写的。
都弄好之后,我就把项目跑起来,然后又是一顿操作猛如虎,增删改查啥的都试一遍。你猜怎么着?这速度还真快不少!
我看下控制台的输出,发现第一次查询的时候,还是去数据库里查的,后边几次再查相同的数据,就直接从缓存里拿,怪不得快!
这玩意儿也不是万能的。要是数据老变,那缓存里的数据就过时,还得更新。这块儿我还得再研究研究,看看怎么弄才能又快又准。
这回折腾 hibernate 的二级缓存,还算是比较顺利。虽然中间也遇到一些小坑,但总算是把速度给提上来。看来,这技术的东西,还是得多实践,多折腾,才能真正掌握!
好,今天就跟大家伙儿聊到这儿。等我把这二级缓存彻底玩明白,再来跟大家分享心得哈!