spring cache的使用(Redis)

news2024/11/26 18:43:41

在这里插入图片描述
要在Spring Boot应用中使用Redis作为缓存,你需要遵循一些步骤来配置和使用Redis。以下是使用Spring Cache抽象与Redis进行整合的详细说明:

1. 添加依赖

首先,需要在pom.xml中添加Spring Boot的Redis starter依赖以及缓存的starter依赖。这会自动引入Spring Data Redis和相关的库。

<dependencies>
    <!-- Spring Boot Redis Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- Spring Boot Cache Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
</dependencies>

2. 配置Redis

接下来,需要在application.propertiesapplication.yml文件中配置Redis服务器的连接信息。

# Redis配置
spring.redis.host=localhost
spring.redis.port=6379
# 如果Redis设置了密码,还需要配置密码
# spring.redis.password=yourpassword

3. 启用缓存支持

在Spring Boot的主配置类上添加@EnableCaching注解以启用缓存支持。

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

4. 使用缓存注解

现在,你可以在服务层或其他组件中使用@Cacheable@CacheEvict@CachePut注解来操作缓存。

@Service
public class UserService {

    @Cacheable(value = "users", key = "#userId")
    public User getUserById(String userId) {
        // 从数据库或其他地方获取用户信息
        return new User(userId, "Example User");
    }

    @CachePut(value = "users", key = "#user.id")
    public User updateUser(User user) {
        // 更新用户信息逻辑
        return user;
    }

    @CacheEvict(value = "users", key = "#userId")
    public void deleteUser(String userId) {
        // 删除用户逻辑
    }
}

5. 配置缓存管理器(可选)

虽然Spring Boot为Redis提供了自动配置,但你可能需要自定义缓存管理器以调整其行为。你可以通过配置一个CacheManager Bean来实现这一点。

@Configuration
public class RedisConfig {

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofHours(1)) // 设置缓存有效期为1小时
            .disableCachingNullValues(); // 不缓存空值

        return RedisCacheManager.builder(connectionFactory)
                .cacheDefaults(config)
                .build();
    }
}

6. 运行和测试

一旦完成上述配置,你的Spring Boot应用就已经配置好了Redis缓存。当你调用使用了缓存注解的方法时,Spring会自动处理缓存的读取和更新,将数据存储在Redis中。

注意事项

  • 确保Redis服务器正在运行,并且连接信息配置正确。
  • 根据需要调整缓存的各种设置,例如缓存的有效期、序列化机制等。
  • 考虑到Redis是基于内存的存储系统,确保你的Redis实例有足够的内存来存储缓存数据。

通过以上步骤,你可以在Spring Boot应用中轻松地使用Redis进行高效的数据缓存和访问。
@Cacheable是Spring Cache提供的一个注解,用于声明某个方法的返回值是可以被缓存的。当标记了@Cacheable的方法被调用时,Spring Cache会首先检查缓存中是否存在已经缓存的数据。如果缓存中存在对应的数据,则直接返回缓存的数据,而不需要执行方法本身。如果缓存中没有对应的数据,那么会执行方法本身,然后将方法的返回值放入缓存中。

在给出的示例中:

@Cacheable(value = "users", key = "#userId")
public User getUserById(String userId) {
    // 从数据库或其他地方获取用户信息
    return new User(userId, "Example User");
}
  • @Cacheable(value = "users", key = "#userId"): 这里的@Cacheable注解表示getUserById方法的返回值是可缓存的。
    • value = "users": 指定缓存的名称为"users"。在配置缓存实现时,可以根据这个名称来设置不同缓存的不同参数,例如过期时间、最大容量等。在同一个应用中,不同的缓存名称对应不同的缓存区域。
    • key = "#userId": 指定缓存的key。这里使用的是Spring Expression Language (SpEL) 表达式#userId,它表示方法的参数userId的值将被用作缓存的key。这意味着,对于相同的userId参数值,方法只会在第一次被调用时执行并缓存结果;之后相同userId值的调用将直接返回缓存中的数据。

