SpringBoot 如何使用 Redis 作为缓存?

news2024/12/24 20:48:45

SpringBoot 如何使用 Redis 作为缓存?

引言

在今天的互联网应用中,缓存是一个非常重要的概念。缓存可以减轻数据库的负担,提高系统的性能。Redis 是一个非常流行的内存数据库,它可以用作缓存,提供快速的读写速度和高可用性。在本文中,我们将介绍如何在 SpringBoot 中使用 Redis 作为缓存。

在这里插入图片描述

Redis 简介

Redis 是一个高性能的键值对存储系统,它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。Redis 的优点包括:

  • 快速:Redis 是一个基于内存的数据库,读写速度非常快。
  • 可扩展:Redis 支持分布式架构,可以通过横向扩展来提高性能。
  • 多样性:Redis 支持多种数据结构,可以应对不同的应用场景。
  • 持久化:Redis 支持数据持久化,可以保证数据不会丢失。

SpringBoot 集成 Redis

在 SpringBoot 中使用 Redis,我们需要添加 Redis 的依赖。在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

添加依赖后,我们需要配置 Redis 的连接信息。在 application.properties 中添加以下配置:

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=

这里的配置是连接本地的 Redis 服务,如果 Redis 服务在其他机器上,需要修改 host 和 port 的值。如果 Redis 服务需要密码认证,需要设置 password 的值。

RedisTemplate

SpringBoot 提供了 RedisTemplate 类来操作 Redis。RedisTemplate 是一个泛型类,可以操作多种数据类型。使用 RedisTemplate,我们可以将对象序列化为 byte 数组,然后存储到 Redis 中。RedisTemplate 的配置如下:

@Configuration
public class RedisConfig {
 
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
 
        // 使用 Jackson2JsonRedisSerializer 来序列化和反序列化 Redis 的 value 值(默认使用 JDK 的序列化方式)
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(objectMapper);
 
        // 使用 StringRedisSerializer 来序列化和反序列化 Redis 的 key 值
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(serializer);
 
        // 设置 hash key 和 value 序列化模式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);
 
        template.afterPropertiesSet();
        return template;
    }
}

在上面的配置中,我们使用 Jackson2JsonRedisSerializer 来序列化和反序列化 Redis 的 value 值。同时,我们也需要使用 StringRedisSerializer 来序列化和反序列化 Redis 的 key 值。

使用 RedisTemplate

在 SpringBoot 中使用 RedisTemplate,我们可以通过注入 RedisTemplate 来操作 Redis。以下是一些常见的操作方法:

添加缓存

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void add(String key, Object value) {
    redisTemplate.opsForValue().set(key, value);
}

在上面的代码中,我们使用 opsForValue() 方法获取 RedisTemplate 的 ValueOperations 对象,然后使用 set 方法添加缓存。

获取缓存

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public Object get(String key) {
    return redisTemplate.opsForValue().get(key);
}

在上面的代码中,我们使用 opsForValue() 方法获取 RedisTemplate 的 ValueOperations 对象,然后使用 get 方法获取缓存。

删除缓存

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void delete(String key) {
    redisTemplate.delete(key);
}

在上面的代码中,我们使用 delete 方法删除缓存。

设置过期时间

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void expire(String key, long timeout, TimeUnit timeUnit) {
    redisTemplate.expire(key, timeout, timeUnit);
}

在上面的代码中,我们使用 expire 方法设置缓存的过期时间。

Redis 缓存注解

除了使用 RedisTemplate 来操作 Redis,我们还可以使用 SpringBoot 提供的缓存注解来实现缓存。SpringBoot 提供了 CacheManager 和 Cache 接口来管理缓存。我们可以使用 @EnableCaching 注解开启缓存功能,然后使用 @Cacheable、@CachePut、@CacheEvict 等注解来操作缓存。

@EnableCaching

首先,我们需要在 SpringBoot 应用中开启缓存功能。使用 @EnableCaching 注解即可开启缓存功能。

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

@Cacheable

@Cacheable 注解可以将方法的返回值缓存到 Redis 中,下次调用该方法时,会先从 Redis 中获取缓存,如果缓存不存在,则执行方法,并将返回值缓存到 Redis 中。

@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
    // 执行方法
}

在上面的代码中,我们使用 @Cacheable 注解将 getUserById 方法的返回值缓存到名为 “users” 的缓存中,缓存的 key 是方法的参数 id。如果缓存中已经存在 key 是 id 的数据,则直接返回缓存中的数据,否则执行方法并将返回值缓存到 Redis 中。

@CachePut

