【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的缓存技术:使用 Redis 提升性能

news2025/7/12 19:21:19

 <前文回顾>

点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、开篇整活儿

今儿个咱唠唠 Spring Boot 里头的缓存技术。这玩意儿吧,说大不大,说小不小,整好了是锦上添花,整不好就是火上浇油。你要是刚入门,那可得悠着点儿,别一上来就整得自己“翻车”了。

二、缓存是啥玩意儿?

缓存是提升系统性能的一个利器,说白了就是把一些常用的数据存到内存里头,下次再用的时候直接从内存拿,不用再去数据库查了。Spring Boot 里头默认就集成了缓存技术,用起来贼方便。

1. 缓存的分类

缓存分两种:本地缓存分布式缓存

  • 本地缓存:就是把数据存到应用的内存里头,速度快,但是容量有限,而且不能跨应用共享。
  • 分布式缓存:就是把数据存到外部的缓存服务器里头,容量大,而且可以跨应用共享,但是速度比本地缓存慢。

2. Redis 是啥玩意儿?

Redis 是一个开源的、高性能的分布式缓存数据库,支持多种数据结构,比如说字符串、哈希、列表、集合啥的。Spring Boot 里头默认就集成了 Redis,用起来贼方便。

三、Spring Boot 集成 Redis

Spring Boot 里头集成 Redis 很简单,只要加个依赖,配个连接信息就行了。

1. 添加依赖

首先,你得在 pom.xml 里头加个 Redis 的依赖。

XML Code

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

这段代码里头,spring-boot-starter-data-redis 是 Spring Boot 里头的 Redis 依赖。

2. 配置连接信息

然后,你得在 application.properties 里头配个 Redis 的连接信息。

Properties Code

spring.redis.host=localhost

spring.redis.port=6379

这段代码里头,spring.redis.host 是 Redis 的主机地址,spring.redis.port 是 Redis 的端口号。

3. 使用 RedisTemplate

最后,你可以在代码里头用 RedisTemplate 来操作 Redis。

Java Code

@Service

public class MyService {

    @Autowired

    private RedisTemplate<String, String> redisTemplate;

    public void setValue(String key, String value) {

        redisTemplate.opsForValue().set(key, value);

    }

    public String getValue(String key) {

        return redisTemplate.opsForValue().get(key);

    }

}

这段代码里头,RedisTemplate 是 Spring Boot 里头的一个类,用来操作 Redis 的。

四、Spring Boot 使用 Redis 缓存

Spring Boot 里头使用 Redis 缓存很简单,只要加个注解就行了。

1. 启用缓存

首先,你得在 Spring Boot 应用里头启用缓存,用 @EnableCaching 注解标记。

Java Code

@SpringBootApplication

@EnableCaching

public class MyApplication {

    public static void main(String[] args) {

        SpringApplication.run(MyApplication.class, args);

    }

}

这段代码里头,@EnableCaching 注解启用了缓存。

2. 配置缓存管理器

然后,你得配置缓存管理器,用 @Bean 注解标记。

Java Code

@Configuration

public class CacheConfig {

    @Bean

    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {

        return RedisCacheManager.builder(redisConnectionFactory)

                .cacheDefaults(RedisCacheConfiguration.defaultCacheConfig())

                .build();

    }

}

这段代码里头,cacheManager 方法配置了一个 RedisCacheManager,用来管理缓存。

3. 使用 @Cacheable 注解

最后,你可以在 Service 里头用 @Cacheable 注解标记方法,开启缓存。

Java Code

@Service

public class MyService {

    @Cacheable(value = "myCache", key = "#key")

    public String getValue(String key) {

        // 一些复杂的逻辑

        return "value";

    }

}

这段代码里头,getValue 方法用 @Cacheable 注解标记了,开启了缓存。value 是缓存的名字,key 是缓存的键。

五、Spring Boot 使用 Redis 缓存的坑点

1. 缓存穿透

缓存穿透是指查询一个不存在的数据,缓存里头没有,数据库里头也没有,这样每次查询都会打到数据库上。你要是没处理好,那数据库可就遭殃了。

Java Code

@Service

public class MyService {

    @Cacheable(value = "myCache", key = "#key", unless = "#result == null")

    public String getValue(String key) {

        // 一些复杂的逻辑

        return null;

    }

}

这段代码里头,unless = "#result == null" 表示如果返回值为 null,就不缓存。

2. 缓存雪崩

缓存雪崩是指缓存里头的数据大面积失效,导致大量请求直接打到数据库上。你要是没处理好,那数据库可就遭殃了。

Java Code

@Service

public class MyService {

    @Cacheable(value = "myCache", key = "#key", cacheManager = "randomCacheManager")

    public String getValue(String key) {

        // 一些复杂的逻辑

        return "value";

    }

}

这段代码里头,cacheManager = "randomCacheManager" 表示使用随机的缓存管理器,避免缓存同时失效。

