SpringBoot连接Redis

SpringBoot连接Redis

  • 一、前言
    • 1. 添加 Redis 相关依赖
    • 2. 配置 Redis 连接信息
    • 3. 使用 RedisTemplate 进行操作
    • 4. 使用 RedisRepository 进行操作(可选)
    • 5. 启动应用程序
    • 6. 测试


一、前言

连接 Redis 到 Spring Boot 可以通过以下步骤完成:

1. 添加 Redis 相关依赖

pom.xml 文件中添加 Redis 相关的依赖项,如果你使用 Maven,可以添加如下依赖:

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

这个依赖包含了 Spring Boot 对 Redis 的自动配置和必要的依赖项。

2. 配置 Redis 连接信息

application.propertiesapplication.yml 中配置 Redis 的连接信息。以下是一个简单的示例:

使用 application.properties 配置文件:

# Redis connection configuration
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=your_redis_password

使用 application.yml 配置文件:

# Redis connection configuration
spring:redis:host: localhostport: 6379password: your_redis_password

根据你的实际情况修改 host(主机名或 IP 地址)、port(端口号)和 password(如果有密码的话)。如果 Redis 在本地运行,并且没有设置密码,可以省略 spring.redis.password

3. 使用 RedisTemplate 进行操作

在 Spring Boot 中,可以使用 RedisTemplate 来执行 Redis 操作。在你的服务类或控制器中注入 RedisTemplate,然后使用它来操作 Redis 数据。

例如,创建一个 Redis 服务类:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, String> redisTemplate;// 设置键值对public void setValue(String key, String value) {redisTemplate.opsForValue().set(key, value);}// 设置键值对,并指定过期时间public void setValueWithExpire(String key, String value, long timeout, TimeUnit unit) {redisTemplate.opsForValue().set(key, value, timeout, unit);}// 获取键对应的值public String getValue(String key) {return redisTemplate.opsForValue().get(key);}// 删除指定的键public Boolean deleteKey(String key) {return redisTemplate.delete(key);}// 检查键是否存在public Boolean keyExists(String key) {return redisTemplate.hasKey(key);}// 设置键的过期时间public Boolean expireKey(String key, long timeout, TimeUnit unit) {return redisTemplate.expire(key, timeout, unit);}// 获取键的剩余过期时间(单位:秒)public Long getKeyExpire(String key) {return redisTemplate.getExpire(key, TimeUnit.SECONDS);}// 自增操作public Long increment(String key, long delta) {return redisTemplate.opsForValue().increment(key, delta);}// 自减操作public Long decrement(String key, long delta) {return redisTemplate.opsForValue().increment(key, -delta);}// 如果键不存在则设置值,返回是否设置成功public Boolean setValueIfAbsent(String key, String value) {return redisTemplate.opsForValue().setIfAbsent(key, value);}// 获取指定范围内的字符串public String getRange(String key, long start, long end) {return redisTemplate.opsForValue().get(key, start, end);}// 追加字符串到键上的已有值的末尾public Integer append(String key, String value) {return redisTemplate.opsForValue().append(key, value);}// 删除指定键的指定范围内的值public Boolean deleteRange(String key, long start, long end) {redisTemplate.opsForValue().set(key, "", start, end);return true;}// 获取并设置指定键的值public String getAndSet(String key, String value) {return redisTemplate.opsForValue().getAndSet(key, value);}// 在列表头部插入值public Long leftPush(String key, String value) {return redisTemplate.opsForList().leftPush(key, value);}// 在列表尾部插入值public Long rightPush(String key, String value) {return redisTemplate.opsForList().rightPush(key, value);}// 获取列表范围内的值public java.util.List<String> getList(String key, long start, long end) {return redisTemplate.opsForList().range(key, start, end);}// 在集合中添加成员public Long addToSet(String key, String... values) {return redisTemplate.opsForSet().add(key, values);}// 获取集合中的所有成员public java.util.Set<String> getSet(String key) {return redisTemplate.opsForSet().members(key);}// 在有序集合中添加成员public Boolean addToZSet(String key, String value, double score) {return redisTemplate.opsForZSet().add(key, value, score);}// 获取有序集合中指定范围内的成员public java.util.Set<String> getRangeByScore(String key, double min, double max) {return redisTemplate.opsForZSet().rangeByScore(key, min, max);}// 删除有序集合中的成员public Long removeFromZSet(String key, String... values) {return redisTemplate.opsForZSet().remove(key, values);}
}

在上面的示例中,我们注入了 RedisTemplate,并定义了 setValuegetValue 方法来设置和获取 Redis 中的键值对。

