爆肝3k字!掌握Spring与Redis的高效交互:从Jedis到Spring Data Redis

🌟 前言

欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍

  • 🤖 洛可可白:个人主页

  • 🔥 个人专栏:✅前端技术 ✅后端技术

  • 🏠 个人博客:洛可可白博客

  • 🐱 代码获取:bestwishes0203

  • 📷 封面壁纸:洛可可白wallpaper

在这里插入图片描述

文章目录

  • 爆肝3k字!掌握Spring与Redis的高效交互:从Jedis到Spring Data Redis
    • Spring中通过Jedis操作Redis数据库的实践指南
      • 环境准备
      • 引入依赖
      • 编写代码
      • 代码解析
    • Spring中通过JedisPool高效操作Redis数据库的实践指南
      • 引入依赖
      • 编写代码
      • 代码解析
    • Spring Boot中使用Spring Data Redis操作数据库的实践指南
      • 环境准备
      • 引入依赖
      • 编写代码
      • 代码解析
    • 🎉 往期精彩回顾

爆肝3k字!掌握Spring与Redis的高效交互:从Jedis到Spring Data Redis

Redis以其卓越的性能和多功能性成为了不可或缺的组件。本文将深入探讨如何在Spring框架中通过Jedis和JedisPool直接操作Redis,以及如何利用Spring Data Redis简化数据交互过程。我们将从环境搭建开始,逐步介绍依赖引入、代码编写、功能实现,最终通过实例展示如何在Spring Boot应用中高效地使用Redis。无论你是初学者还是有经验的开发者,本文都将为你提供有价值的见解和实用的操作指南。

Spring中通过Jedis操作Redis数据库的实践指南

在现代的Web应用开发中,Redis已经成为了一个非常重要的组件,它以其出色的性能、完美的文档、简洁易懂的API和丰富的数据结构支持,被广泛应用于缓存、消息队列、排行榜、实时系统等多个场景。Spring作为Java界最受欢迎的框架之一,与Redis的结合使用自然也成为了开发者们的必备技能。本文将通过一段简单的代码示例,介绍如何在Spring框架中使用Jedis来操作Redis数据库。

环境准备

在开始之前,确保你的开发环境中已经安装了以下组件:

  • Java开发环境(JDK)
  • Maven或Gradle(用于依赖管理)
  • Redis服务端(可以从官网下载并自行搭建,也可以使用在线的Redis服务)
  • Spring Boot(简化Spring应用的搭建和配置)

引入依赖

在Spring Boot项目中,我们通常会使用Maven或Gradle来管理项目的依赖。为了使用Jedis,我们需要在项目的pom.xml(Maven)或build.gradle(Gradle)文件中添加以下依赖:

Maven:

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

Gradle:

implementation 'redis.clients:jedis:3.6.0'

请将最新版本号替换为当前Jedis的最新版本。

编写代码

以下是一个简单的Spring Boot控制器示例,展示了如何在一个GET请求中使用Jedis来操作Redis。

