`

EHCache Configure

    博客分类:
  • J2EE
阅读更多

    1.Overview

    Ehcache从 Hibernate 发展而来,逐渐涵盖了Cahce界的全部功能,是目前发展势头最好的一个项目。

    标准缓存

    分布式缓存(基于RMI/JGroups/JMS)

    URL,页面片段缓存(类似OSCache的相关部分)

    中央缓存服务器(类似Memcached)

    2.基本功能与配置

    Ehcache的基本功能,可以从配置文件中学习。

    总的来说,缓存与HashMap的最大不同,就是缓存设想内存是有限的,缓存的时效性也是有限的,所以可以设定内存数量的大小,可以执行失效算法 ,可以在内存满了的时候,按照最少访问等算法将缓存直接移除或切换到硬盘上。

    另外注意,ehcache的CacheManager本身有一定的默认值。而在没有指定ehcache.xml的情况下, 会使用ehcache.jar里自带的ehcache_failsafe.xml,

    2.1 对象在内存中的最大数量

    因为内存是有限的,所以必须用maxElementsInMemory(必填项)设置每类对象在内存中的最大数量。ehcache_failsafe.xml 中为10000。

    2.2 到达内存中最大量时的过期/移出算法

    过期算法: 如果缓存已经失效,人道毁灭之。失效算法由3个参数组成:

    eternal(必填项):如果为true,则永不过期,忽略后两个参数的设置。ehcache_failsafe.xml 为false.

    timeToIdleSeconds: 空闲无访问时间,默认为0,永不过时。ehcache_failsafe.xml 设为120秒。

    timeToLiveSeconds: 空闲无访问时间,默认为0,永不过时。ehcache_failsafe.xml 设为120秒。

    移出算法:如果经过失效算法后,还是有很多有效的缓存,则执行清除算法。清除算法由两个参数组成:

    memoryStoreEvictionPolicy: 默认为LRU(最近最少访问),另有先进先出(FIFO),最少访问次数(LFU)

    overflowToDisk(必填项) 为true,则将清除出来的缓存持久化到磁盘,否则人道毁灭之。

    2.3 储存到硬盘

    maxElementsOnDisk,默认为0,无限多。ehcache_failsafe.xml为10000000。

    diskExpiryThreadIntervalSeconds:使用过期算法清除磁盘中失效对象的间隔,默认为120秒。

    diskSpoolBufferSizeMB ,默认为30M。

    2.4 重启时缓存持久化

    diskPersistent 当应用重启时,可将缓存先持久化到硬盘,重启后再行载入,节省大量的重新从数据库载入。但只适合那些缓存不怎么变化,或者有特殊机制保证重启后应用能接收到重启这段时间里缓存变化信息的情况。

    3. 分布式缓存

    Ehcache 有传统的RMI,1.5版的JGroups,1.6版的JMS,随大流还是先用RMI的好些。

    3.1设置自身

    这里设置在localhost的40001端口上侦听。如果要互相同步的CahceManager不都在一台机器上的话,hostName应该是实际IP。)

    <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
    properties="hostName=localhost, port=40001,socketTimeoutMillis=2000" />

    3.2 设置需要同步的对方服务器及缓存对象,

    这里设置与40002端口上的CacheManager同步User与Role对象,如果还有第三台机器,则继续用|分割,继续往下列。同理,在 40002端口上的cacheManager的ehcache.xml里,就需要配置与400001,40003的互通)

    也有自动发现,广播的简单配法,但对广播天然恐惧,还是辛苦一点一个个静态列表配置文件的写了,虽然有点烦。

    <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
    properties="peerDiscovery=manual,
    rmiUrls=//localhost:40002/org.springside.examples.miniweb.entity.user.User|//localhost:40002/org.springside.examples.miniweb.entity.user.Role"/>

    3.3 缓存对象的配置

    往每一个需要缓存的对象加入子对象cacheEventListenerFactory

    <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
    properties="replicateAsynchronously=true,
    replicatePuts=true,
    replicateUpdates=true,
    replicateUpdatesViaCopy=true,
    replicateRemovals=true
    asynchronousReplicationIntervalMillis=<number of milliseconds">
    propertySeparator="," />

    replicateAsynchronously 对象同步是否异步完成,默认为true。如果比较紧急就设为false。

    在一致性时间性要求不强的时候,设为异步可大大提供性能,因为它是异步立即返回的,而且可以批量提交。

    replicateUpdatesViaCopy 是否将对象变更复制到所有节点,还是只是发送一个失效信息,让对方该缓存失效,当对方需要该缓存时重新计算载入。

    默认为true。鉴于对象复制的消耗挺大的,又有锁的问题,而且对方也未必需要该对象,所以此属性建议设为false。如果业务上真的需要设为true时,就可考虑使用Terracotta了。

    replicatePuts、replicateUpdates、replicateRemovals 增删改是否同步,默认都为true。但因为我们前面选择了失效算法,所以replicatePuts 要设为false。

    所以我们一般的设置如下:

    <cache name="org.springside.examples.miniweb.entity.user.User" maxElementsInMemory="500" overflowToDisk="true"
    eternal="true">
    <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
    properties="replicateAsynchronously=false,replicatePuts=false,replicateUpdatesViaCopy=false" />
    </cache>

    3.4 Shutdown

    在分布式环境或持久化硬盘时,需要调用CacheManager的shutdown操作,Hibernate会自动shutdown它自己的cacheManager,如果在hibernate之外使用,你需要增加:

    <listener>
    <listener-class>net.sf.ehcache.constructs.web.ShutdownListener</listener-class>
    </listener>

    4.JMS式并发同步

    与其他同步方式相比,JMS同步支持了非Cache节点的程序对Cahce的修改。

    在分布式缓存中有一种需求:应用节点更改数据库数据后,需要通知所有缓存集群的节点,通常大家都是自行通过JMS实现的,而Ehcache的JMS Replicator提供了一种标准的方案,提供PUT,REMOVE,REMOVE_ALL的标准操作。

分享到:
评论

相关推荐

    EHCache配置

    Configuration config = new Configuration().configure("ehcache.xml"); CacheManager cacheManager = CacheManager.create(config); Cache myCache = cacheManager.getCache("myCache"); myCache.put(new Element...

    ehcache例子,开发工具Myeclipse8.5

    - 右键点击项目 -&gt; Build Path -&gt; Configure Build Path -&gt; Libraries -&gt; Add External JARs - 导入Ehcache的jar文件,例如`ehcache-core.jar`。 2. **配置Ehcache XML** Ehcache的配置主要通过`ehcache.xml`...

    Ehcache例子

    .withCopyStrategy(new DefaultCopyStrategyConfiguration()) // Configure a default copy strategy for entries ) .build(true); // Initialize the CacheManager Cache, String&gt; myCache = cacheManager.get...

    hibernate4配置二级缓存

    Configuration cfg = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); SessionFactory ...

    Windows2008R2下用PHP-Manager对PHP配置.docx

    例如,通过"Configure error reporting"设置错误报告,改变错误日志的存储路径。在"Manage all settings"中,您可以: - 禁用高危函数,如passthru, exec, system等。 - 修改PHP的上传临时目录。 - 设置时区,...

    Hibernate常见的20个问题

    Configuration conf = new Configuration().configure("hibernate.cfg.xml"); StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()); ...

    三大缓存比较

    2. **多线程支持**:默认情况下 Memcache 采用单线程模型,但可以通过 `./configure --enable-threads` 配置支持多线程。 3. **结构简单**:可以理解为一个大型的内存 HashTable,支持 key-value 键值对缓存。 4. ...

    hibernate_常见问题集锦.doc

    Configuration conf = new Configuration().configure(file); } ``` 同时,确保`Hibernate.cfg.xml`文件中包含了JDBC连接的详细信息,如驱动、URL、用户名和密码,以及是否启用JNDI等配置。 #### 使用Eclipse开发...

    spring-boot-reference.pdf

    31.1.3. EhCache 2.x 31.1.4. Hazelcast 31.1.5. Infinispan 31.1.6. Couchbase 31.1.7. Redis 31.1.8. Caffeine 31.1.9. Simple 31.1.10. None 32. Messaging 32.1. JMS 32.1.1. ActiveMQ Support 32.1.2. Artemis ...

    hibernate 源码直接导入Eclipse

    - 第二级缓存:通过引入缓存插件(如 EhCache),提高数据访问性能。 - 异步批处理:使用批处理更新和查询,减少数据库交互次数。 - 动态加载策略:选择合适的懒加载和立即加载策略,避免N+1查询问题。 总之,...

    jfinal手册

    - **COC 原则**:配置一次(Configure Once and Forget),简化配置流程,实现零配置和无 XML 文件的设定。 - **Db + Record 模式**:独创的数据访问模式,提供灵活的数据操作方式。 - **ActiveRecord 支持**:...

    集群Nginx+Tomcat+Memcached

    这通常需要使用特定的Tomcat插件或库,如`cache-api`和`ehcache`。 - **Nginx配置**:修改Nginx配置文件(通常是`nginx.conf`),添加对后端Tomcat服务器的负载均衡规则,并启用会话保持功能。 #### 四、配置示例 ...

    hibernate源代码

    通过`configure()`方法加载hibernate.cfg.xml配置文件。 4. **Entity Mapping**:在Hibernate中,对象与数据库表之间的映射由注解或XML文件完成。例如,`@Entity`注解标记一个Java类为实体,`@Table`指定对应的...

    Hibernate执行持久层访问步骤

    1. 创建SessionFactory:通过Configuration类加载hibernate.cfg.xml配置文件,然后调用configure()方法,最后buildSessionFactory()生成SessionFactory实例。 2. SessionFactory是线程不安全的,通常在应用启动时...

    hibernate的jar包

    - 第三方缓存集成:如支持 Ehcache,用于提高数据访问速度和并发性能。 - 支持复杂的关联关系:一对多、多对一、一对一、多对多等。 - 支持延迟加载(Lazy Loading):只在真正需要时才加载关联的对象,减少...

    hibernate.jar包

    - 创建SessionFactory:调用configure()方法完成配置加载后,通过buildSessionFactory()生成SessionFactory。 - 获取Session:通过SessionFactory的openSession()或getCurrentSession()获取Session实例。 - 开启...

    使用 HibernateSessionFactory 类

    Configuration config = new Configuration().configure("hibernate.cfg.xml"); ``` 4. **映射元数据**: 加载实体类的映射信息,这可以通过扫描指定的包或者添加单个类完成: ```java config.addAnnotatedClass...

    hibernate_src

    配置完成后,调用`configure()`方法加载配置信息,再通过`buildSessionFactory()`生成SessionFactory对象。这个过程会解析XML配置文件,生成Hibernate的元数据,为后续的数据库操作做好准备。 2. Hibernate的实体...

Global site tag (gtag.js) - Google Analytics