4. 使用 RedisRepository 进行操作(可选)

如果你喜欢使用 Repository 接口来操作 Redis,可以创建一个继承自 RedisRepository 的接口。例如:

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;@Repository
public interface MyRedisRepository extends CrudRepository<MyObject, String> {// 可以添加自定义的操作方法
}

在这个接口中,MyObject 是你的 Redis 对象类型,它必须包含一个标识字段(通常是 String 类型的 id)。

5. 启动应用程序

启动你的 Spring Boot 应用程序,Spring Boot 将根据你的配置连接到 Redis,并使用 RedisTemplateRedisRepository 进行操作。

通过以上步骤,你可以在 Spring Boot 应用程序中成功连接并操作 Redis 数据库。

6. 测试

    @Autowiredprivate RedisService redisService;@Testvoid contextLoads35(){redisService.setValueWithExpire("name","测试", 5,TimeUnit.SECONDS);String name = redisService.getValue("name");System.out.println(name);}

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

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

相关文章

【五】架构设计之思考路线

架构设计之思考路线 概述 看过不少本架构设计方面的书籍&#xff0c;如《亿级流量网站架构核心技术》《超大流量分布式系统架构解决方案》《企业IT架构转型之道》《从程序员到架构师》等&#xff0c;看完之后最终发现架构设计思维大同小异&#xff0c;无非都是围绕实现三高&…

【总结】前端JQuery获取Java后端文件流实现常规附件预览功能

前端JQuery获取Java后端文件流实现常规附件预览功能 项目背景1. Java后端处理附件1.1 将word文档转换为pdf格式1.2 将文件流返回前端 2. 前端处理附件预览&#xff08;JQuery&#xff09;2.1 预览pdf文件2.2 预览ofd文件2.3 预览图片、txt文档 共勉。 项目背景 目前维护的项目…

学习Java的日子 Day56 数据库连接池,Druid连接池

Day56 1.数据库连接池 理解&#xff1a;池就是容器&#xff0c;容器中存放了多个连接对象 使用原因&#xff1a; 1.优化创建和销毁连接的时间&#xff08;在项目启动时创建连接池&#xff0c;项目销毁时关闭连接池&#xff09; 2.提高连接对象的复用率 3.有效控制项目中连接的…

Windows下Pytorch入门深度学习环境安装与配置(CPU版本)

Windows下Pytorch入门深度学习环境安装与配置&#xff08;CPU版本&#xff09; 一、安装过程中各个软件的作用&#xff08;一&#xff09;Python&#xff08;二&#xff09;库 / 包 / package / library&#xff08;三&#xff09;PyTorch / Tensorflow&#xff08;四&#xff…

Java之开发 系统设计 分布式 高性能 高可用

1、restful api 基于rest构建的api 规范&#xff1a; post delete put get 增删改查路径 接口命名 过滤信息状态码 2、软件开发流程 3、命名规范 类名&#xff1a;大驼峰方法名&#xff1a;小驼峰成员变量、局部变量&#xff1a;小驼峰测试方法名&#xff1a;蛇形命名 下划…

【Sass】常用全局sass高级函数,可使用原子化CSS减轻代码量,方便快速开发

文章目录 前言一、安装二、样式custom.scssflex.scsscolor.scssmargin-padding.scssorther 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 针对style的预编译器为scss 转载自git前端知识库 原博主是B站up程序员郑清&#xff0c;可以看他的v3教程…

【云原生】Docker搭建知识库文档协作平台Confluence

目录 一、前言 二、企业级知识库文档工具部署形式 2.1 开源工具平台 2.1.1 开源工具优点 2.1.2 开源工具缺点 2.2 私有化部署 2.3 混合部署 三、如何选择合适的知识库平台工具 3.1 明确目标和需求 3.2 选择合适的知识库平台工具 四、Confluence介绍 4.2 confluence特…

平面点云三角化边数与点的关系

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 点云三角化定义 原文 说人话&#xff1a; 一个二维平面点集P三角化结果是一个满足以下条件的三角形集合&#xff1a; 1 所有三角形的并集刚好是P的凸包。 2 所有三角…

python3GUI--new音乐播放器!By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示1.启动2.MV推荐3.专辑详情页4.歌手详情页5.搜索结果页6.歌曲播放页7.我喜欢歌曲页8.我喜欢专辑页 三&#xff0e;思路&启发1.布局2.细节3.组件复用4.项目结构5.优化速度1.Nuitka1.显著提高性能&#xff1a;2.减小程序体积&am…