3. 缓存击穿

缓存击穿是指缓存里头的数据失效了,导致大量请求直接打到数据库上。你要是没处理好,那数据库可就遭殃了。

Java Code

@Service

public class MyService {

    @Cacheable(value = "myCache", key = "#key", sync = true)

    public String getValue(String key) {

        // 一些复杂的逻辑

        return "value";

    }

}

这段代码里头,sync = true 表示使用同步机制,避免缓存击穿。

专有名词解释

  1. 缓存:提升系统性能的一个利器,把一些常用的数据存到内存里头,下次再用的时候直接从内存拿。
  2. 本地缓存:把数据存到应用的内存里头,速度快,但是容量有限,而且不能跨应用共享。
  3. 分布式缓存:把数据存到外部的缓存服务器里头,容量大,而且可以跨应用共享,但是速度比本地缓存慢。
  4. Redis:一个开源的、高性能的分布式缓存数据库,支持多种数据结构。
  5. RedisTemplate:Spring Boot 里头的一个类,用来操作 Redis 的。
  6. @EnableCaching:Spring Boot 里头的一个注解,用来启用缓存。
  7. CacheManager:Spring Boot 里头的一个接口,用来管理缓存。
  8. RedisCacheManager:Spring Boot 里头的一个类,用来管理基于 Redis 的缓存。
  9. @Cacheable:Spring Boot 里头的一个注解,用来开启缓存。
  10. 缓存穿透:查询一个不存在的数据,缓存里头没有,数据库里头也没有,导致每次查询都打到数据库上。
  11. 缓存雪崩:缓存里头的数据大面积失效,导致大量请求直接打到数据库上。
  12. 缓存击穿:缓存里头的数据失效了,导致大量请求直接打到数据库上。

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

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

相关文章

华为配置篇-BGP实验

BGP 一、简述二、常用命令总结三、实验 一、简述 IBGP 水平分割&#xff1a;从一个 IBGP 对等体学到的路由&#xff0c;不会再通告给其他的 IBGP 对等体。在一个 AS 内部&#xff0c;路由器之间通过 IBGP 交换路由信息。如果没有水平分割机制&#xff0c;当多个路由器之间形成…

vue element-ui 工程创建

vue element-ui 工程创建 按照步骤 &#xff1a; https://blog.csdn.net/wowocpp/article/details/146590400 创建工程 vue create demo3 cd demo3 npm run serve 在demo3 目录里面 执行如下命令 npm install element-ui -S 然后查看 package.json main.js 添加代码&…

《AI大模型应知应会100篇》第2篇:大模型核心术语解析:参数、Token、推理与训练

第2篇&#xff1a;大模型核心术语解析&#xff1a;参数、Token、推理与训练 摘要 本文将用通俗易懂的语言拆解大模型领域的四大核心概念&#xff1a;参数、Token、训练与推理。通过案例对比、代码实战和成本计算&#xff0c;帮助读者快速掌握这些术语的底层逻辑与实际应用价值…

【28BYJ-48】STM32同时驱动4个步进电机,支持调速与正反转

资料下载&#xff1a;待更新。。。。 先驱动起来再说&#xff0c;干中学&#xff01;&#xff01;&#xff01; 1、实现功能 STM32同时驱动4个步进电机&#xff0c;支持单独调速与正反转控制 需要资源&#xff1a;16个任意IO口1ms定时器中断 目录 资料下载&#xff1a;待更…

Gradle-基础

一.安装 1. 2.配置环境变量 GRADLE_HOME D:\gradle\gradle-5.6.4 GRADLE_USER_HOME D:\gradle\localRepository 3.下载源配置 安装目录下的init.d文件夹里创建一个init.gradle文件&#xff0c;下载顺序从上到下&#xff0c;内容&#xff1…

Anolis系统下安装Jenkins

1.安装java、maven yum install -y java-17-openjdk-devel maven git wget 2.配置环境变量 1.查看java和maven所在目录 [rootlocalhost ~]# which java /usr/bin/java [rootlocalhost bin]# ll /usr/bin/java lrwxrwxrwx 1 root root 22 4月 1 17:20 /usr/bin/java ->…

LabVIEW 调用 Python 函数

此程序是 LabVIEW 调用 Python 函数实现双精度数相加的典型示例。通过 LabVIEW 搭建交互框架&#xff0c;借助 “Open Python Session” 创建 Python 代码运行环境&#xff0c;定位 Python 模块路径后调用 “Add” 函数&#xff0c;最终实现数据处理并关闭会话。整个流程展现了…

视频分析设备平台EasyCVR视频结构化AI智能分析:筑牢校园阳光考场远程监控网

