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

(七)Spring Boot学习——Redis使用

有部分内容是常用的,为了避免每次都查询数据库,将部分数据存入Redis。

一、 下载并安装 Redis

Windows 版的 Redis 官方已不再维护,你可以使用 微软提供的 Redis for Windows 版本 或者 使用 WSL(Windows Subsystem for Linux)安装 Redis

  1. 下载 Redis for Windows

    • 点击这里下载 Redis for Windows(推荐下载 Redis-x64-3.2.100.msi
    • 下载完成后,进行安装,安装路径建议:C:\Redis\
  2. 解压并进入 Redis 目录

    cd C:\Redis

  3. 启动 Redis 服务器

    redis-server.exe redis.windows.conf

  4. 验证 Redis 是否启动 打开另一个 命令行窗口(CMD),输入:

    redis-cli.exe ping

    如果返回:

    PONG

    说明 Redis 服务器已成功启动 🎉。

二、 配置 Redis

1. 添加 Redis 依赖

如果使用 Maven,在 pom.xml 添加:

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

⚠️ Spring Boot 2.0+ 默认使用 Lettuce,而不是 Jedis。如果要使用 Jedis,需要额外添加依赖

<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> 
</dependency>

✅ 2. 配置 Redis 连接

application.ymlapplication.properties 配置 Redis 连接信息。

🔹 application.properties 配置

#配置redis
spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
spring.data.redis.password=
spring.data.redis.database=0
spring.data.redis.timeout=5000ms
spring.data.redis.lettuce.pool.max-active=8
spring.data.redis.lettuce.pool.max-idle=8
spring.data.redis.lettuce.pool.min-idle=0
spring.data.redis.lettuce.pool.max-wait=-1ms

⚠️ 注意:

  • host:Redis 服务器地址
  • port:Redis 端口(默认 6379)
  • password:如果 Redis 没有密码,保持为空
  • database:选择 Redis 数据库(默认 0)
  • timeout:连接超时时间(5 秒)

✅ 3. 编写 Redis 工具类

可以使用 RedisTemplate 来操作 Redis。

🔹 RedisConfig.java

创建一个 Redis 配置类,注入 RedisTemplate


@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);// 使用 String 序列化 key,避免乱码redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());return redisTemplate;}
}

✅ 4. 在 Service 中使用 Redis

你可以直接在 RedisService 中使用 RedisTemplate 提供的方法来存取数据。

🔹 (1) 操作字符串

Redis 的 opsForValue() 主要用于存取字符串数据:


@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 存储字符串数据public void setString(String key, String value, long timeout) {redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);}// 获取字符串数据public String getString(String key) {return (String) redisTemplate.opsForValue().get(key);}// 删除 Keypublic void deleteKey(String key) {redisTemplate.delete(key);}
}

✅ 2. 操作哈希表(Hash)

Redis 的 opsForHash() 适用于存储对象、键值对等。


@Service
public class RedisHashService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 设置 Hash 值public void setHash(String key, String field, String value) {redisTemplate.opsForHash().put(key, field, value);}// 获取 Hash 值public Object getHash(String key, String field) {return redisTemplate.opsForHash().get(key, field);}// 获取整个 Hash 对象public Map<Object, Object> getAllHash(String key) {return redisTemplate.opsForHash().entries(key);}// 删除 Hash 字段public void deleteHashField(String key, String field) {redisTemplate.opsForHash().delete(key, field);}
}

示例

redisHashService.setHash("user:1001", "name", "Tom"); String name = redisHashService.getHash("user:1001", "name"); // "Tom"


✅ 3. 操作列表(List)

Redis opsForList() 适用于存储列表数据(如消息队列、排行榜等)。

@Service
public class RedisListService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 左侧推入列表public void leftPush(String key, String value) {redisTemplate.opsForList().leftPush(key, value);}// 右侧推入列表public void rightPush(String key, String value) {redisTemplate.opsForList().rightPush(key, value);}// 获取列表范围public List<Object> getListRange(String key, long start, long end) {return redisTemplate.opsForList().range(key, start, end);}// 弹出左侧元素public Object leftPop(String key) {return redisTemplate.opsForList().leftPop(key);}
}

示例

redisListService.leftPush("queue", "task1");

redisListService.leftPush("queue", "task2");

List<Object> tasks = redisListService.getListRange("queue", 0, -1); // ["task2", "task1"]


✅ 4. 操作集合(Set)

