• Redis快速上手篇(四)(Spring Cache,缓存配置)(注解方式)


    Spring Cache

    从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的

    使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。

    使用Spring Cache需要我们做两方面的事:

    1. 声明某些方法使用缓存

    2. 配置Spring对Cache的支持

    和Spring对事务管理的支持一样,Spring对Cache的支持也有基于注解和基于XML配置两种方式。

    @EnableCaching        开启注解缓存

    @Cacheable

     可以标记在一个方法上,也可以标记在一个类上。

    当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。

    @Cacheable可以指定三个属性,value、key和condition。

    参数

    解释

    example

    value

    缓存的名称,在 spring 配置文件中定义,必须指定至少一个

    例如:

    @Cacheable(value=”mycache”)

    @Cacheable(value={”cache1”,”cache2”}

    key

    缓存的 key,可以为空,如果指定要按照 Spring的·EL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合

    @Cacheable(value=”testcache”,key=”#userName”)

    condition

    缓存的条件,可以为空,使用 Spring的EL 编写,返回 true 或者 false,只有为 true 才进行缓存

    @Cacheable(value=”testcache”,condition=”#userName.length()>2”)

    @CachePut

    @Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。

    @CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。

    @CacheEvict

    @CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。

    @CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation。其中value、key和condition的语义与@Cacheable对应的属性类似。即value表示清除操作是发生在哪些Cache上的(对应Cache的名称);key表示需要清除的是哪个key,如未指定则会使用默认策略生成的key;condition表示清除操作发生的条件

     allEntries属性

    allEntries是boolean类型,表示是否需要清除缓存中的所有元素。

    beforeInvocation属性

    清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。使用beforeInvocation可以改变触发清除操作的时间,当我们指定该属性值为true时,Spring会在调用该方法之前清除缓存中的指定元素。

    项目结构(spring boot+mybatis plus)

    依赖加载

    1. org.springframework.boot
    2. spring-boot-starter-web
    3. org.projectlombok
    4. lombok
    5. true
    6. org.springframework.boot
    7. spring-boot-starter-test
    8. test
    9. org.springframework.boot
    10. spring-boot-starter-data-redis
    11. org.apache.commons
    12. commons-pool2
    13. 2.11.1
    14. redis.clients
    15. jedis
    16. com.mysql
    17. mysql-connector-j
    18. com.baomidou
    19. mybatis-plus-boot-starter
    20. 3.5.3
    21. com.baomidou
    22. mybatis-plus-generator
    23. 3.5.3
    24. org.apache.velocity
    25. velocity-engine-core
    26. 2.3
    27. org.freemarker
    28. freemarker
    29. org.springframework.boot
    30. spring-boot-maven-plugin
    31. org.projectlombok
    32. lombok

    spring boot配置文件(.yml)

    1. spring:
    2. redis:
    3. host: 192.168.253.16
    4. database: 0
    5. password: root
    6. port: 6379
    7. lettuce:
    8. pool:
    9. max-active: 20
    10. max-wait: -1
    11. max-idle: 5
    12. min-idle: 0
    13. timeout: 1800000
    14. datasource:
    15. driver-class-name: com.mysql.cj.jdbc.Driver
    16. url: jdbc:mysql:///prac?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    17. username: root
    18. password: root
    19. jackson:
    20. date-format: yyyy-MM-dd HH:mm:ss
    21. time-zone: GMT+8
    22. serialization:
    23. write-date-keys-as-timestamps: false
    24. mybatis-plus:
    25. configuration:
    26. map-underscore-to-camel-case: true
    27. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    28. mapper-locations: classpath:/mapper/*.xml
    29. #逻辑删除 删除之前的值是0 之后是1
    30. global-config:
    31. db-config:
    32. logic-not-delete-value: 1
    33. logic-delete-value: 0
    34. type-aliases-package: com.tes.entity

    service

    redis缓存数据

  • 相关阅读:
    《软件方法(下)》第8章2023版连载(05)关于实体类
    机器学习——强化学习状态值函数V和动作值函数Q的个人思考
    1997-2020年31省进出口总额
    网络模块使用Hilt注入
    Java Hello World 程序
    数字孪生与元宇宙在关键技术方面的异同
    VSC-HVDC直流输电matlab仿真模型
    mybatis 或 mybatis-plus 执行 sql 的三种方式
    Java 线程创建与常用方法
    Linux和Windows系统有何区别
  • 原文地址:https://blog.csdn.net/Z15800020057/article/details/134035231