SpringCache #yyds干货盘点#

Posted 梁云亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCache #yyds干货盘点#相关的知识,希望对你有一定的参考价值。

概述

SpringCache本身是一个缓存体系的抽象实现,但它本身并没有具体的缓存能力,要使用SpringCache还需要配合具体的缓存实现来完成。

虽然如此,但是SpringCache是所有Spring支持的缓存结构的基础,而且所有的缓存的使用最后都要归结于SpringCache。

缓存注解

SpringCache缓存功能的实现是依靠下面的这几个注解完成的:

  • @EnableCaching:开启缓存功能
  • @Cacheable:定义缓存,用于触发缓存
  • @CachePut:定义更新缓存,触发缓存更新
  • @CacheEvict:定义清除缓存,触发缓存清除
  • @Caching:组合定义多种缓存功能
  • @CacheConfig:定义公共设置,位于class之上

@Cacheable:实现自动缓存

参数 作用
value 缓存的名称
cacheNames 数组,通过数组的方式可以指定多个缓存
key 缓存的 key, 用来指定对应的缓存,默认使用方法参数值作为key的值。也可以使用SpEL表达式的值来指定
condition 缓存的条件,可以通过SpEL表达式进行设置
keyGenerator 用来自定义key的生成策略
cacheManager 指定缓存管理器
unless(除非) 当这个条件为true的时候,方法的返回值就不会被缓存
sync 是否异步,当其值为true的时候,unless属性不能使用
  • key所支持的SpEL表达式:

  • keyGenerator:key的生成器
    绝大多数情况下建议使用keyGenerator,编译过程中可能会解析不到参数名,导致缓存时key拼接错误。
    @Component
    public class RedisDeptConfig 
    /**
     * 缓存键自动生成器
     *
     * @return
     */
    @Bean(name = "deptKeyGen")
    public KeyGenerator keyGenerator()  //设置自定义keyClassName + methodName + params
        return (target, method, params) -> 
            String funName = method.getName();
            StringBuilder sb = new StringBuilder();
            sb.append(target.getClass().getName());
            sb.append(".");
            sb.append(funName);
            sb.append("(");
            for (int i = 0; i < params.length; i++) 
                sb.append(params[i].toString());
                if (i != (params.length - 1)) 
                    sb.append(",");
                
            
            sb.append(")");
            return sb.toString();
        ;
    
    

    在使用的时候,可以通过一下的方式进行配置

@Cacheable(keyGenerator = "deptKeyGen")
public Dept findDeptByDeptno(Integer deptno) 
    return baseMapper.selectById(deptno);

以上是关于SpringCache #yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#linux命令--uname

#yyds干货盘点#linux命令--hdparm

#yyds干货盘点#C++ static

#yyds干货盘点# 数字序列

#yyds干货盘点#异或操作

#yyds干货盘点#二分查找算法