- 与Spring 框架中集合Ehcache的方式主要有注入两个类
<bean id ="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache/ehcache.xml">
</bean>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcache">
</bean>
<cache:annotation-driven cache-manager="cacheManager" />
通过上面的配置之后可以使用注解:
@Cacheable @CachePut @CacheEvict @CacheConfig
和使用ironrhino的CheckCache,EvictCache一样,不过ironrhino是通过切面编程来实现缓存机制,CacheAspect.class
2.通过集群方案可以实现集群中的不同EhCache 实现缓存一致性问题;Ehcache使用的集群方案主要有 RMI组播方式、JMS消息方式、Cache Server模式
2.1 RMI组播方式
缓存改变是,Ehcache会向组播IP地址和端口号发送RMI UDP组播包;
2.2 JMS消息方式
JMS核心的就是一个消息队列,每个应用节点都订阅定义好的主题,当有缓存更新时,会主动发布更新到主题中去,Ehcache默认支持ActiveMQ,也可以通过自定义组件的方式实现类似Kafka 和RabbitMQ等。
2.3 Cache Server 模式
3.Ehcache 使用的场景
(1).比较少更新的场景下(Hibernate 在进行更新操作时,或删除缓存中对应的对象)
(2) 对并发要求不严格,因为不能实时同步
(3) 对一致性要求不高
在实际工作中,把Ehcache作为集中式缓存(Redis/Memcached)二级缓存使用,但是如何解决在集中式缓存和本地二级缓存一致性问题,主要有如下方案:
1.定时轮询 本地缓存定时轮询Redis缓存,比较缓存版本
2.主动通知 本地缓存订阅MQ消息,Redis缓存主动通知
4 另一个本地缓存 Guava Cache 主要适用于一下场景:
- 愿意消耗一些本地内存来提升速度
- 更新锁定:如果多个并发请求读取一个缓存中不存在的数据时,会锁定一个请求去读取数据,放在缓存中,其他的请求被阻塞。