栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring cache

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring cache

使用spring cache 时,需开启缓存注解

使用缓存,还需要配置cacheManager

cacheManager有很多实现类,对应不同的缓存框架

spring cache 提供了几个注解,用于设置缓存

  1. @Cacheable
    该注解会将方法的返回值进行缓存,下次调用该方法,会取缓存中数据
    该注解可以放在类名上,也可以放在方法上

    value:指定CacheName,
    cacheNames:等同于value
    key:指定缓存key
    keyGenerator:指定缓存key生成策略
    cacheManager:指定缓存管理器
    cacheResolver:执行缓存解析器
    condition:指定缓存生效条件
    unless:指定缓存不生效条件
    sync:没有缓存,执行方法时,是否单线程执行

  2. @CacheEvict
    缓存删除

    value:指定CacheName,
    cacheNames:等同于value
    key:指定缓存key
    keyGenerator:指定缓存key生成策略
    cacheManager:指定缓存管理器
    cacheResolver:执行缓存解析器
    condition:指定缓存失效条件
    allEntries:是否移除cache中所有缓存
    beforeInvocation:是否方法执行前移除缓存

  3. @CachePut
    该注解只会缓存数据,调用方法时,不经过缓存

    value:指定CacheName,
    cacheNames:等同于value
    key:指定缓存key
    keyGenerator:指定缓存key生成策略
    cacheManager:指定缓存管理器
    cacheResolver:执行缓存解析器
    condition:指定缓存生效条件
    unless:指定缓存不生效条件

  4. @Caching
    复合注解,包含多个

  5. @CacheConfig
    配置缓存信息,配置在类上,对方法生效

缓存生效流程
  1. 注入bean

@EnableCaching注解引入了一个配置类CachingConfigurationSelector

启动时,会调用该类的selectImports方法,根据配置的代理模式进行选择

proxy模式中,会引入配置类ProxyCachingConfiguration、AutoProxyRegistrar

AutoProxyRegistrar会注入InfrastructureAdvisorAutoProxyCreator,实现了beanPostProcessor接口,
对bean拦截增强

ProxyCachingConfiguration会创建BeanFactoryCacheOperationSourceAdvisor、CacheOperationSource、CacheInterceptor
CacheInterceptor用于方法拦截,查找缓存信息

CacheOperationSource包含SpringCacheAnnotationParser类,用于扫描 @Cacheable, @CachePut @CacheEvict 注解的类、方法,默认只扫public方法

BeanFactoryCacheOperationSourceAdvisor是缓存通知,bean的后置处理时,会进行调用,判断bean中是否存在缓存注解,进行代理增强

2. 后置处理扫描注解

找到advisor,并进行筛选

匹配方法中的注解

先查找缓存里,是不是已经存在,不存在则进入computeCacheOperations

先查找方法上的注解,没找到则查找class上的注解,


匹配后,创建代理对象

3 . 方法调用
进入拦截器,调用方法

查找方法对应的CacheOperation,执行

beforeInvocation==true ,则处理CacheEvictOperation

查找缓存是否存在,如果缓存不存在,则收集需要缓存的request放入cachePutRequests

如果缓存存在,则调用缓存。
如果缓存不存在,则调用原方法处理,

如果有CachePutOperation注解,调用collectPutRequests,收集需要缓存的request放入cachePutRequests,

遍历cachePutRequests,进行缓存

如果有CacheEvictOperation注解,进行缓存删除

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004167.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号