当前位置:   article > 正文

springboot 使用spring cache缓存 和 缓存数据落地到redis_springboot3.0 cache 如何缓存到redis 中

springboot3.0 cache 如何缓存到redis 中

springboot 使用spring cache缓存 和 缓存数据落地到redis

springboot工程已经和方便的支持缓存cache的使用了,几个注解就可以搞定。注意,这些缓存注解是基于spring容器环境的。

本文主要实现了:使用spring的 cache缓存功能,和将缓存数据落地到redis中

注解说明

// 放启动类上,开启缓存
@EnableCaching
// 放需要缓存的类上,统一设置缓存参数,简化配置@CachePut @Cacheable @CacheEvict
@CacheConfig:抽取类中的所有的公共配置

    
// 查询增加缓存 
@Cacheable:作用于查询方法上,查询接口继续缓存。

// 删除缓存
@CacheEvict:清除缓存,适用于删除方法上。

// 修改缓存
@CachePut:调用方法,又更新缓存数据,适合用于修改方法上,修改数据内容后缓存。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

配置依赖

pom.xml文件配置maven依赖

<!-- spring boot 缓存 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

配置启动

启动类上加 @EnableCaching启用缓存

/**
 * @EnableCaching 开启springboot缓存
 */
@EnableCaching
@SpringBootApplication
public class SpaceAdminSystemApplication {

   public static void main(String[] args) {
      SpringApplication.run(SpaceAdminSystemApplication.class, args);
   }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

实例验证

package space.godchen.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * cache 演示
 * 一些缓存注解的属性说明
 * cacheNames/value:用来指定缓存组件的名字
 * key:缓存数据的key,同map的key。默认使用方法参数的值。
 * keyCenerator:key的生成器,key和keyGenerator二选一使用 不可同时使用,一般在key=“”里直接自己指定key就可以了。
 * condition:   符合指定的条件后才进行缓存操作
 * unless:  符合指定的条件后不缓存,不符合时缓存。同condition相反,也可以通过返回接口进行判断。使用#result 获取方法返回结果。
 * sync:是否使用异步模式。默认是方法执行完,以同步的方式将方法返回的结果存到缓存中。
 *
 * @author chenzhao
 * @create 2022-08-24 15:57
 * 类上设置后,相当于每个方法设置cacheNames
 * @CacheConfig(cacheNames = "test_cache")
 */
@Slf4j
@RestController
@RequestMapping("/cache")
public class TestSpringCacheController {

    /**
     * 查询,增加缓存
     *
     * @param id
     * @return
     */
    @GetMapping("/getValueById/{id}")
    @Cacheable(cacheNames = "test_cache", key = "#id")
    public String getValueById(@PathVariable Integer id) {
        String defaultValue = "默认的Value";
        log.info("默认的Value:{}", defaultValue);
        return defaultValue;
    }

    /**
     * 修改,更新缓存
     *
     * @param id
     * @param newValue
     * @return
     */
    @GetMapping("/putValueById/{id}/{newValue}")
    @CachePut(cacheNames = "test_cache", key = "#id")
    public String putValueById(@PathVariable Integer id, @PathVariable String newValue) {
        log.info("ID:{},对应的Value值,更新为:{}", id, newValue);
        return newValue;
    }

    /**
     * 删除, 清除缓存
     *
     * @param id
     * @return
     */
    @GetMapping("/evictValueById/{id}")
    @CacheEvict(cacheNames = "test_cache", key = "#id")
    public String evictValueById(@PathVariable Integer id) {
        log.info("删除ID:{}的缓存", id);
        return "" + id;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

springboot项目,使用spring cache 完成了。
下一步就是将缓存的数据,落地保存到redis中:

配置redis缓存

使用redis存放缓存数据

添加依赖

<!-- Spring boot Redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

启动本机redis,localhost:6379,

由于导入的maven依赖中,有redis的默认配置类,无需自己单独配置。

程序直接使用本机redis了。(此处redis未做详细配置,只要redis能用即可)

//spring-boot-starter-data-redis 包下的默认配置
package org.springframework.boot.autoconfigure.data.redis;

import java.time.Duration;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(
    prefix = "spring.redis"
)
public class RedisProperties {
    private int database = 0;
    private String url;
    private String host = "localhost";
    private String username;
    private String password;
    private int port = 6379;
    private boolean ssl;
    private Duration timeout;
    private Duration connectTimeout;
    private String clientName;
    private RedisProperties.ClientType clientType;
    private RedisProperties.Sentinel sentinel;
    private RedisProperties.Cluster cluster;
    private final RedisProperties.Jedis jedis = new RedisProperties.Jedis();
    private final RedisProperties.Lettuce lettuce = new RedisProperties.Lettuce();
    ...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

哇塞,完成了,springboot对接redis缓存完成了。

此时,可以看到redis中的,key-value。 因为redis没有做系列化配置,此处value显示了乱码,忽略。 在这里插入图片描述

调用刚写的几个接口测试,就会发现缓存正常。

到这里,使用spring的 cache缓存功能,和将缓存数据落地到redis中,完成了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/744993
推荐阅读
相关标签
  

闽ICP备14008679号