天天看点

分布式缓存--EhCache

Ehcache可以对页面、对象、数据进行缓存,支持集群/分布式缓存,支持内存和磁盘的缓存,支持LRU、LFU和FIFO多种淘汰算法,可作为Hibernate的缓存插件,同时它也能提供基于Filter的Cache,该Filter可以缓存响应的内容并采用Gzip压缩提高响应速度。

所需jar: ehcache-core,ehcache-web(主要针对页面缓存)

页面缓存主要用Filter过滤器对请求的url进行过滤,如果该url在缓存中出现。那么页面数据就从缓存对象中获取,并以gzip压缩后返回。其速度是没有压缩缓存时速度的3-5倍,效率相当之高!其中页面缓存的过滤器有CachingFilter,一般要扩展filter或是自定义Filter都继承该CachingFilter。

CachingFilter功能可以对HTTP响应的内容进行缓存。这种方式缓存数据的粒度比较粗,例如缓存整张页面。它的优点是使用简单、效率高,缺点是不够灵活,可重用程度不高。

EHCache使用SimplePageCachingFilter类实现Filter缓存。该类继承自CachingFilter,有默认产生cache key的calculateKey()方法,该方法使用HTTP请求的URI和查询条件来组成key。也可以自己实现一个Filter,同样继承CachingFilter类,然后覆写calculateKey()方法,生成自定义的key。

CachingFilter输出的数据会根据浏览器发送的Accept-Encoding头信息进行Gzip压缩。

http://blog.csdn.net/ibm_hoojo/article/details/7763991

http://www.docin.com/p-22141155.html

http://www.cnblogs.com/hoojo/archive/2012/07/12/2587556.html

http://www.cnblogs.com/hoojo/archive/2012/07/12/2587941.html

http://blog.csdn.net/angjunqiang/article/details/43155437

EhCache是一个纯Java的进程内缓存框架,具有快速、精干特点,是Hibernate中默认的CacheProvider。

主要特性:

快速

简单

多种缓存策略

缓存数据有两级:内存和磁盘

缓存数据会在虚拟机重启的过程中写入磁盘

可通过RMI、可插入API等方式进行分布式缓存

具有缓存和缓存管理器的监听接口

支持多缓存管理器实例,以及一个实例多个缓存区域

提供Hibernate的缓存实现

系统缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能. 缓存设想内存是有限的,缓存的时效性也是有限的,所以可以设定内存数量的大小,可以执行失效算法,可以在内存满了的时候,按照最少访问等算法将缓存直接移除或切换到硬盘上。

为了安装分布式缓存,你需要配置一个PeerProvider、一个CacheManagerPeerListener,它们对于一个CacheManager来说是全局的。每个进行分布式操作的cache都要添加一个cacheEventListener来传送消息。

Ehcache进行集群的时候有一个cache组的概念。每个cache都是其他cache的一个peer,没有主cache的存在。

1、如何知道集群环境中的其他缓存?

成员发现(Peer Discovery)

要使用一个内置的成员发现机制要在ehcache的配置文件中指定cacheManagerPeerProviderFactory元素的class属性为net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory。

两种发现机制:

One:自动的成员发现

自动发现机制方式用TCP广播机制来确定和维持一个广播组。它只需要一个简单的配置可以自动的在组中添加和移除成员。

成员每秒向群组发送一个“心跳”。如果一个成员5秒都未发出信号它将被群组移除。如果发送“心跳”它将被添加进群组。

设置:在ehcache配置文件中cacheManagerPeerProviderFactory的properties属性设置:

继续阅读