spring-annotations+ehcache 分布式缓存


准备:啥也不需要准备,只需要准备一下ehcache.xml文件就可以了。

网上的一些教程,做spring+ehcache的注解缓存需要下载什么spring-annotations.jar  
那些都是老掉牙的教程,不符合时代发展,其实spring3.0之后就不需要这玩意了,他自带了! 

Ehcache自带了分布式缓存机制,有RMI,JGRUOPS, 貌似还有一种方式,不过,,,我忘了,
我使用的是RMI方式,手动配置
贴上我的ehcache.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
         xsi:noNamespaceSchemaLocation=" http://ehcache.org/ehcache.xsd ">
    <!-- accountservice 缓存配置 -->
    <!--EHCache分布式缓存集群环境配置-->
    <!--rmi手动配置-->
    <!--peer discover 成员发现者,除本服务器其他的服务器-->
    <cacheManagerPeerProviderFactory class= "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
                                     properties="peerDiscovery=manual,rmiUrls=//192.168.0.131:40001/user"/>
<!-- listen监听,监听从成员发现者那里的更新缓存的请求。注意:port可以是任意值,不过需要该端口不可以被占用,不可以和tomcat你修改的端口一样,不然监听起不来的   , 本机的IP -->
    <cacheManagerPeerListenerFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
            properties="hostName=192.168.0.225,port=40003, socketTimeoutMillis=120000"/>
<!--默认缓存配置-->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            diskSpoolBufferSizeMB="30"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <cacheEventListenerFactory
                class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
    </defaultCache>
<!--我们自己定义的缓存,名称为自定义-->
    <cache name="user"
           maxElementsInMemory="1000"
           eternal="false"
           timeToIdleSeconds="100000"
           timeToLiveSeconds="100000"
           overflowToDisk="false">
        <cacheEventListenerFactory
                class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
    </cache>
</ehcache>

以上是一个服务器的配置,每个服务器的配置都不相同,不过走的是一个套路
RMI使用了广播的方式,
按我的理解来说,他的工作方式是,有一个成员发现者,,,

成员发现一个心跳(CUD),就向监听发送信息,监听收到信息,就调用该Cache的监听事件(cacheEventListenerFactory)
进行更新缓存

spring的配置

<cache:annotation-driven cache-manager="cacheManager" />
    <!-- ehcache配置-->
    <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"  
  
     p:configLocation="classpath:ehcache.xml"  
  
     p:shared="false" />  
  
  
    <!-- 声明cacheManager -->  
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"  
       p:cacheManager-ref="cacheManagerFactory"/>  

应用:
@Cacheable(value="user",key="'user'")
List<Account> getAccountList();

value 的值为ehcache我们定义的缓存名称,key为键,ehcache的缓存是以键值对的方式来进行存储的
key定义字符串的话,注意需要加入单引号

key中可以写contion表达式,一般使用方法的参数,
例: 
@Cacheable(value="user",key="#userName")
List<Account> getAccountList(Account account); 
使用#号来引出参数的属性

简单应用就是如此,当然,这种分布式缓存达到的效果也是相对的,更高性能的有Redis和memecached,这种缓存服务器,效果会更加理想
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值