Java集合框架2024最通俗易懂(图片超全)

集合 1.1、定义 集合就是类型统一的数据组合而成的数据结构&#xff0c;该数据结构可以任意的改变长度。 1.3、Set Set数据存储结构&#xff0c;无序&#xff0c;且不可以重复&#xff0c;元素可以为null&#xff0c;但是也只能出现一次&#xff0c;如下图: 1.3.1、HashSe…

WEB渗透Web突破篇-SQL注入(Oracle)

版本 SELECT user FROM dual UNION SELECT * FROM v$version数据库名 SELECT global_name FROM global_name; SELECT name FROM V$DATABASE; SELECT instance_name FROM V$INSTANCE; SELECT SYS.DATABASE_NAME FROM DUAL;列库 SELECT DISTINCT owner FROM all_tables;列表 …

rag输出了幻觉怎么办

首先&#xff0c;幻觉也分类型。 一个是事实性幻觉&#xff0c;就是LLM凭借自身能力回答问题&#xff0c;但是这个回答是编的&#xff0c;也可能有正确答案但是LLM输出错了。总之这是LLM自身原因。 另一个是忠实性幻觉&#xff0c;就是你要求LLM根据你给的材料给出答案&#xf…

Scikit-learn提供了哪些机器学习算法以及如何使用Scikit-learn进行模型训练和评估

Scikit-learn库的使用 一、Scikit-learn提供的机器学习算法 Scikit-learn&#xff08;通常简称为sklearn&#xff09;是一个广泛使用的Python机器学习库&#xff0c;它提供了多种用于数据挖掘和数据分析的算法。Scikit-learn支持的机器学习算法可以大致分为以下几类&#xff…

[240726] Mistral AI 发布新一代旗舰模型 | Node.js 合并 TypeScript 文件执行提案

目录 Mistral AI 发布新一代旗舰模型&#xff1a;Mistral Large 2Node.js 合并 TypeScript 文件执行提案&#xff1a;--experimental-strip-types Mistral AI 发布新一代旗舰模型&#xff1a;Mistral Large 2 Mistral AI 宣布推出新一代旗舰模型 Mistral Large 2&#xff0c;该…

算法-----递归~~搜索~~回溯(宏观认识)

目录 1.什么是递归 1.1二叉树的遍历 1.2快速排序 1.3归并排序 2.为什么会用到递归 3.如何理解递归 4.如何写好一个递归 5.什么是搜索 5.1深度&#xff08;dfs&#xff09;优先遍历&优先搜索 5.2宽度&#xff08;bfs&#xff09;优先遍历&优先搜索 6.回溯 1.什…

Temu测评自养号如何做?三分钟带你入门!

环境系统 现在市场上很多的系统都是现成的或软件包&#xff0c;没有解决风控的能力&#xff0c;如果有需要建议大家自己学习一套技术&#xff0c;把技术掌握在自己手里&#xff0c;这样不会有依赖性 手机端环境:越狱后的ios指定版本手机可以一键新机的系统(参数调试)独享的家…

梧桐数据库:子查询优化技术

在数据库技术中&#xff0c;子查询是一个强大的工具&#xff0c;但不加优化的子查询可能会导致性能问题。优化子查询可以显著提升查询效率。以下是一些常见的子查询优化技术&#xff1a; 1. 使用连接&#xff08;JOIN&#xff09;替代子查询 1.1 基本原理 很多情况下&#x…

【NLP自然语言处理】为什么说BERT是bidirectional

首先&#xff0c;来看一下Transformer架构图&#xff1a; 我们知道&#xff0c;Bert设计时主要采用的是Transformer编码器部分&#xff0c;要论述Bert为啥是双向的&#xff0c;我想从编码器和解码器的注意力机制来阐述。 在看这篇博客前&#xff0c;需要对Transformer有一定的…

[C++] vector入门迭代器失效问题详解

文章目录 vector介绍**vector iterator 的使用** vector迭代器失效问题由扩容或改变数据引起的迭代器失效reserve的实现&#xff08;野指针&#xff09;insert实现&#xff08;迭代器位置意义改变&#xff09;insert修改后失效的迭代器 it迭代器失效 erase后的问题总结&#xf…

nextjs当后端使-读取excel文件

目前nextjs有种php的感觉&#xff0c;现在的需求是读取excel文件&#xff0c;入数据库&#xff0c;拆分出读取excel的代码如下&#xff1a; import { NextRequest } from "next/server"; import { join } from "path"; import { readFile } from "fs…