基于spring 方法级缓存的多种实现
方案实施
1、spring和ehcache集成
主要获取ehcache作为操作ehcache的对象。
spring.xml中注入ehcacheManager和ehCache对象,ehcacheManager是需要加载ehcache.xml配置信息,创建ehcache.xml中配置不同策略的cache。
2、spring和自带的缓存支持
3.spring和redis集成
主要获取redisTemplate作为操作redis的对象。
redis.properties配置信息
#host写入redis服务器地址
redis.ip=127.0.0.1
#Port
redis.port=6379
#Passord
#redis.password=123456
#连接超时30000
redis.timeout=30
#最大分配的对象数
redis.pool.maxActive=100
#最大能够保持idel状态的对象数
redis.pool.maxIdle=30
#当池内没有返回对象时,最大等待时间
redis.pool.maxWait=1000
#当调用borrowObject方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用returnObject方法时,是否进行有效性检查
redis.pool.testOnReturn=true
spring注入jedisPool、redisConnFactory、redisTemplate对象
4.spring缓存注解解释
缓存注解有以下三个:
@Cacheable@CacheEvict@CachePut
1.
@Cacheable(value=”accountCache”),这个注释的意思是,当调用这个方法的时候,会从一个名叫accountCache的缓存中查询,如果没有,则执行实际的方法,并将执行的结果存入缓存中,否则返回缓存中的对象。这里的缓存中的key就是参数userName,value就是Account对象。“accountCache”缓存是在spring*.xml中定义的名称。
例子:
@Cacheable(value="accountCache")//使用了一个缓存名叫accountCache
publicAccountgetAccountByName(StringuserName){
//方法内部实现不考虑缓存逻辑,直接实现业务
System.out.println("realqueryaccount."+userName);
returngetFromDB(userName);
}
condition:用来条件判断,满足条件的则进行缓存
例子2:
@Cacheable(value="accountCache",condition="#userName.length()<=4")//缓存名叫accountCache
publicAccountgetAccountByName(StringuserName){
//方法内部实现不考虑缓存逻辑,直接实现业务
returngetFromDB(userName);
}
2.
@CacheEvict注释来标记要清空缓存的方法,当这个方法被调用后,即会清空缓存。注意其中一个@CacheEvict(value=”accountCache”,key=”#account.getName()”),其中的Key是用来指定缓存的key的,这里因为我们保存的时候用的是account对象的name字段,所以这里还需要从参数account对象中获取name的值来作为key,前面的#号代表这是一个SpEL表达式,此表达式可以遍历方法的参数对象
例子3:
@CacheEvict(value="accountCache",key="#account.getName()")//清空accountCache缓存
publicvoidupdateAccount(Accountaccount){
updateDB(account);
}
@CacheEvict(value="accountCache",allEntries=true)//清空accountCache缓存
publicvoidreload(){
reloadAll()
}
@Cacheable(value="accountCache",condition="#userName.length()<=4")//缓存名叫accountCache
publicAccountgetAccountByName(StringuserName){
//方法内部实现不考虑缓存逻辑,直接实现业务
returngetFromDB(userName);
}
3.
@CachePut注释,这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中,实现缓存与数据库的同步更新。
@CachePut(value="accountCache",key="#account.getName()")//更新accountCache缓存
publicAccountupdateAccount(Accountaccount){
returnupdateDB(account);
}
附录:
@Cacheable、@CachePut、@CacheEvict注释介绍
通过上面的例子,我们可以看到springcache主要使用两个注释标签,即@Cacheable、@CachePut和@CacheEvict,我们总结一下其作用和配置方法。
表1.@Cacheable作用和配置方法
@Cacheable的作用主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
表2.@CachePut作用和配置方法
@CachePut的作用主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,和@Cacheable不同的是,它每次都会触发真实方法的调用
表3.@CacheEvict作用和配置方法
@CachEvict的作用主要针对方法配置,能够根据一定的条件对缓存进行清空
以上这篇基于spring方法级缓存的多种实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。