package com.example.springredis.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;import java.util.Set;@RestController
public class RedisController {@GetMapping("test01")public void test01() {// 连接到Redis服务Jedis jedis = new Jedis("127.0.0.1", 6379);// 如果你的Redis设置了密码,需要进行认证jedis.auth("yourPasswordHere");// 获取所有的keySet<String> keys = jedis.keys("*");keys.forEach(System.out::println);// 向Redis中添加几个key-value对jedis.set("k1", "v1");jedis.set("k2", "v2");jedis.set("k3", "v3");jedis.set("k4", "v4");jedis.set("k5", "v5");// 删除指定的keyLong c = jedis.del("k1", "k2", "k5");System.out.println("删除key的个数: " + c);// 判断指定的key是否存在Boolean exists = jedis.exists("k2");System.out.println("判断key是否存在: " + exists);// 关闭资源jedis.close();}
}

代码解析

在这段代码中,我们首先创建了一个Jedis对象来连接到Redis服务。默认情况下,Jedis会尝试连接到127.0.0.1上的6379端口,这也是Redis的默认配置。如果你的Redis服务运行在不同的主机或端口上,你需要在构造Jedis对象时提供相应的参数。

接着,我们使用auth方法对Redis进行了认证,这一步仅在Redis设置了密码的情况下需要。

然后,我们使用keys方法获取了所有的key,并打印了出来。之后,我们通过set方法向Redis中添加了几个key-value对。

为了展示如何管理key,我们还演示了如何删除指定的key(使用del方法),以及如何检查一个key是否存在(使用exists方法)。

最后,我们关闭了Jedis对象,释放了与之相关的资源。

Spring中通过JedisPool高效操作Redis数据库的实践指南

在上一篇关于Spring通过Jedis操作Redis的文章中,我们了解了如何使用Jedis来执行基本的Redis操作。然而,在高并发的场景下,频繁地创建和销毁Jedis连接会导致性能问题。为了解决这一问题,Jedis提供了连接池的实现——JedisPool,它能够有效地管理Jedis连接,提高资源利用率和操作效率。本文将通过一个简单的Spring Boot控制器示例,介绍如何在Spring框架中使用JedisPool来高效操作Redis数据库。

引入依赖

首先,确保你的项目中已经引入了Jedis的依赖,如前文所述,在pom.xmlbuild.gradle中添加以下依赖:

Maven:

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

Gradle:

implementation 'redis.clients:jedis:3.6.0'

请将最新版本号替换为当前Jedis的最新版本。

编写代码

以下是一个Spring Boot控制器的示例,展示了如何使用JedisPool来操作Redis。

package com.example.springredis.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;import java.util.List;
import java.util.Map;
import java.util.Set;@RestController
public class RedisPoolController {@GetMapping("test04")public void test04() {// 创建连接池的配置类JedisPoolConfig config = new JedisPoolConfig();config.setMinIdle(5); // 设置空闲的个数config.setMaxIdle(10);config.setMaxTotal(2000); // 设置最多的数量config.setMaxWaitMillis(6000); // 设置最大的等待时长config.setTestOnBorrow(true); // 是否检验池子中的jedis对象可用// 创建jedis连接池对象JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1000, "rootXH");// 通过池子获取其中的一个连接Jedis jedis = null;try {jedis = jedisPool.getResource();// 执行Redis操作Map<String, String> map1 = jedis.hgetAll("myhash");System.out.println("获取指定key对应的内容: " + map1);} finally {// 关闭Jedis连接if (jedis != null) {jedis.close();}}}
}

代码解析

在这段代码中,我们首先创建了一个JedisPoolConfig对象,用于配置连接池的参数。我们设置了最小空闲连接数、最大空闲连接数、最大连接数、最大等待时长以及是否在借用连接时进行有效性检查。

接着,我们使用JedisPool构造函数创建了一个连接池对象。这里的参数包括配置类、Redis服务器的IP地址、端口号、超时时间和密码。请根据你的Redis服务器实际情况进行相应的修改。

然后,我们通过getResource方法从连接池中获取了一个Jedis实例。在这个实例上,我们可以执行各种Redis操作,例如本例中的hgetAll方法,它用于获取指定key对应的哈希表中的所有字段和值。

最后,我们使用finally块确保Jedis连接被正确关闭,无论操作是否成功。这是一个非常重要的步骤,因为它可以避免连接泄露和其他潜在的资源问题。

Spring Boot中使用Spring Data Redis操作数据库的实践指南

在现代的Web应用开发中,Redis已经成为了一个非常重要的组件,它以其出色的性能、完美的文档、简洁易懂的API和丰富的数据结构支持,被广泛应用于缓存、消息队列、排行榜、实时系统等多个场景。Spring Data Redis是Spring提供的一个简化Redis操作的框架,它使得我们可以更加便捷地在Spring应用中使用Redis。本文将通过一个Spring Boot控制器示例,介绍如何使用Spring Data Redis来操作Redis数据库。

环境准备

在开始之前,确保你的开发环境中已经安装了以下组件:

