Java开源缓存框架介绍(OSCache,JSC)
OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。
有一个疑惑。就是JAVA缓存框架与memcache有什么区别呢?我把所有数据查询出来放在memcache里面不行么?比如说oscache与memcache适用场合有什么区别呢?
Java开源缓存框架介绍(OSCache,JSC)
OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。
有一个疑惑。就是JAVA缓存框架与memcache有什么区别呢?我把所有数据查询出来放在memcache里面不行么?比如说oscache与memcache适用场合有什么区别呢?
OSCache好久没更新了,建议多看看EHCache的官方文档。
ehcache这种jvm的缓存和memcache这种io级别的缓存还是有明显差别的,以下区别决定了他们会在不同的场景下使用。优点
: 没有IO开销会有更高的效率,使用起来也更加灵活。缺点
: 但是公用jvm内存也会对应用本身有影响,另外多个应用共享就比较苦难了。(ehcache有一个不使用jvm内存的方案)
OSCache或者EHCache这种,主要的应用场景大多是应用内缓存。也就是我这一个程序里使用的缓存。所有的缓存在自己写的这个程序里面。
而 memcache 是独立的另一个进程,是独立的缓存,缓存的数据保存的另一个进程的内存中。区别在我看来有两点:
个人感觉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在每个进程上都有一份;但访问需要进程间通信,多了通信的开销。
3 回答2.8k 阅读✓ 已解决
3 回答4.3k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
8 回答3.9k 阅读
3 回答2.6k 阅读✓ 已解决
4 回答2.1k 阅读
3 回答1.6k 阅读✓ 已解决
参考j2cache实现