@CachePut 注解可以更新 Redis 中的缓存数据,它会先执行方法,然后将方法的返回值更新到 Redis 中的缓存数据中。

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

在上面的代码中,我们使用 @CachePut 注解将 updateUser 方法的返回值更新到 Redis 中名为 “users” 的缓存中,缓存的 key 是 user 的 id 属性。

@CacheEvict

@CacheEvict 注解可以删除 Redis 中的缓存数据。

@CacheEvict(value = "users", key = "#id")
public void deleteUserById(Long id) {
    // 删除用户信息
}

在上面的代码中,我们使用 @CacheEvict 注解删除 Redis 中名为 “users” 的缓存中 key 是 id 的数据。

总结

在本文中,我们介绍了如何在 SpringBoot 中使用 Redis 作为缓存。我们学习了如何使用 RedisTemplate 和缓存注解来操作 Redis,包括添加缓存、获取缓存、删除缓存以及设置缓存过期时间。使用 Redis 作为缓存可以提高应用的性能,减轻数据库的负担,同时也可以提高应用的可扩展性和可靠性。

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

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

相关文章

【C语言初阶(1)】分支语句

文章目录 前言1. if 语句1.1 if 语法结构1.2 悬空 else1.3 “ ” 号引发的错误1.4 if 语句练习题 2. switch 语句2.1 switch 语法结构2.2 在switch语句中的 break2.3 default 子句2.4 switch 语句练习题 前言 C语言是一门结构化的程序设计语言&#xff1b; 它分为&#xff1a;…

【MySQL】不就是多表查询综合练习

前言 嗨咯大家好&#xff01;我们学习完毕了多表查询&#xff0c;今天我们就要对我们所学的成果进行测验&#xff0c;本期主要是对多表查询相关内容的练习课程。可以先试着自己敲&#xff0c;遇到不会可以查看查考代码。 目录 前言 目录 练习题 1.查询员工的姓名、年龄、职位…

生物制药厂洁净区环境监测超限的标准是多少?

对于一些生物制药企业来说&#xff0c;质量管理部门应加深对环境监测的质量认识&#xff0c;掌握环境监测的技术手段&#xff0c;定期评估环境监测程序的有效性和完整性&#xff0c;并且对环境监测数据进行趋势分析以寻找可以更好控制的区域&#xff0c;以保证企业的生产符合GM…

网络安全合规-网络安全工程师(一)

网络安全工程师的工作种类很多&#xff0c;当前这个图片说明了具体的工程师的工作种类有哪些&#xff0c;列举了一下。 互联网时代网络及科技迅速发展&#xff0c;随之而来的首要问题就是网络安全&#xff0c;因为已经出现的网络问题带来了巨大的经济损失&#xff0c;甚至各种…

ModaHub魔搭社区:安装、启动 Milvus 服务(CPU版)教程

目录 安装、启动 Milvus 服务 安装前提 操作系统 硬件 软件 确认 Docker 状态 拉取 Milvus 镜像 下载配置文件 启动 Milvus Docker 容器 常见问题 接下来你可以 安装、启动 Milvus 服务 CPU 版 MilvusGPU 版 Milvus 安装前提 操作系统 操作系统 版本 CentOS 7…

node 单线程、多线程和多进程模型

文章目录 node 启动过程单线程多线程node 启动过程相关线程node 多线程特点创建多线程 多进程创建多进程cluster进程守护 node 启动过程 C 层引导&#xff1a;Node.js 启动时&#xff0c;会初始化 C 层的结构和依赖项&#xff0c;如 V8 引擎、Libuv 事件循环、核心模块等。此外…

TCP/IP 协议详解

文章目录 简介应用层传输层网络层网络接口层数据包发送过程TCP 三次握手四次挥手三次握手为什么是三次握手四次挥手为什么是四次挥手 简介 TCP/IP传输协议&#xff0c;即传输控制/网络协议&#xff0c;也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。 TCP/IP传输…

【Nginx基础与应用】

文章目录 Nginx基础与应用1 Nginx 概述1.1 介绍1.2 下载与安装1.3 目录结构 2 Nginx 命令3 Nginx 配置文件结构4 Nginx 具体应用4.1 部署静态资源4.2 反向代理4.3 负载均衡(基于反向代理实现) Nginx基础与应用 1 Nginx 概述 1.1 介绍 Nginx是一款轻量级的web服务器/反向代理…

如何在 Linux 中安装、设置和使用 SNMP?

概要 SNMP&#xff08;Simple Network Management Protocol&#xff09;是一种用于管理和监控网络设备的协议。它允许网络管理员通过远程方式收集设备的运行状态、性能数据和错误信息&#xff0c;以便进行故障排除和网络优化。在Linux系统中&#xff0c;我们可以安装、设置和使…