在实际执行时,如果你第一次调用getUserById("123"),方法会执行,查询数据库或其他数据源获取用户信息,并将结果(假设是new User("123", "Example User"))缓存到名为"users"的缓存中,其中key为"123"。当你再次调用getUserById("123")时,Spring Cache会检查"users"缓存中是否存在key为"123"的缓存项。由于该缓存项存在,Spring Cache会直接返回缓存中的数据,而不是再次执行方法体内的代码。

这种方式显著提高了性能,特别是在获取用户信息这样的操作中,通常涉及到对数据库的访问,这可能是一个相对较慢的操作。通过缓存这些操作的结果,可以减少对数据库的访问次数,从而提高应用程序的响应速度和整体性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1426098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vivado 与系统设计师接口

与系统设计师接口 作为迭代I/O和时钟规划过程的一部分&#xff0c;您可以交换有关AMD设备通过导出CSV文件和IBIS模型&#xff0c;与PCB或系统设计者进行引脚连接。根据PCB或设计规范的变化&#xff0c;您可能需要将引脚重新导入为如定义和配置I/O端口中所述。完成I/O和时钟中的…

如何在 Mac 中运行 Office 办公软件

虽然 Office 软件也有 Mac 版本的&#xff0c;但是有蛮多小伙伴用起来还是感觉不得劲&#xff0c;毕竟接触了太久的 Windows&#xff0c;所以想要使用 Windows 版本的 Office 软件。 今天就给大家介绍一下怎么在 Mac 电脑中运行 Windows 版本的办公软件&#xff0c;在这里就需…

【Qt】—— Qt Creator 创建项目

目录 &#xff08;一&#xff09;Qt Creator概览 &#xff08;二&#xff09;使⽤Qt Creator新建项⽬ &#xff08;一&#xff09;Qt Creator概览 从开始菜单或者快捷⽅式打开Qt Creator集成开发环境&#xff0c;启动之后看到类似下⾯的界⾯&#xff1a; 【解释说明】 菜单栏…

0101appscan安装与使用入门-扫描-信息收集

1 简介 HCL AppScan&#xff08;原IBM Security AppScan&#xff09;是原IBM的Rational软件部门的一组网络安全测试和监控工具&#xff0c;2019年被HCL技术公司收购。AppScan旨在在开发过程中对Web应用程序的安全漏洞进行测试[1]。该产品学习每个应用程序的行为&#xff0c;无…

杂题——试题-算法训练-P0604-runaround数

分析&#xff1a; 题目有三个关键点&#xff1a; 一&#xff1a;结束时&#xff0c;回到起始位置&#xff08;比较结束时和起始时的下标位置是否相同&#xff09;二&#xff1a;该整数的所有数字都必须遍历一遍&#xff0c;且只能遍历一遍&#xff08;把遍历过的数字做个标记&a…

牛客,OR36 链表的回文结构,快慢指针和反转链表的实践

链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 还是比较简单的&#xff0c;主要分为三个步骤&#xff0c;两种需掌握的函数实现 目录 主要思路过程&#xff0c;1&#xff0c;找到中间结点&#xff0c;2&#xff0c;反转中间结点往后的结点&#xff0c;3&#xff0c;遍历比…

如何将AI智能监控应用在物业中打造智慧物业系统

方案背景 随着视频智能化发展&#xff0c;仅靠人力管理的传统物业已然成为历史&#xff0c;为了降低人工成本&#xff0c;实现精细化管理&#xff0c;人工智能的帮助必不可少&#xff0c;旭帆科技AI智能监控系统在物业中可以用于打造智慧物业系统&#xff0c;提升物业管理的效…

MacBook安装虚拟机VMware Fusion

MacBook安装虚拟机VMware Fusion 官方下载地址: https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_computing/vmware_fusion/11_0 介绍 之前的版本都要收费,现在出了对个人免费的版本, 棋哥给的破解版的版本是8,升级系统后用不了了. 官方去下载…

VR全景技术如何运用在文旅展示,VR全景技术对景区有哪些好处

引言&#xff1a; 随着科技的不断进步和社会的不断发展&#xff0c;VR全景技术越来越受到人们的关注。在文化旅游行业中&#xff0c;VR全景技术的应用为景区提供了全新的展示方式和体验内容&#xff0c;极大地丰富了游客的文化旅游体验。那么VR全景技术能给文旅展示带来哪些好…

AI的安全应答之道

