当前位置: 首页 > article >正文

Spring Cache 的说明及常用注解

一.介绍

     Spring Cache是Spring Framework中的一个模块,用于简化和统一缓存的使用。它提供了一种将缓存逻辑与应用程序业务逻辑分离的方式,使得我们可以更方便地使用缓存来提高应用程序的性能。

二.主要特性

  1. 注解支持:Spring Cache提供了一组注解(如@Cacheable@CachePut@CacheEvict),使得开发者可以通过简单的注解来定义缓存逻辑,而无需编写复杂的缓存管理代码。
  2. 多种缓存提供者支持:Spring Cache支持多种缓存实现,包括但不限于Ehcache、Caffeine、Redis、Hazelcast等。开发者可以根据需求选择合适的缓存提供者。
  3. 抽象层:Spring Cache提供了一个统一的抽象层,使得不同的缓存源可以在相同的API下工作,降低了锁定于某一特定缓存实现的风险。
  4. 灵活的配置:通过XML或Java配置,Spring Cache允许灵活地配置缓存属性,如过期时间、缓存名称等。

三.常用注解

1.@EnableCaching

  • 说明:启用缓存注解功能,通常加在启动类上。
  • 用途:使得 Spring 能够解析缓存注解并执行相关的缓存操作。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@EnableCaching  // 启用缓存
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2.@Cacheable(常用于查询操作)

  • 说明:在方法上标记该方法的返回值可以缓存。
  • 用途:在方法执行前先查询缓存是否有数据。如果有,则直接返回缓存数据;如果没有,则执行方法并将返回值放入缓存中。
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Cacheable("users")  // 指定缓存的名称
    public User getUserById(Long id) {
        // 假设从数据库查询用户
        return userRepository.findById(id);
    }
}

3.@CachePut(常用于更新操作)

  • 说明:更新缓存,直接将方法的返回值放入缓存中。
  • 用途:无论是否命中缓存,都会执行该方法,并将结果放入缓存中。
import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @CachePut(value = "users", key = "#user.id")  // 通过用户ID作为缓存键
    public User updateUser(User user) {
        // 假设更新用户信息到数据库
        return userRepository.save(user);
    }
}

4.@CacheEvict

  • 说明:从缓存中移除一条或多条数据。
  • 用途:可以在更新或删除数据后,清理相关缓存以保持数据一致性。
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @CacheEvict(value = "users", key = "#id")  // 根据用户ID移除缓存
    public void deleteUser(Long id) {
        // 假设删除数据库中的用户
        userRepository.deleteById(id);
    }
}
通过这些注解的组合使用,能够有效提高系统的性能和响应速度,特别是在频繁读取数据的场景下。

http://www.kler.cn/news/340398.html

相关文章:

  • 《C++跨平台开发:突破界限,释放无限可能》
  • leetcode 刷题day35动态规划Part04 背包问题(1049. 最后一块石头的重量 II 、494. 目标和、474.一和零)
  • 猫玖破密啦
  • 人工智能之机器学习
  • 多模态简单了解
  • Vue的基本用法及模板语法
  • 如何在Android Studio中找到CMakeLists.txt的打印信息
  • 【题目解析】蓝桥杯23国赛C++中高级组 - 斗鱼养殖场
  • 【在Linux世界中追寻伟大的One Piece】DNS与ICMP
  • Study-Oracle-11-ORALCE19C-ADG集群搭建
  • docker简述
  • 讯飞星火编排创建智能体学习(五):变量和文本拼接
  • 209.长度最小的子数组
  • Python 的测试
  • 【大数据应用开发】2023年全国职业院校技能大赛赛题第05套
  • LSTM 长短期记忆网络:解锁时间序列数据的深层秘密
  • 省市区json记录
  • 五十、架构设计经验与技巧(架构设计基本原则)
  • 目标检测指标:AP,mAP
  • 【C语言进阶教程】数据结构与算法(1.简介 2.数据结构基础 3.链表)