JAVA缓存框架有哪些意义呢?

happyfish
  • 2.4k

Java开源缓存框架介绍(OSCache,JSC)
OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。
有一个疑惑。就是JAVA缓存框架与memcache有什么区别呢?我把所有数据查询出来放在memcache里面不行么?比如说oscache与memcache适用场合有什么区别呢?

回复
阅读 12.2k
7 个回答

参考j2cache实现

OSCache好久没更新了,建议多看看EHCache的官方文档。

ehcache这种jvm的缓存memcache这种io级别的缓存还是有明显差别的,以下区别决定了他们会在不同的场景下使用。
优点: 没有IO开销会有更高的效率,使用起来也更加灵活。
缺点: 但是公用jvm内存也会对应用本身有影响,另外多个应用共享就比较苦难了。(ehcache有一个不使用jvm内存的方案)

OSCache或者EHCache这种,主要的应用场景大多是应用内缓存。也就是我这一个程序里使用的缓存。所有的缓存在自己写的这个程序里面。
而 memcache 是独立的另一个进程,是独立的缓存,缓存的数据保存的另一个进程的内存中。区别在我看来有两点:

  1. EHCache 这种应用中的缓存,不太容易实现多实例应用间共享。对于常见的 Web 型应用,需要通过启动多个实例来增强处理能力的情况下,缓存不能共享就不利于缓存命中。
  2. memcache 这种独立的缓存,不会受到应用的启动、停止的影响。在 Web 应用中,程序重启是一个很常见的事情,如果使用应用内的缓存,一旦程序重启,缓存就全部丢失了(当然默认指没有开启持久化支持的情况下)。

个人感觉memcache就类似一个对象的容器,只是提供了简单的放入对象,移出对象的功能,可以想象成是一个Map。
而OSCache是在这种对象容器的基础上进行了封装,提供了更强大的功能,可以通过简单配置文件来实现一些内容的自动缓存,而直接使用memcache需要额外写很多缓存的罗辑和策略代码。

使用缓存,比如讲一些固定的master数据缓存起来,网站性能提升5-10倍非常容易。我们使用EHCache轻轻松松将一个选课系统的性能提升了7-8倍。

使用缓存,最麻烦的就是处理数据的同步。比如一个redis缓存服务器、一个mysql服务器,你可以写数据时同时写两个数据库,但是处理事务会存在问题,关于缓存同步,还是比较麻烦的事情

OSCache或者EHCache这种是JVM缓存,它不能在多个应用或者说不能被你的集群共享,这样就会造成内存的浪费,适用于不需要集群的小型应用。memcache 独立的缓存,可以被集群或者多个应用共享,适用于比较大一些的应用吧。

OSCache或者EHCache常用于服务器本地缓存,直接使用的话,只能单个应用进程存取,如果开了多个进程或部署多台服务器的话,每个进程只能访问本地的缓存,如果需要缓存同步,需要写相关的同步代码。ehcache还支持RMI、JGroups、JMS的分布式缓存,就不需要手写同步代码了,还可以搭建单独的EhCache Server,这种情况就跟memcache差不多了。

memcache缓存是单独的进程,好处是使用进程之间少了缓存同步,因为数据在memcache上只有一份,而不是ehcache在每个进程上都有一份;但访问需要进程间通信,多了通信的开销。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