  • Java开发环境(JDK)
  • Maven或Gradle(用于依赖管理)
  • Redis服务端(可以从官网下载并自行搭建,也可以使用在线的Redis服务)
  • Spring Boot(简化Spring应用的搭建和配置)

引入依赖

在Spring Boot项目中,我们通常会使用Maven或Gradle来管理项目的依赖。为了使用Spring Data Redis,我们需要在项目的pom.xml(Maven)或build.gradle(Gradle)文件中添加以下依赖:

Maven:

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

Gradle:

implementation 'org.springframework.boot:spring-boot-starter-data-redis'

编写代码

以下是一个Spring Boot控制器的示例,展示了如何使用Spring Data Redis来操作Redis。

package com.example.springredis.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class RedisDataController {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@GetMapping("test05")public void test05() {// 获取对string类型操作的类对象ValueOperations<String, String> forValue = stringRedisTemplate.opsForValue();// 设置键值对forValue.set("n1", "测试数据1");forValue.set("n2", "2");forValue.set("n3", "测试数据3");// 如果存在 则不存入 不存在则存入Boolean aBoolean = forValue.setIfAbsent("n4", "测试数据4", 25, TimeUnit.SECONDS);System.out.println("是否存入成功 " + aBoolean);// 获取对应的值String n1 = forValue.get("n1");System.out.println("n1 = " + n1);// 递增操作Long n2 = forValue.increment("n2");System.out.println("n2递增后的值 " + n2);}
}

代码解析

在这段代码中,我们首先通过@Autowired注解自动注入了一个StringRedisTemplate对象。StringRedisTemplate是Spring Data Redis提供的一个类,它封装了对字符串类型数据的操作。

接着,我们通过opsForValue方法获取了一个ValueOperations对象,它提供了对Redis中的字符串类型数据进行操作的方法。

我们使用set方法设置了三个键值对。然后,我们使用setIfAbsent方法尝试设置一个新的键值对,但仅当指定的key不存在时才进行设置。这个方法非常有用,当我们想要保证某个键值对的唯一性时。

之后,我们通过get方法获取了一个已经设置的键对应的值,并打印了出来。

最后,我们使用increment方法对一个键对应的值进行了递增操作。这个方法可以接受一个可选的增量参数,如果不指定,则默认递增1。

如果对你有帮助,点赞👍、收藏💖、关注🔔是我更新的动力!👋🌟🚀

🎉 往期精彩回顾

Vue项目实战:基于用户身份的动态路由管理
Vite多环境配置与打包:灵活高效的Vue开发工作流
前端实现自动获取农历日期:探索JavaScript的跨文化编程
自定义滚动条样式:前端实现跨浏览器兼容
Windows Edge 兼容性问题修复:提升用户体验的关键步骤
Vue2和Vue3组件通信:父子与兄弟间的桥梁
无缝集成:使用Spring Boot和Vue实现头像上传与回显功能
前端开发全景指南:语言与框架的精粹
C语言开发实战:使用EasyX在Visual Studio 2022中创建井字棋游戏
前端与后端协同:实现Excel导入导出功能
Java日期格式化:掌握时间的艺术
正则表达式完全指南:语法、用法及JavaScript实例
正则表达式与JSON序列化:去除JavaScript对象中的下划线键名
探索async/await的魔力:简化JavaScript异步编程
JavaScript日期格式化:从原始值到用户友好的字符串
入门教程:Windows搭建C语言和EasyX开发环境
CentOS系统下Docker的安装教程
Spring Boot单元测试全指南:使用Mockito和AssertJ
Yarn简介及Windows安装与使用指南
H5实现3D旋转照片墙教程
Element-Plus 实现动态渲染图标教程

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

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

相关文章

数字孪生技术的应用场景

数字孪生技术是一种新兴技术&#xff0c;具有广阔的应用前景。目前&#xff0c;数字孪生技术已经在以下几个领域得到了广泛应用。数字孪生技术是一种具有革命性的技术&#xff0c;它将深刻改变我们的生活和工作方式。随着数字孪生技术的不断发展&#xff0c;我们可以期待在未来…

Javascript中的this关键字指向,2024年最新阿里前端开发面试解答

先自我介绍一下&#xff0c;小编浙江大学毕业&#xff0c;去过华为、字节跳动等大厂&#xff0c;目前阿里P7 深知大多数程序员&#xff0c;想要提升技能&#xff0c;往往是自己摸索成长&#xff0c;但自己不成体系的自学效果低效又漫长&#xff0c;而且极易碰到天花板技术停滞…

【C++】适配器· 优先级队列 仿函数 反向迭代器

目录 适配器&#xff1a;适配器的应用&#xff1a;1. 优先级队列&#xff1a;仿函数&#xff1a;更深入的了解仿函数&#xff1a;一个关于不容易被注意的知识点&#xff1a; 2. 反向迭代器&#xff1a;&#xff08;list为例&#xff09; 适配器&#xff1a; 我们先来谈来一下容…

设计模式——2_9 模版方法(Template Method)

人们往往把任性也叫做自由&#xff0c;但是任性只是非理性的自由&#xff0c;人性的选择和自决都不是出于意志的理性&#xff0c;而是出于偶然的动机以及这种动机对感性外在世界的依赖 ——黑格尔 文章目录 定义图纸一个例子&#xff1a;从文件中获取信息分几步&#xff1f;Rea…

Adobe AE(After Effects)2017下载地址及安装教程

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件&#xff0c;由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能&#xff0c;可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…

MapReduce 机理

1.hadoop 平台进程 Namenode进程: 管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个&#xff0c;分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log)&#xff…

vscode编译c++报错解决方案

1&#xff0c;xxxx cl.exe 一大串什么非程序员的(应该是这些&#xff09;,就是看一些谁的&#xff0c;调用了Visual Studio的编译软件去运行。建议&#xff0c;不要这样搞。 解决方案1&#xff1a;每次用就看这个文章&#xff08;个人觉得很麻烦&#xff09;&#xff1a;仅当…

java正则表达式教程

什么是正则表达式&#xff1a; 正则表达式是一种用来描述字符串模式的语法。在 Java 中&#xff0c;正则表达式通常是一个字符串&#xff0c;它由普通字符&#xff08;例如字母、数字、标点符号等&#xff09;和特殊字符&#xff08;称为元字符&#xff09;组成。这些特殊字符可…

NLP基础—jieba分词

jieba分词 支持四种分词模式 精确模式 试图将句子最精确地切开,适合文本分析;全模式 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;搜索引擎模式 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。paddle模式 利用Paddle…

WARNING: No swap limit support——查看docker状态时提示警告

环境&#xff1a;Ubuntu 20.04 1、警告详情 执行命令 service docker status如下图 2、解决办法 2.1 修改文件 执行命令 vim /etc/default/grub在GRUB_CMDLINE_LINUX中追加cgroup_enablememory swapaccount1&#xff0c;如下&#xff1a; # If you change this file…

elmentui树形表格使用Sortable拖拽展开行时拖拽bug

1、使用elemntui的el-table使用Sortable进行拖拽&#xff0c;如下 const el this.$el.querySelector(.el-table__body-wrapper tbody) Sortable.create(el, {onEnd: (event) > {const { oldIndex, newIndex } event//拿到更新前后的下标即可完成数据的更新} })2、但是我这…

分析ARP解析过程

1、实验环境 主机A和主机B连接到交换机&#xff0c;并与一台路由器互连&#xff0c;如图7.17所示&#xff0c;路由器充当网关。 图7.17 实验案例一示意图 2、需求描述 查看 ARP 相关信息,熟悉在PC 和 Cisco 设备上的常用命令,设置主机A和主机B为同一个网段网关设置为路由接…