作者&#xff1a;统信UOS技术团队 2023,随着各种大语言模型的爆发&#xff0c;整个AI生态正处于从决策式AI进化到生成式AI的进程中。各类AI模型和AI应用层出不穷&#xff0c;也随之带来了与AI相关的各类潜在风险。AI开发和使用过程中的风险防范和治理&#xff0c;成为了不可忽…

020 switch多选择结构

什么是switch多选择结构 switch语句中的变量类型为char的示例 char grade A; switch (grade){case A:System.out.println("成绩为A");break;case B:System.out.println("成绩为B");break;case C:System.out.println("成绩为C");break;case D:S…

022 do while循环

什么是do while循环 int i 0; do {System.out.println(i);i; } while (i < 100); 具体使用场景 int i; Scanner scanner new Scanner(System.in); do {System.out.print("请输入一个整数&#xff0c;如果为负数则结束循环&#xff1a;");i scanner.nextInt(…

去中心化治理时代——SunrayDAO正式发布用户自治模式规范提案

去中心化自治组织&#xff08;DAO&#xff09;从概念的提出再到市场不断检验发展至今&#xff0c;为社群集体决策提供了一个透明和去中心化的治理模式&#xff0c;区块链行业技术的迭代&#xff0c;各类项目和平台对DAO治理模式的探索从未停止&#xff0c;DAO这个象征着区块链精…

Matlab数字图像处理——图像复原与滤波算法应用方法

图像处理领域一直以来都是计算机科学和工程学的一个重要方向&#xff0c;图像复原则是其中一个重要的研究方向之一。图像复原旨在通过运用各种滤波算法&#xff0c;对图像进行去噪、恢复和改善&#xff0c;以提高图像的质量和可视化效果。在本文中&#xff0c;我们将介绍如下内…

Java并发基础:Semaphore全面解析!

内容概要 Semaphore通过控制许可数量&#xff0c;实现了对并发线程数的精细管理&#xff0c;有效避免了资源竞争和过载问题&#xff0c;能显著提升系统吞吐量和响应速度&#xff0c;同时&#xff0c;Semaphore还支持公平与非公平策略&#xff0c;具有更好的灵活性和适应性&…

nodejs+vue+ElementUi家庭美食菜谱分享网站_in9c2

&#xff08;设计制作有一定的安全性&#xff1b;数据库方面主要采用的是MySQL来进行开发&#xff0c;其特点是稳定性好&#xff0c;数据库存储容量大&#xff0c;处理能力快等优势&#xff1b;服务器采用的是Tomcat服务&#xff0c;能够提供稳固的运行平台&#xff0c;确保系统…

【Redis】实现缓存及相关问题

Redis实现缓存及相关问题 认识缓存 缓存就是数据交换的缓冲区&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高。 缓存的作用&#xff1a; 降低后端负载提高读写效率&#xff0c;降低响应时间 缓存的成本&#xff1a; 数据一致性成本代码维护成本运维成本 …

jQuery为动态添加的子元素添加点击事件

如图&#xff0c;查看学员信息后&#xff0c;相对其信息做相应处理&#xff0c;给后面的管理添加点击功能 通过点击查看全部学员 $.each(pagedata, function (index, item) { // 性别转换 if(item.sex1){sex_1 "男"…

Banana Pi BPI-R4开源路由器开发板快速上手用户手册,采用联发科MT7988芯片设计

介绍 Banana Pi BPI-R4 路由器板采用 MediaTek MT7988A (Filogic 880) 四核 ARM Corex-A73 设计&#xff0c;4GB DDR4 RAM&#xff0c;8GB eMMC&#xff0c;板载 128MB SPI-NAND 闪存&#xff0c;还有 2x 10Gbe SFP、4x Gbe 网络端口&#xff0c;带 USB3 .2端口&#xff0c;M.2…

虚拟机安装archlinux

1、创建虚拟机 2、安装系统4、为了方便&#xff0c;修改密码并使用dos窗口连接 5、磁盘分区 由于新建虚拟机时是8G&#xff0c;所以只建一个分区就行 6、格式化分区并挂载 7、更新镜像 rootarchiso ~ # pacman -Sy 8、 pacstrap -i /mnt base base-devel linux linux-f…