Redis opsForSet() 适用于存储无序唯一集合(如标签、好友列表等)。


@Service
public class RedisSetService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 添加集合元素public void addToSet(String key, String value) {redisTemplate.opsForSet().add(key, value);}// 获取集合中的所有元素public Set<Object> getSetMembers(String key) {return redisTemplate.opsForSet().members(key);}// 删除集合中的某个元素public void removeFromSet(String key, String value) {redisTemplate.opsForSet().remove(key, value);}
}

示例

redisSetService.addToSet("users", "Alice");

redisSetService.addToSet("users", "Bob");

Set<Object> users = redisSetService.getSetMembers("users"); // ["Alice", "Bob"]


✅ 5. 在 Controller 中调用

你可以在 Controller 里调用 RedisService 来测试 Redis 的使用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/redis")
public class RedisController {@Autowiredprivate RedisService redisService;// 存储 Key-Value@PostMapping("/set")public String setKey(@RequestParam String key, @RequestParam String value) {redisService.setString(key, value, 3600);return "存储成功";}// 获取 Key 的值@GetMapping("/get")public String getKey(@RequestParam String key) {return redisService.getString(key);}// 删除 Key@DeleteMapping("/delete")public String deleteKey(@RequestParam String key) {redisService.deleteKey(key);return "删除成功";}
}

相关文章:

(七)Spring Boot学习——Redis使用

有部分内容是常用的&#xff0c;为了避免每次都查询数据库&#xff0c;将部分数据存入Redis。 一、 下载并安装 Redis Windows 版的 Redis 官方已不再维护&#xff0c;你可以使用 微软提供的 Redis for Windows 版本 或者 使用 WSL&#xff08;Windows Subsystem for Linux&a…...

蓝桥与力扣刷题(蓝桥 字符统计)

题目&#xff1a;给定一个只包含大写字母的字符出 S, 请你输出其中出现次数最多的字符。如果有多个字母均出现了最多次, 按字母表顺序依次输出所有这些字母。 输入格式 一个只包含大写字母的字等串 S. 输出格式 若干个大写字母&#xff0c;代表答案。 样例输入 BABBACAC样…...

AtCoder Beginner Contest 397(ABCDE)

目录 A - Thermometer 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; B - Ticket Gate Log 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; C - Variety Split Easy 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; D - Cubes 翻译&#xff1a…...

Profinet转Profinet以创新网关模块为核心搭建西门子和欧姆龙PLC稳定通讯架构案例​

你是否有听过PROFINET主站与PROFINET主站之间需要做数据通讯有需求&#xff1f; 例如西门子1500与霍尼韦尔DCS系统两个主站之间的通讯。应用于PROFINET为主站设备还有欧姆龙、基恩士、罗克韦尔、施耐德、GE、ABB等品牌的PLC或DCS、FCS等平台。在生产或智能领域有通讯需求。两头…...

计算机视觉|Swin Transformer:视觉 Transformer 的新方向

一、引言 在计算机视觉领域的发展历程中&#xff0c;卷积神经网络&#xff08;CNN&#xff09; 长期占据主导地位。从早期的 LeNet 到后来的 AlexNet、VGGNet、ResNet 等&#xff0c;CNN 在图像分类、目标检测、语义分割等任务中取得了显著成果。然而&#xff0c;CNN 在捕捉全…...

C++单例模式精解

单例模式&#xff08;重点*&#xff09; 单例模式是23种常用设计模式中最简单的设计模式之一&#xff0c;它提供了一种创建对象的方式&#xff0c;确保只有单个对象被创建。这个设计模式主要目的是想在整个系统中只能出现类的一个实例&#xff0c;即一个类只有一个对象。 将单…...

【java】集合练习2

Student.java&#xff1a;保存学生类的定义。 public class Student {private String name;private int age;public Student(String name, int age) {this.name name;this.age age;}public String getName() { return name; }public int getAge() { return age; }Overridepu…...

FineBI_实现求当日/月/年回款金额分析

需求&#xff1a;原始数据结构如下&#xff0c;需要在分组表中&#xff0c;实现各城市当日/月/年的合同金额分析 实现步骤&#xff1a; ①维度拖入城市 ②分别取当日/月/年合同金额 当日DEF(SUM_AGG(${ 地区数据分析1 _ 合同金额 }),[${ 地区数据分析1 _ 城市 }],[LEFT(${ 地…...

【计算机网络】2物理层