一、背景分析​ 近年来&#xff0c;学校考试的舞弊现象屡禁不止&#xff0c;严重破坏考试的公平性&#xff0c;不仅损害广大考生的切身利益&#xff0c;也在社会上造成恶劣的影响。为有效制止舞弊行为&#xff0c;收集确凿的舞弊证据&#xff0c;在考场部署一套可靠的视频监控…

AWS用Glue读取S3文件上传数据到Redshift,再导出到Quicksight完整版,含VPC配置

1. 项目背景 AWS的官方文档&#xff0c;关于Glue和Vpc配置部分已经比较旧了&#xff0c;按照官方文档配置的流程始终跑不通&#xff0c;花了一番时间和波折后&#xff0c;才终于完整的跑通了。 在数据分析和商业智能&#xff08;BI&#xff09;领域&#xff0c;我们常需要将存…

Python爬虫第3节-会话、Cookies及代理的基本原理

目录 一、会话和Cookies 1.1 静态网页和动态网页 1.2 无状态HTTP 1.3 常见误区 二、代理的基本原理 2.1 基本原理 2.2 代理的作用 2.3 爬虫代理 2.4 代理分类 2.5 常见代理设置 一、会话和Cookies 大家在浏览网站过程中&#xff0c;肯定经常遇到需要登录的场景。有些…

OkHttpHttpClient

学习链接 okhttp github okhttp官方使用文档 SpringBoot 整合okHttp okhttp3用法 Java中常用的HTTP客户端库&#xff1a;OkHttp和HttpClient&#xff08;包含请求示例代码&#xff09; 深入浅出 OkHttp 源码解析及应用实践 httpcomponents-client github apache httpclie…

c++柔性数组、友元、类模版

目录 1、柔性数组&#xff1a; 2、友元函数&#xff1a; 3、静态成员 注意事项 面试题&#xff1a;c/c static的作用? C语言&#xff1a; C: 为什么可以创建出 objx 4、对象与对象之间的关系 5、类模版 1、柔性数组&#xff1a; #define _CRT_SECURE_NO_WARNINGS #…

Centos 8 安装教程(新手版)

1.需要在阿里开源镜像站下载对应的镜像&#xff0c;如下&#xff1a;https://mirrors.aliyun.com/centos/8.5.2111/isos/x86_64/ 2.打开VM虚拟机&#xff0c;创建新的虚拟机&#xff0c;选择自定义 如图所示点击进行&#xff1a; 选择下载好的镜像 选择“Linux”&#xff0c;版…

Vue2函数式组件实战:手写可调用的动态组件,适用于toast轻提示、tip提示、dialog弹窗等

Vue2函数式组件实战&#xff1a;手写可调用的动态组件 一、需求场景分析 在开发中常遇到需要动态调用的组件场景&#xff1a; 全局弹窗提示即时消息通知动态表单验证需要脱离当前DOM树的悬浮组件 传统组件调用方式的痛点&#xff1a;必须预先写入模板&#xff0c;可能还要用…

大象如何学会太空漫步?美的:科技领先、To B和全球化

中国企业正处在转型的十字路口。一边是全新的技术、全新的市场机遇&#xff1b;一边是转型要面临的沉重负累和巨大投入&#xff0c;无数中国制造、中国品牌仍在寻路&#xff0c;而有的人已经走至半途。 近日&#xff0c;美的集团交出了一份十分亮眼的2024年财报。数据显示&…

已经使用中的clickhouse更改数据目录

在更换的目录操作&#xff0c;这里更换的目录为home目录&#xff0c;原先安装的目录在/soft/clickhouse/ ,在该目录下有data目录和log目录 更改前目录 更改后目录 1、停止clickhouse服务 sudo systemctl stop clickhouse-server 2、在home目录创建clickhouse目录,在clickho…

PHP的相关配置和优化

进入etc下面 去掉注释 pid run/php-fpm.pid #指定pid文件存放位置 生成一下子配置文件 这些都是生成的fastcgi的配置文件 进入php中&#xff0c;然后复制模版&#xff0c;生成配置文件 然后编辑文件更改时区 改完之后可以生成启动脚本 这时候刷新之后&#xff0c;再启动会报…

【leetcode100】每日温度

1、题目描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输…

<贪心算法>

前言&#xff1a;在主包还没有接触算法的时候&#xff0c;就常听人提起“贪心”&#xff0c;当时是layman&#xff0c;根本不知道说的是什么&#xff0c;以为很难呢&#xff0c;但去了解一下&#xff0c;发现也不过如此嘛&#xff08;bushi)&#xff0c;还以为是什么高级东西呢…

基于银河麒麟桌面服务器操作系统的 DeepSeek本地化部署方法【详细自用版】

一、3种方式使用DeepSeek 1.本地部署 服务器操作系统环境进行,具体流程如下(桌面环境步骤相同): 本例所使用银河麒麟高级服务器操作系统版本信息: (1)安装ollama 方式一:按照ollama官网的下载指南,执行如下命令: curl -fsSL https://ollama.com/install.sh | sh方…