zoukankan      html  css  js  c++  java
  • Spring MVC3 + Ehcache 缓存实现

    转自:http://www.coin163.com/it/490594393324999265/spring-ehcache

    Ehcache在很多项目中都出现过,用法也比较简单。一般的加些配置就可以了,而且Ehcache可以对页面、对象、数据进行缓存,同时支持集群/分布式缓存。如果整合Spring、Hibernate也非常的简单,Spring对Ehcache的支持也非常好。EHCache支持内存和磁盘的缓存,支持


    主会场地址https://www.aliyun.com/1111/2019/home

    版本:Spring3.0.6 准备工作: 下载 ehcache-spring-annotations-1.2.0 http://code.google.com/p/ehcache-spring-annotations/downloads/list

    下载完加压后里面的lib下的jar统统添加到classpath中 在资源文件夹下(通常是src/main/resources) 添加 ehcache.xml 内容如下 [html]

    view plain

    copy

    print ? <?xml version="1.0" encoding="UTF-8"?>

    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"

    updateCheck="false">

    <diskStore path="java.io.tmpdir" />

    <defaultCache eternal="false"

    maxElementsInMemory="1000"

    overflowToDisk="false"

    diskPersistent="false"

    timeToIdleSeconds="0"

    timeToLiveSeconds="600"

    memoryStoreEvictionPolicy="LFU" />

    <cache name="baseCache"

    eternal="false"

    maxElementsInMemory="500"

    overflowToDisk="false"

    diskPersistent="false"

    timeToIdleSeconds="0"

    timeToLiveSeconds="300"

    memoryStoreEvictionPolicy="LFU" />

    </ehcache>

    这里是定义缓存策略 eternal="false"

    // 元素是否永恒,如果是就永不过期(必须设置)

    maxElementsInMemory="1000" // 缓存容量的内存最大值(必须设置)

    overflowToDisk="false"

    // 当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘(必须设置)

    diskPersistent="false"

    // 磁盘缓存在VM重新启动时是否保持(默认为false)

    timeToIdleSeconds="0" // 导致元素过期的访问间隔(秒为单位). 0表示可以永远空闲,默认为0

    timeToLiveSeconds="600" // 元素在缓存里存在的时间(秒为单位). 0 表示永远存在不过期

    memoryStoreEvictionPolicy="LFU" // 当达到maxElementsInMemory时,如何强制进行驱逐默认使用"最近使用(LRU)"策略,其它还有先入先出FIFO,最少使用LFU,较少使用LRU

    然后在添加 cache-config.xml 内容如下: [html]

    view plain

    copy

    print ? <beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:ehcache="http://ehcache-spr

    ing-annotations.googlecode.com/svn/schema/ehcache-spring"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

    http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring

    http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">

    <ehcache:annotation-driven />

    <ehcache:config cache-manager="cacheManager">

    <ehcache:evict-expired-elements

    interval="60" />

    </ehcache:config>

    <bean id="cacheManager"

    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

    <property name="configLocation" value="classpath:ehcache.xml" />

    </bean>

    </beans>

    然后在DAO层做如下配置: [java]

    view plain

    copy

    print ?

    @TriggersRemove(cacheName="baseCache",removeAll=true)

    public Entity save(Entity entity) throws CrudException {

    return entity;

    }

    @TriggersRemove(cacheName="baseCache",removeAll=true)

    public Entity update(Entity entity) throws CrudException {

    return entity;

    }

    @TriggersRemove(cacheName="baseCache",removeAll=true)

    public void del(Entity entity) throws CrudException {

    }

    @Cacheable(cacheName="baseCache")

    @SuppressWarnings("unchecked")

    public List<Entity> findAll() throws SearchException {

    return list;

    }

    @Cacheable(cacheName="baseCache") 这个注解就是做到缓存数据,cacheName对应ehcache.xml 中配置

    @TriggersRemove(cacheName="baseCache",removeAll=true) 这个注解的作用就是当数据发生变化的时候清除缓存,做到数据同步

    如何知道有没生效: 新建一个单元测试,在类中添加两个搜索的方法,然后执行这个单元测试,然后查看两个方法执行的时间(Eclipse的单元测试可以查看) 如果第二个搜索方法的运行时间为0那就说吗成功了,如图

    参考: http://www.blogjava.net/zzzlyr/articles/343234.html http://blog.goyello.com/2010/07/29/quick-start-with-ehcache-annotations-for-spring/

    (英文的,推荐) RE : http://blog.csdn.net/thc1987/article/details/7345816

    原文

  • 相关阅读:
    mybatis xml中是sql语句报错: Error creating document instance. Cause: org.xml.sax.SAXParseException: The
    先排序,后取前xx条数据
    SQL判断字段是否为空,为NULL,且连续两个字段降序排列(oracle)
    double数据保留两位
    ajax在echart代码中的正确使用
    List集合去重排序
    如何把项目中的lib下的jar包,本机上的jar包导入项目中引用
    MongoVue如何执行JS文件
    三维叠加标签代码
    beatfullsoup
  • 原文地址:https://www.cnblogs.com/isme-zjh/p/11949798.html
Copyright © 2011-2022 走看看