物理层任务:实现相邻节点之间比特(或)的传输 1.通信基础 1.1.基本概念 1.1.1.信源,信宿,信道,数据,信号 数据通信系统主要划分为信源、信道、信宿三部分。 信源:产生和发送数据的源头。 信宿:接收数据的终点。 信道:信号的传输介质。 数据和信号都有模拟或数字…...

解决PC串流至IPad Pro时由于分辨率不一致导致的黑边问题和鼠标滚轮反转问题

问题背景 今天在做 电脑串流ipad pro 的时候发现了2个问题&#xff1a; 1.ipadpro 接上鼠标后&#xff0c;滚轮上下反转&#xff0c;这个是苹果自己的模拟造成的问题&#xff0c;在设置里选择“触控板与鼠标”。 关闭“自然滚动”,就可以让鼠标滚轮正向滚动。 2. ipadpro 分…...

在办公电脑上本地部署 70b 的 DeepSeek 模型并实现相应功能的大致步骤

以下是为客户在办公电脑上本地部署 70b 的 DeepSeek 模型并实现相应功能的大致步骤&#xff1a; 硬件准备&#xff1a; 70b 模型对硬件要求较高&#xff0c;确保办公电脑有足够强大的 GPU&#xff08;例如 NVIDIA A100 等高端 GPU&#xff0c;因为模型规模较大&#xff0c;普通…...

LLMs之CoD:《Chain of Draft: Thinking Faster by Writing Less》翻译与解读

LLMs之CoD&#xff1a;《Chain of Draft: Thinking Faster by Writing Less》翻译与解读 导读&#xff1a;这篇论文的核心是提出了一种名为“Chain of Draft”&#xff08;CoD&#xff0c;草稿链&#xff09;的新型提示策略&#xff0c;用于改进大型语言模型&#xff08;LLMs&a…...

Docker安装mysql——Linux系统

拉取mysql镜像 docker pull mysql 查看镜像 docker images 运行镜像&#xff08;这一步的作用&#xff1a;数据持久化&#xff0c;通过挂载卷将日志、数据和配置文件存储在主机上&#xff0c;避免容器删除导致数据丢失&#xff09; docker run -p 3306:3306 --name mysql …...

0CTF 2016 piapiapia 1

#源码泄露 #代码审计 #反序列化字符逃逸 #strlen长度过滤数组绕过 www.zip 得到源码 看到这里有flag &#xff0c;猜测服务端docker的主机里&#xff0c;$flag变量应该存的就是我们要的flag。 于是&#xff0c;我们的目的就是读取config.php 利用思路 这里存在 任意文件读取…...

2、危机应对-核心成员突然退出

一、场景&#xff1a; 当你团队中的骨干突然退出项目&#xff0c;如开发主程不干了&#xff0c;交付经理如何应对&#xff1f; 二、思考&#xff1a; 处理核心成员退出的本质是“通过系统性的减震降低人岗绑定的风险” 三、处理方式&#xff1a; 1、紧急评估影响 技术影响…...

python_巨潮年报pdf下载

目录 前置&#xff1a; 步骤&#xff1a; step one: pip安装必要包&#xff0c;获取年报url列表 step two: 将查看url列表转换为pdf url step three: 多进程下载pdf 前置&#xff1a; 1 了解一些股票的基本面需要看历年年报&#xff0c;在巨潮一个个下载比较费时间&…...

单片机自学指南

一、单片机基础入门 单片机的概念与发展历程 常见单片机类型介绍&#xff08;如 51 系列、STM32 系列等&#xff09; 单片机在生活与工业中的应用实例剖析 二、硬件原理学习 单片机内部结构详解&#xff08;CPU、存储器、I/O 口等&#xff09; 时钟电路与复位电路原理 电…...

Netty基础—6.Netty实现RPC服务三

大纲 1.RPC的相关概念 2.RPC服务调用端动态代理实现 3.Netty客户端之RPC远程调用过程分析 4.RPC网络通信中的编码解码器 5.Netty服务端之RPC服务提供端的处理 6.RPC服务调用端实现超时功能 5.Netty服务端之RPC服务提供端的处理 (1)RPC服务提供端NettyServer (2)基于反射…...

用vue3显示websocket的状态

在上次vue3项目上增加一个标签&#xff0c;显示当前的连接状态&#xff0c;两个按钮:重新连接 和 断开连接 修改App.vue <template><header><title>ws状态测试</title></header><main><WsStatus /></main> </template>…...

