美文网首页
Spring Cache 简介

Spring Cache 简介

作者: 虾米咬小米 | 来源:发表于2020-08-23 10:26 被阅读0次

    在 Spring 3.1 中引入了多 Cache 的支持,在 spring-context 包中定义了org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 两个接口来统一不同的缓存技术。Cache 接口包含缓存的常用操作:增加、删除、读取等。CacheManager 是 Spring 各种缓存的抽象接口。
    Spring 支持的常用 CacheManager 如下:

    CacheManager 描述
    SimpleCacheManager 使用简单的 Collection 来存储缓存
    ConcurrentMapCacheManager 使用 java.util.ConcurrentHashMap 来实现缓存
    NoOpCacheManager 仅测试用,不会实际存储缓存
    EhCacheCacheManger 使用EhCache作为缓存技术。EhCache 是一个纯 Java 的进程内缓存框架,特点快速、精干,是 Hibernate 中默认的 CacheProvider,也是 Java 领域应用最为广泛的缓存
    JCacheCacheManager 支持JCache(JSR-107)标准的实现作为缓存技术
    CaffeineCacheManager 使用 Caffeine 作为缓存技术。用于取代 Guava 缓存技术。
    RedisCacheManager 使用Redis作为缓存技术
    HazelcastCacheManager 使用Hazelcast作为缓存技术
    CompositeCacheManager 用于组合 CacheManager,可以从多个 CacheManager 中轮询得到相应的缓存

    Spring Cache 提供了 @Cacheable 、@CachePut 、@CacheEvict 、@Caching 等注解,在方法上使用。通过注解 Cache 可以实现类似事务一样、缓存逻辑透明的应用到我们的业务代码上,且只需要更少的代码。
    核心思想:当我们调用一个方法时会把该方法的参数和返回结果最为一个键值对存放在缓存中,等下次利用同样的参数来调用该方法时将不会再执行,而是直接从缓存中获取结果进行返回。
    Cache注解

    1.@EnableCaching

    开启缓存功能,一般放在启动类上。

    2.@CacheConfig

    当我们需要缓存的地方越来越多,你可以使用@CacheConfig(cacheNames = {"cacheName"})注解在 class 之上来统一指定value的值,这时可省略value,如果你在你的方法依旧写上了value,那么依然以方法的value值为准。

    3.@Cacheable

    根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。一般用在查询方法上。
    查看源码,属性值如下:

    属性/方法名 解释
    value 缓存名,必填,它指定了你的缓存存放在哪块命名空间
    cacheNames 与 value 差不多,二选一即可
    key 可选属性,可以使用 SpEL 标签自定义缓存的key
    keyGenerator key的生成器。key/keyGenerator二选一使用
    cacheManager 指定缓存管理器
    cacheResolver 指定获取解析器
    condition 条件符合则缓存
    unless 条件符合则不缓存
    sync 是否使用异步模式,默认为false

    4.@CachePut

    使用该注解标志的方法,每次都会执行,并将结果存入指定的缓存中。其他方法可以直接从响应的缓存中读取缓存数据,而不需要再去查询数据库。一般用在新增方法上。 查看源码,属性值如下:

    属性/方法名 解释
    value 缓存名,必填,它指定了你的缓存存放在哪块命名空间
    cacheNames 与 value 差不多,二选一即可
    key 可选属性,可以使用 SpEL 标签自定义缓存的key
    keyGenerator key的生成器。key/keyGenerator二选一使用
    cacheManager 指定缓存管理器
    cacheResolver 指定获取解析器
    condition 条件符合则缓存
    unless 条件符合则不缓存

    5.@CacheEvict

    使用该注解标志的方法,会清空指定的缓存。一般用在更新或者删除方法上 查看源码,属性值如下:

    属性/方法名 解释
    value 缓存名,必填,它指定了你的缓存存放在哪块命名空间
    cacheNames 与 value 差不多,二选一即可
    key 可选属性,可以使用 SpEL 标签自定义缓存的key
    keyGenerator key的生成器。key/keyGenerator二选一使用
    cacheManager 指定缓存管理器
    cacheResolver 指定获取解析器
    condition 条件符合则缓存
    allEntries 是否清空所有缓存,默认为 false。如果指定为 true,则方法调用后将立即清空所有的缓存
    beforeInvocation 是否在方法执行前就清空,默认为 false。如果指定为 true,则在方法执行前就会清空缓存

    6.@Caching

    该注解可以实现同一个方法上同时使用多种注解。可从其源码看出:

    public @interface Caching {
    
        Cacheable[] cacheable() default {};
    
        CachePut[] put() default {};
    
        CacheEvict[] evict() default {};
    
    }
    

    参考:
    Spring Cache 简介

    相关文章

      网友评论

          本文标题:Spring Cache 简介

          本文链接:https://www.haomeiwen.com/subject/wzgujktx.html