Spring4 缓存

2017-09-03  本文已影响82人  zlb

一 缓存命中率

命中率 = 从缓存中读取的次数 / (总读取次数[从缓存中读取的次数 + 从慢速设备上读取的次数])
Miss率 = 没有从缓存中读取的次数 / (总读取次数[从缓存中读取的次数 + 从慢速设备上读取的次数])

二 过期策略

三 Spring4 缓存注解

使用Spring 缓存注解时一定要通过:<cache:annotation-driven/> 开启基于注解的缓存驱动

@Cacheable

参数 说明 示例
value/cacheNames 缓存的名称,必须指定最少一个 @Cacheable(cacheNames="user")
key 缓存的Key 可以为空,如果指定则按Spel 表达式编写。如果不指定,则默认按照方法的所有参数进行组合 @Cacheable(cacheNames="user",key="#id")
condition 缓存的条件,可以为空,使用Spel表达式编写,返回True或者False 只有返回True才进行缓存 @Cacheable(cacheNames="user",condition="#userName.length() > 2")

@CachePut

参数 说明 示例
value/cacheNames 缓存的名称,必须指定最少一个 @CachePut(cacheNames="user")
key 缓存的Key 可以为空,如果指定则按Spel 表达式编写。如果不指定,则默认按照方法的所有参数进行组合 @CachePut(cacheNames="user",key="#id")
condition 缓存的条件,可以为空,使用Spel表达式编写,返回True或者False 只有返回True才进行缓存 @CachePut(cacheNames="user",condition="#userName.length() > 2")

@CacheEvict
@CacheEvict 注解是@Cacheable 的反向操作 负责从给定的缓存中移除值

参数 说明 示例
value/cacheNames 缓存的名称,必须指定最少一个 @CacheEvict (cacheNames="user")
key 缓存的Key 可以为空,如果指定则按Spel 表达式编写。如果不指定,则默认按照方法的所有参数进行组合 @CacheEvict(cacheNames="user",key="#id")
condition 缓存的条件,可以为空,使用Spel表达式编写,返回True或者False 只有返回True 才会清空缓存。unless属性与condition属性相反,满足条件不进进行缓存 @CachePut(cacheNames="user",condition="#userName.length() > 2")
allEntries 是否清空所有的缓存内容,默认为false 如果指定为True 则方法调用后会立即清除所有缓存 @CacheEvict(cacheNames="user",allEntries=true)
beforeInvocation 是否在执行方法前就清空,默认为false 如果指定为true 则在方法没有执行的时候就清空缓存。在默认情况下,如果方法执行抛出异常,则不会清除缓存 @CacheEvict(cacheNames="user",beforeInvocation=true)

@CacheConfig
类级别的全局缓存注解

例如:@CacheConfig(cacheNames="users",keyGenerator="myKeyGenerator")

四 自定义缓存注解

Spring 提供了自定注解 可以把这些注解组合到一个注解中

@Caching(
        put = {
            @CachePut(cacheNames="users",key="#user.id"),   
            @CachePut(cacheNames="users",key="#user.userName"), 
            @CachePut(cacheNames="users",key="#user.email") 
        }
)
public @interface UserServiceCache {

}
@UserServiceCache
    public SysUser getSysUserById(String id) {
        return sysUserDao.getSysUserById(id);
    }
上一篇 下一篇

猜你喜欢

热点阅读