Spring Cache

文章目录

在高并发环境下,频繁的数据库查询可能会导致性能瓶颈。使用 Redis 缓存数据可以显著减少数据库的查询次数,提高应用的响应速度和稳定性。

首先演示一下手动缓存(较为繁琐)

java 复制代码
/**
 * 根据分类id查询菜品
 *
 * @param categoryId
 * @return
 */
@GetMapping("/list")
@ApiOperation("根据分类id查询菜品")
public Result<List<DishVO>> list(Long categoryId) {

    // 构造redis中的key,规则:dish_分类id
    String key = "dish_" + categoryId;

    // 查询redis中是否存在菜品数据
    List<DishVO> list = (List<DishVO>) redisTemplate.opsForValue().get(key);
    if (list != null && list.size() > 0) {
        // 如果存在,直接返回,无需查询数据库
        return Result.success(list);
    }

    Dish dish = new Dish();
    dish.setCategoryId(categoryId);
    dish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品

    // 如果不存在,查询数据库,将查询到的数据放入redis中
    list = dishService.listWithFlavor(dish);
    redisTemplate.opsForValue().set(key, list);

    return Result.success(list);
}

使用Spring Cache实现缓存数据

介绍

Spring Cache 是一个框架,实现了基于注解 的缓存功能,只需简单地加一个注解,就能实现缓存功能。

常用的是Redis缓存 ,spring Cache 底层通过Redis实现缓存数据。

步骤
引入依赖

首先引入依赖(需要引入cache、redis、MySQL依赖), 在 pom.xml 文件中添加以下依赖:

cache依赖:

java 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-cache</artifactId>  		            		       	 <version>2.7.3</version> 
</dependency>

redis依赖:

java 复制代码
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

mysql依赖:

java 复制代码
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
开启缓存支持

在启动类上添加 @EnableCaching 注解以启用缓存功能:

java 复制代码
@SpringBootApplication
@EnableCaching
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
配置缓存

在 application.properties 或 application.yml 中配置 Redis 缓存:

java 复制代码
# Redis 配置
spring.cache.type=redis
spring.redis.host=localhost
spring.redis.port=6379
使用缓存注解

通过在方法上使用 @Cacheable, @CachePut, 和 @CacheEvict 注解来进行缓存操作:

  • @Cacheable:缓存方法的结果
  • @CachePut:更新缓存中的数据
  • @CacheEvict:从缓存中移除数据

在spring boot 项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用@EnableCaching开启缓存支持即可。

小结

  • 手动缓存: 使用 RedisTemplate 进行缓存操作,适用于灵活控制缓存的场景。
  • 自动缓存: 使用 Spring Cache注解简化缓存配置,适用于标准缓存需求。
相关推荐
计算机就业还在扩大16 分钟前
第2期-cmp.Ordered+类型推断+刻意未支持的特性
后端·面试·golang
指剑29 分钟前
亚麻云之EC2——安全组与密钥对:SSH 端口怎么开才安全,Permission denied (publickey) 和连接超时排查
java·安全·ssh
_Evan_Yao8 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
梓豪csd9 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼9 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
王中阳Go9 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
thefool11226610 小时前
TCP 1
java·1024程序员节
码事漫谈10 小时前
消除AI幻觉,普通人能做的五件事
后端
金銀銅鐵12 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
AI人工智能+电脑小能手12 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务