Spring4 缓存

一 缓存命中率

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

二 过期策略

  • FIFO(First In First Out) 先进先出策略,即先放入缓存的数据先被移除
  • LRU (Least Recently Used)最久未使用策略,即使用时间距离现在最久的那个被移除
  • LFU(Least Frequently Used)最近最少使用策略,即一定时间段内使用次数最少的那个被移除
  • TTL (Time To Live) 存活期 ,即从缓存中创建时间点开始直至到期的一个时间段
  • TTI (Time To Idle)空闲期 即一个数据多久没被访问就从缓存中移除

三 Spring4 缓存注解

使用Spring 缓存注解时一定要通过: 开启基于注解的缓存驱动

@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);
    }

你可能感兴趣的:(Spring4 缓存)