(七)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 "删除成功";}
}

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

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

相关文章

HarmonyOS NEXT 声明式UI语法学习笔记-创建自定义组件

基础语法概述 ArkTS的基本组成 装饰器&#xff1a;用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊含义。如上图都是装饰器&#xff0c;Component表示自定义组件&#xff0c;Entry表示表示自定义组件的入口组件&#xff0c;State表示组件中的状态变量&#xff0c;当状…

【ElasticSearch】学习笔记

一、lucene的组成 segment是一个具备完整搜索功能的最小单元。 多个segment组成了一个单机文本检索库lucene。 inverted index:倒排索引&#xff0c;用于快速根据关键词找到对应的文章term index: 构建出关键词的目录树&#xff0c;解决了term dictionary数据量过大&#xff…

SSL/TLS 1.2过程:Client端如何验证服务端证书?

快速回顾非对称加密和对称加密 首先快速说一下非对称加密和对称加密。非对称加密&#xff0c;就是有一个公钥和私钥(成对存在)。 公钥对一段文本A加密得到文本B&#xff0c;只有对应的私钥能对B解密得到A。 私钥对一段文本C加密得到文本D&#xff0c;只有对应的公钥能对D解密得…

ChatGPT、DeepSeek、Grok:AI 语言模型的差异与应用场景分析

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 人工智能&#xff08;AI&#xff09;语言模型正在快速发展&#xff0c;ChatGPT&#xff08;OpenAI&#xff09;、DeepSe…

正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-4 uboot目录分析

前言&#xff1a; 本文是根据哔哩哔哩网站上“Arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用&#xff1a; …

matlab 控制系统GUI设计-PID控制超前滞后控制

1、内容简介 matlab164-控制系统GUI设计-PID控制超前滞后控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

介绍HTTP协议基本结构与Linux中基本实现HTTPServer

介绍HTTP协议基本结构与基本实现HTTPServer HTTP协议 前面已经了解了协议的重要性并且已经定义了属于我们自己的协议&#xff0c;但是在网络中&#xff0c;已经有一些成熟的协议&#xff0c;最常用的就是HTTP协议 在互联网世界中&#xff0c;HTTP&#xff08;HyperText Tran…

Linux和RTOS简析

以下是针对 Linux驱动开发、RTOS&#xff08;实时操作系统&#xff09;任务状态&#xff08;就绪态&#xff09; 以及 互斥锁 的详细解释&#xff1a; 一、Linux设备驱动 1. 什么是设备驱动&#xff1f; 定义&#xff1a;设备驱动是操作系统内核的一部分&#xff0c;用于管理…

docker 常用命令大全(二),docker 镜像操作 ,持续更新

docker 相关的命令 在公共仓库中下载 docker pull bitnami/postgresql:12.8.0查看镜像 docker images |grep postgresql打tag推送到本地仓库 docker tag postgresql:12.8.0 docker.公司域名.com/library/postgresql:12.8.0推送到本地仓库 docker push docker.公司域名com…

Git使用和原理(3)

1.远程操作 1.1分布式版本控制系统 我们⽬前所说的所有内容&#xff08;⼯作区&#xff0c;暂存区&#xff0c;版本库等等&#xff09;&#xff0c;都是在本地&#xff01;也就是在你的笔记本或者 计算机上。⽽我们的 Git 其实是分布式版本控制系统&#xff01;什么意思呢&a…

[本周五题]Javascript面试常考题手撕场景UR缓存、new关键字、大数相加、最长递增子序列、高并发请求、大文件上传和WebWorks

LUR缓存实现 以下是 JavaScript 实现 LRU 缓存的详细解析&#xff0c;结合核心原理与代码实现&#xff0c;并标注来源&#xff1a; 一、LRU 缓存核心原理 LRU&#xff08;Least Recently Used&#xff09;缓存淘汰策略的核心思想是&#xff1a;当缓存容量满时&#xff0c;优先…

c语言zixue

该文主要是记录我学习中遇到的一些重点、易出问题的内容 教材p16.17 先从一个简单的例子开始吧 #include <stdio.h> //编译预处理命令 int main() //程序的主函数 {printf("To C"); //输出语句return 0; //返回语句 } #include <stdio.h>是编译预…

卷积神经网络(CNN)的主要架构

卷积神经网络&#xff08;CNN, Convolutional Neural Networks&#xff09;是深度学习中最重要的模型之一&#xff0c;广泛应用于计算机视觉、目标检测、语义分割等任务。自 LeNet 诞生以来&#xff0c;CNN 结构经历了多个重要发展阶段&#xff0c;出现了许多经典架构&#xff…

【开源代码解读】AI检索系统R1-Searcher通过强化学习RL激励大模型LLM的搜索能力

关于R1-Searcher的报告&#xff1a; 第一章&#xff1a;引言 - AI检索系统的技术演进与R1-Searcher的创新定位 1.1 信息检索技术的范式转移 在数字化时代爆发式增长的数据洪流中&#xff0c;信息检索系统正经历从传统关键词匹配到语义理解驱动的根本性变革。根据IDC的统计…

从0到1入门Docker

一、快速入门 Docker run命令中的常见参数 -d&#xff1a;让容器后台运行--name&#xff1a;给容器命名&#xff08;唯一&#xff09;-e&#xff1a;环境变量-p&#xff1a;宿主机端口映射到容器内端口镜像名称结构&#xff1a;Repository &#xff1a;TAG&#xff08;镜像名&…

接口自动化入门 —— Jmeter实现在接口工具中关联接口处理方案

1. JMeter 接口关联处理的核心概念 接口关联是指在多个接口请求之间共享数据&#xff0c;例如将一个接口的返回值作为另一个接口的输入参数。常见的场景包括&#xff1a; 使用登录接口返回的 Token 作为后续接口的认证信息。 将一个接口返回的 ID 作为另一个接口的请求参数。…

Flink-学习路线

最近想学习一下Flink&#xff0c;公司的实时需求还是不少的&#xff0c;因此结合ai整理了一份学习路线&#xff0c;记录一下。 当然&#xff0c;公司也有Scala版本Flink框架&#xff0c;也学习了一下。这里只说Java版本 1. Java基础 目标: 掌握Java编程语言的基础知识。 内容…

ranger集成starrock报错

org.apache.ranger.plugin.client.HadoopException: initConnection: Unable to connect to StarRocks instance, please provide valid value of field : {jdbc.driverClassName}.. com.mysql.cj.jdbc.Driver. 可能的原因 JDBC 驱动缺失&#xff1a;运行环境中没有安装 MySQL …

python Jsonpath表达式语法取值

python Jsonpath 语法规则&#xff1a; 演示数据&#xff1a;{"status":"0","msg":"成功","data": [ {"foo1": "bar1"},{"foo1": "bar2"}]} 根节点&#xff1a;$ $.status $.…

Blender-MCP服务源码2-依赖分析

Blender-MCP服务源码2-依赖分析 有个大佬做了一个Blender-MCP源码&#xff0c;第一次提交代码是【2025年3月7号】今天是【2025年月15日】也就是刚过去一周的时间&#xff0c;所以想从0开始学习这个代码&#xff0c;了解一下大佬们的开发思路 1-核心知识点 from mcp.server.fas…