ehcache.有了Cache对象之后就可以进行一些基本的Cache操作,例如://往cache中添加元素Element element = new Element("key","value");cache.put(element);//从cache中取回元素Element element = cache.get("key");element.getValue();//从Cache中移除一个元素cache.remove("key");EHCache的监控对 于Cache的使用,除了功能,在实际的系统运营过程中,我们会比较关注每个Cache对象占用的内存大小和Cache的命中率。
Spring Boot中的缓存支持(一)注解配置与EhCache使用。在Spring Boot主类中增加@EnableCaching注解开启缓存功能,如下:在Spring Boot中通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者:在Spring Boot中开启EhCache非常简单,只需要在工程中加入ehcache.xml配置文件并在pom.xml中增加ehcache依赖,框架只要发现该文件,就会创建EhCache的缓存管理器。
EhCache 一般用途如下: Hibernate 缓存, DAO 缓存,安全性凭证缓存( Acegi ), Web 缓存,应用持久化和分布式缓存。 EhCache 在默认情况下,即在用户未提供自身配置文件ehcache.xml或ehcache-failsafe.xml时,EhCache会依据其自身Jar存档包含的ehcache-failsafe.xml文件所定制的策略来管理缓存。如果用户在classpath下提供了ehcache.xml或ehcache-failsafe.xml文件,那么EhCache将会应用这个文件。如果两个文件同时提供,那么EhCache会使用ehcache.xml文件的配置。 EhCache默认内容如下:
Ehcache 整合Spring 使用页面、对象缓存。一般的加些配置就可以了,而且Ehcache可以对页面、对象、数据进行缓存,同时支持集群/分布式缓存。EHCache支持内存和磁盘的缓存,支持LRU、LFU和FIFO多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件。// 获取页面缓存。对象缓存就是将查询的数据,添加到缓存中,下次再次查询的时候直接从缓存中获取,而不去数据库中查询。-- 使用缓存 关联ehcache.xml中的缓存配置 -->
1、主要特性 1. 快速. 2. 简单. 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 5. 缓存数据会在虚拟机重启的过程中写入磁盘 6. 可以通过RMI、可插入API等方式进行分布式缓存 7. 具有缓存和缓存管理器的侦听接口 8. 支持多缓存管理器实例,以及一个实例的多个缓存区域 9. 提供Hibernate的缓存实现 10. 等等。
Hibernate+ehcache二级缓存技术。4、如果需要"查询缓存",还需要在使用Query或Criteria()时设置其setCacheable(true);属性。import cn.rmic.hibernatesample.hibernate.// Query q=s.createQuery("From Resources r") // .setCacheable(true) // .setCacheRegion("frontpages") ;
hibernate可以用两种不同的对象缓存:first-level cache 和 second-level cache。<property name="mappingJarLocations"> <list><value>file:dist/appfuse-dao.jar</value></list> </property> --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">@HIBERNATE
Hibernate作为和数据库数据打交道的框架,自然会设计到操作数据的效率问题,而对于一些频繁操作的数据,缓存策略就是提高其性能一种重要手段,而hibernate框架是支持缓存的,而且支持一级和二级两种缓存,合理的使用缓存策略可以大大提高我们的操作数据效率,但是利用不能,可能会造成不必要的麻烦。一,一级缓存(Session缓存):c,让框架识别添加入的ehcache缓存组件,在hibernate.cfg.xml配置文件中添加属性标签:
EHCache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中。hibernate.cfg.xml中需设置如下: 2.1版本加入 Java代码 <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.Provider</property> 2.1以下版本加入 Java代码 <property name="hibernate.cache.provider_class">net.sf.hibernate.cache.EhCache</property>
EHCache技术文档。创建Caches (net.sf.ehcache.Cache)根据需求,计划使用Spring AOP + ehCache来实现这个功能,采用ehCache原因之一是Spring提供了ehCache的支持,至于为何仅仅支持ehCache而不支持osCache和JBossCache无从得知(Hibernate???),但毕竟Spring提供了支持,可以减少一部分工作量:)。随后,开始配置ehCache的属性,ehCache需要一个xml文件来设置ehCache相关的一些属性,如最大缓存数量、cache刷新的时间等等.
Element element1 = new Element(key1, value1);cache.put(element1);Element element2 = cache.get(key1);CacheManager,默认会去找ehcache.xml以及ehcache-failsafe.xml等文件,最后创建的是一个Cache对象。ArrayList sampled = new ArrayList(size * 2);public Element selectedBasedOnPolicy(Element[] sampledElements, Element justAdded) {public boolean compare(Element element1, Element element2) {
java ehcache 分布式缓存配置实例 .<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %><%@page import="net.sf.ehcache.CacheManager"%><%@page import="net.sf.ehcache.Element"%><%@page import="net.sf.ehcache.Cache"%><h1>EhCache Cluster Tester</h1>例外hibernate+ehcahce的配置基本同上 配置hibernate实用ehcache后 在代码和hbf配置文件中可以指定使用缓存[setCached(true)]
EhCache实现OSGi缓存bundle.Ehcache是纯java的轻量级缓存,支持内存和硬盘缓存(在.xml配置),LFU,LRU的缓存实现方式也只要写在配置文件里即可。Element Element Element Element Element Element.然后由配置好的.xml创建CacheManager,然后由CacheManager创建xml内的不同种类的cache,最后新建Element(存着键值对)添加到相应的cache内,即完成了最简单的get,put功能的缓存。
java.library.path的值可以通过System.getProperty("java.library.path")查看,但是你即使在程序中通过System.setProperty("java.library.path", "some/folder/path/contain/dll")来改变java.library.path的值,还是无法加载到对应的dll库文件,原因是JVM只在程序加载之初读取java.library.path,以后再使用java.library.path的时候,用的都是最一开始加载到得那个值。
Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。 你可以将Cache的配置从代码中剥离出来,也可以在使用运行时配置,所谓的运行时配置无非也就是在代码中配置。以下是运行时配置的好处
第十章:Shiro的Cache.3:CacheManagerAware - 通过想要接收和使用CacheManager 实例的组件来实现 n nCacheManager 返回Cache 实例,各种不同的Shiro 组件使用这些Cache 实例来缓存必要的数据。缓存数据同步更新的解决方案 n使用Shiro的时候,缓存数据最大的问题就在于数据同步更新。n因为Shiro只负责验证部分,如果应用程序修改了人员的权限,那么就需要同步更新到Shiro里面去,也就是要同步Shiro的缓存数据。
Spring使用Cache、整合Ehcache.Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。cache:caching元素下又可以指定cache:cacheable、cache:cache-put和cache:cache-evict元素,它们类似于使用注解时的@Cacheable、@CachePut和@CacheEvict。
Ehcache配置详解及CacheManager使用 <!-- 缓存配置 name:缓存名称。
springMVC集成缓存框架Ehcache.3 LRU,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。缓存管理器工厂加载ehcache的配置。当缓存中没有该对象的时候,当然要从数据库里面访问了,从数据库查出来之后,缓存管理器会将此对象放到缓存中,下一次访问的时候,只要该对象没有消亡,则会从缓存里去取,不会再去查数据库。
} /** * 根据缓存名字获得某个缓存 * @param cacheName * @return */ public static Cache getCache(String cacheName) { return cacheManager.getCache(cacheName); } /** * 根据缓存名字,元素的key值,获得缓存中对应的value值对象。* @param cacheName * @param key * @param isRemoveKey * @return */ public static Object getValue(String cacheName, Object key, boolean isRemoveKey) { Cache cache = getCache(cacheName);
--过滤器--><mvc:interceptors> <!--API ACCESS TOKEN INTERCEPTOR--> <mvc:interceptor> <mvc:mapping path="/api/**"/> <mvc:exclude-mapping path="/**/api/user/**" /> <mvc:exclude-mapping path="/**/api/accesstoken" /> <bean class="cn.ifengkou.athena.controller.interceptor.AccessTokenVerifyInterceptor"></bean> </mvc:interceptor> <!--other interceptor --></mvc:interceptors>缓存处理。
玩转EhCache之最简单的缓存框架玩转EhCache之最简单的缓存框架。支持多缓存管理器实例,以及一个实例的多个缓存区域;其实我们在使用Ehcache分布式缓存的过程中,主要是以缓存插件的方式使用,如果我们想根据自己的需要使用分布式缓存那就需要自己开发来定制化,在后面我们会发现其实Ehcache提供的分布式缓存并不是非常好用,有不少问题存在,所以对缓存数据一致性比较高的情况下,使用集中式缓存更合适,比如Redis、Memcached等。
} @Test public void cache() throws InterruptedException { log.info("访问了 {} 接口 , 现在时间为 {} ", "service.queryHellos()", new Date()); service.queryHellos(); log.info("访问了 {} 接口 , 现在时间为 {} ", "service.queryHellos()", new Date()); service.queryHellos(); Thread.sleep(5000); log.info("访问了 {} 接口 , 现在时间为 {} ", "service.queryHellos()", new Date()); service.queryHellos(); }}
设置一个名为testCache 的新cache,并定义其属性: CacheManager singletonManager = CacheManager.create();Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2);singletonManager.addCache(memoryOnlyCache);Cache test = singletonManager.getCache("testCache");得到缓存对对象占用磁盘的数量Cache cache = manager.getCache("testCache");long elementsInMemory = cache.getDiskStoreSize();
Spring整合Ehcache管理缓存
在多JVM实例的情况时,进程内缓存和磁盘缓存会存在两个问题:1.单机容量问题; 2.数据一致性问题(既然数据允许缓存,则表示允许一定时间内的不一致,因此可以设置缓存数据的过期时间来定期更新数据); 3.缓存不命中时,需要回源到DB/服务查询变多:每个实例在缓存不命中情况下都会回源到DB加载数据,因此,多实例后DB整体的访问量就变多了。单机时:存储最热的数据到堆缓存,相对热的数据到堆外缓存,不热的数据存到磁盘缓存。