vue3-element-admin 项目说明文档

vue3-element-admin官方文档 | 在线预览 项目介绍 vue3-element-admin 是基于 Vue3 Vite4 TypeScript5 Element-Plus Pinia 等最新主流技术栈构建的后台管理前端模板&#xff08;配套后端源码&#xff09;。 项目有以下特性&#xff1a; 基于 vue-element-admin 升级到…

共建信创安全生态|安全狗正式加入麒麟软件安全生态联盟

5月25日&#xff0c;麒麟软件安全生态联盟第二次工作会议顺利举办。 作为国内云原生安全领导厂商&#xff0c;安全狗以安全生态联盟成员单位应邀参会并发表重要观点。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于2013年&#xff0c;致力于…

无向图G的邻接矩阵法和邻接表法以及遍历输出无向图G包括两种存储的FirstNeighbor和NextNeighbor两种基本操作

一.邻接矩阵法 将下列图G用邻接矩阵法进行存储 圆圈中的字符&#xff1a;是顶点的值 圆圈旁边的数字&#xff1a;是顶点的序号 边线上的值&#xff1a;是两个顶点之间的权值 1.结构体 #define MaxVertexNum 10 typedef char VerTexType;//顶点的数据类型 typedef int Edg…

prometheus + grafana + node_exporter + alertmanager 的安装部署与邮件报警

背景介绍 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发&#xff0c;是Google BorgMon监控系统的开源版本。 Prometheus的特点 多维度数据模型。 灵活的查询语言。 不依赖分布式存储&#xff0c;单个服务器节点是自主的。 通…

二值化的mask生成yolov5-7.0的实例分割训练标签

背景&#xff1a;要用yolov5-7.0训练分割&#xff0c;这里使用自己的数据&#xff0c;mask是二值化的数据&#xff0c;要先转换成COCO格式&#xff0c;这里用imantics实现。 详见&#xff1a;https://zhuanlan.zhihu.com/p/427096258 截取部分代码如下图&#xff0c;读取image图…

C++之引用、指针引用、常引用

引用 引用的概念引用的定义引用的使用引用的应用引用的本质&#xff08;就是C内部的一个常指针(type * const 名)&#xff09;指针引用&#xff08;其类型还是指针type *&#xff09;常引用&#xff08;采用const修饰的引用&#xff09; 引用的概念 1、通常我们说的引用指的是…

和鲸社区数据分析每周挑战【第九十五期:奈飞股价预测分析】

和鲸社区数据分析每周挑战【第九十五期&#xff1a;奈飞股价预测分析】 文章目录 和鲸社区数据分析每周挑战【第九十五期&#xff1a;奈飞股价预测分析】一、前言1、背景描述2、数据说明3、数据集预览 二、数据读取和数据预处理三、历史股价数据可视化四、利用sklearn中LinearR…

Linux 系统下的df、du、fdisk、lsblk指令

文章目录 1 查看磁盘与目录容量&#xff08;df、du&#xff09;2 查看磁盘分区&#xff08;fdisk、lsblk&#xff09;3 df、du、fdisk、lsblk的区别 1 查看磁盘与目录容量&#xff08;df、du&#xff09; df -h //列出文件系统的整体磁盘使用量在显示的结果中要特别留意根目录…

安洵杯2023 部分pwn复现

1. harde_pwn 漏洞点&#xff1a; 覆盖printf的返回地址 from pwn import * from LibcSearcher import LibcSearcher from sys import argv from Crypto.Util.number import bytes_to_long import os def ret2libc(leak, func, path):if path :libc LibcSearcher(func, leak…

二级Python考试环境安装教程

二级Python考试环境 Python3.5.3至Python3.9.10版。为方便考生学习与考点备考&#xff0c;现提供二级Python应用软件的网络下载&#xff0c;广大考生和考点管理员可以下载使用 软件包下载&#xff08;62.18 MB&#xff09; https://www.123pan.com/s/y4HrVv-0S0lA.html 安装…

在windows11环境下安装CUDA11.6+Anaconda3+pyToach1.13搭建炼丹炉

0.电脑环境 系统&#xff1a;win11 显卡&#xff1a;NVIDIA GTX1650 还有一个pyCharm&#xff0c;其他也用不到了&#xff0c;需要的文章中会进行说明 1.安装CUDA11.6 目前2023.03出来的pyToach2.0是用不到了&#xff0c;因为最低版本支持CUDA11.7。我的显卡是1650&#xff0c…