python拉取大视频导入deepseek大模型解决方案

使用Python拉取大视频并导入大模型&#xff0c;需要综合考虑数据获取、存储、处理和资源管理&#xff0c;确保高效稳定地处理大视频数据&#xff0c;同时充分利用大模型的性能&#xff0c;以下是分步方案及代码示例&#xff1a; --- 1. 分块下载大视频&#xff08;避免内存溢出…...

为什么需要使用十堰高防服务器?

十堰高防服务器的核心价值与应用必要性 一、‌应对复杂攻击的防御能力‌ ‌T级DDoS攻击防护‌ 十堰高防服务器搭载 ‌T级清洗中心‌&#xff0c;支持智能流量调度与分层处理&#xff0c;可抵御 ‌800Gbps-1.2Tbps‌ 的大规模混合攻击&#xff08;如SYN Flood、UDP反射&#xff…...

[特殊字符] 深度实战:Android 13 系统定制之 Recovery 模式瘦身指南

&#x1f31f; 核心需求 在 Android 13 商显设备开发中&#xff0c;需精简 Recovery 模式的菜单选项&#xff08;如Reboot to bootloader/Enter rescue&#xff09;&#xff0c;但直接修改g_menu_actions后在User 版本出现黑屏卡死问题&#xff0c;需综合方案解决。 &#x1f5…...

向量数据库技术系列四-FAISS介绍

一、前言 FAISS&#xff08;Facebook AI Similarity Search&#xff09;是由Facebook AI Research开发的一个开源库&#xff0c;主要用于高效地进行大规模相似性搜索和聚类操作。主要功能如下&#xff1a; 向量索引与搜索&#xff1a;FAISS提供了多种索引和搜索向量的方法&…...

人工智能中的线性代数基础详解

‌ 线性代数是人工智能领域的重要数学基础之一,是人工智能技术的底层数学支柱,它为数据表示、模型构建和算法优化提供了核心工具。其核心概念与算法应用贯穿数据表示、模型训练及优化全过程。更多内容可看我文章:人工智能数学基础详解与拓展-CSDN博客 一、基本介绍 …...

格雷码.

格雷码 - OI Wiki 格雷码_百度百科 简介 格雷码&#xff08;Gray Code&#xff09;&#xff0c;又称为二进制格雷码或循环二进制码&#xff0c;是一种二进制编码方式。它得名于贝尔实验室的工程师弗兰克格雷&#xff08;Frank Gray&#xff09;&#xff0c;他于1940年代提出…...

【毕业论文格式】word分页符后的标题段前间距消失

文章目录 【问题描述】 分页符之后的段落开头&#xff0c;明明设置了标题有段前段后间距&#xff0c;但是没有显示间距&#xff1a; 【解决办法】 选中标题&#xff0c;选择边框 3. 选择段前间距&#xff0c;1~31磅的一个数 结果...

kubernetes对于一个nginx服务的增删改查

1、创建 Nginx 服务 1.1、创建 Deployment Deployment 用于管理 Pod 副本和更新策略。 方式一&#xff1a;命令式创建 kubectl create deployment nginx-deployment --imagenginx:latest --replicas3 --port80--replicas3&#xff1a;指定副本数为 3 --port80&#xff1a;容…...

PackageManagerService

首语 PackageManagerService(以下简称PMS)是Android最核心的系统服务之一&#xff0c;它是应用程序包管理服务&#xff0c;管理手机上所有的应用程序&#xff0c;包括应用程序的安装、卸载、更新、应用信息的查询、应用程序的禁用和启用等。 职责 在Android系统启动过程中扫…...

【蓝桥杯每日一题】3.16

&#x1f3dd;️专栏&#xff1a; 【蓝桥杯备篇】 &#x1f305;主页&#xff1a; f狐o狸x 目录 3.9 高精度算法 一、高精度加法 题目链接&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a; 解题代码&#xff1a; 二、高精度减法 题目链接&#xff1a; 题目描述&…...

2.7 滑动窗口专题:串联所有单词的子串

LeetCode 30. 串联所有单词的子串算法对比分析 1. 题目链接 LeetCode 30. 串联所有单词的子串 2. 题目描述 给定一个字符串 s 和一个字符串数组 words&#xff0c;words 中所有单词长度相同。要求找到 s 中所有起始索引&#xff0c;使得从该位置开始的连续子串包含 words 中所…...