系统是由Spring2,STRUTS2,IBATIS2框架结合开发的,我现在只知道IBATIS有一个查询缓存,根据ROBBIN的博客上写的是缓存可以不同层面上的,分为
1、对象缓存
2、查询缓存
3、片断缓存
4、Action缓存
除了IBATIS有个查询缓存,其余这三个层面上,怎么在这个SSI2系统上实现?
那memcached属于哪个层面上,怎么和这套系统配合,使性能更好?
[b]问题补充:[/b]
我在网上找了下关于缓存粒度的解释比较少,粒度是不是需要被缓存大小?
ACTION缓存好像在RUBY比较多,JAVA怎么实现?
用ibatis的目的是充分发挥SQL和数据库的威力,所以ibatis的缓存做的不是很讲究。自己实现缓存相当麻烦,单一个脏数据的问题,一般程序员就搞不定。ibatis一般用在数据量很大,SQL高度优化或遗留系统的场合。
memcached是一个缓存系统,和ehcache,oscache类似(不过好像更强一些),ibatis和hibernate可以用他们实现自己的缓存策略,也就是可以用来实现robbin所讲的“层面”,所以它们不属于robbin所说的层面。
robbin的意思是缓存粒度,对象缓存根据ID缓存对象;查询缓存根据查询条件缓存查询结果(collection);片段缓存好像指的是页面片段的缓存;action缓存不清楚。ibatis也可以实现前两种,不过还是要谨慎。
建议你先做性能测试,再考虑缓存策略,自己实现的话,需要大牛支持一下 :( 。
粒度应该是 尽量缓存对象的主要内容,不要把整个对象缓存进去。
主要根据业务逻辑,比如只需要一个对象的a,b字段,那就不需要把a,b,c,d字段全部缓存了。
memcache可以看作一个远程访问的cache,由于其奔放的内存管理策略,使得其在处理读和写的时候速度都相当快,但是会带来一定的内存浪费。
一般用于高访问量的应用场景中,可以多台服务器共享memcached, 支持集群
,减少数据库压力。