爆肝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");

        // 获取所有的key
        Set<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");

        // 删除指定的key
        Long 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 {

    @Autowired
    private 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 实现动态渲染图标教程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

B203-若依框架应用

目录 简介版本RuoYi-fast项目准备新增模块/代码生成 简介 基于SpringBoot的权限管理系统&#xff0c;基于SpringBoot开发的轻量级Java快速开发框架 版本 前后端未分离单应用版本&#xff1a;RuoYi-fast&#xff0c;前后端未分离多模块版本&#xff1a;RuoYi 前后端分离单应用…

06节-51单片机-LCD1602调试工具

欢迎订阅专栏&#xff0c;持续为您更新&#xff01; 1.LCD1602调试工具 使用LCD1602液晶屏作为调试窗口&#xff0c;提供类似printf函数的功能&#xff0c;可实时观察单片机内部数据的变换情况&#xff0c;便于调试和演示。 本文提供的LCD1602代码属于模块化的代码&#xff…

Java如何用EasyExcel插件对Excel进行数据导入和数据导出

文章目录 一、EasyExcel的示例导入依赖创建实体类数据导入和导出 二、EasyExcel的作用三、EasyExcel的注解 EasyExcel是一个阿里巴巴开源的excel处理框架&#xff0c;它以使用简单、节省内存著称。在解析Excel时&#xff0c;EasyExcel没有将文件数据一次性全部加载到内存中&…

如果补货机器人也开始搬砖

过去几年&#xff0c;如果一位顾客的欲购商品疑似缺货&#xff0c;“请稍等&#xff0c;我去后台查一下”便是最常听到的一句话。随着过去几年劳动力短缺的加剧&#xff0c;货架并不总像许多人习惯的那样满满当当。为减轻不断补货的负担&#xff0c;使员工可以将精力集中于其他…

【AI工具】AI一键生成思维导图

ChatMind 被 Xmind 收购之后&#xff08;即那个 00 后团队&#xff09;&#xff0c;将重点聚焦于海外市场&#xff0c;国内职场用户可对其予以关注&#xff0c;用户体验着实不错&#xff08;我认为 AI 生成思维导图&#xff0c;其关键点在于交互与 UI&#xff09;&#xff1a; …

05节-51单片机-模块化编程

1.两种编程方式的对比 传统方式编程&#xff1a; 所有的函数均放在main.c里&#xff0c;若使用的模块比较多&#xff0c;则一个文件内会有很多的代码&#xff0c;不利于代码的组织和管理&#xff0c;而且很影响编程者的思路 模块化编程&#xff1a; 把各个模块的代码放在不同的…

【javaWeb 第七篇】后端-Spring

Spring SpringspringBoot请求简单参数实体参数数组集合参数日期参数JSON参数路径参数 响应数据分层解耦三层架构解耦操作Bean的声明Bean组件扫描问题DI详解 Spring 详细介绍结合官网查看&#xff1a;https://spring.io/why-spring Spring发展到今天已经形成一种开发生态圈&…

浅谈CAP原则

CAP原则&#xff0c;全称Consistency&#xff08;一致性&#xff09;、Availability&#xff08;可用性&#xff09;、Partition Tolerance&#xff08;分区容错性&#xff09;原则&#xff0c;是分布式系统设计中一个经典的理论。它指出在分布式系统中&#xff0c;任何系统都无…

基于HEC-RAS数值模拟与GIS水文分析技术的洪水危险性及风险评估实践应用

气候变化背景下&#xff0c;极端天气导致的洪水事件将更加频发。快速城市化对流域下垫面的改变&#xff0c;及人类活动向洪泛区的扩张。二者共同使得全世界多数人类活动高度聚集区的洪水风险增加。洪水淹没危险性&#xff08;各种年遇型洪水淹没&#xff09;是洪水损失评估、风…

UPnP是什么?有什么更好的连接方案?快解析内网穿透

一、UPnP是什么 有些小伙伴对于UPnP并不了解&#xff0c;其实UPnP只是一种网络协议&#xff0c;主要作用就是简化家庭和企业网络中设备之间的连接和通信过程&#xff0c;它的主要目标是实现网络的无缝连接&#xff0c;并简化相关网络操作。 二、UPnP有什么主要作用&#xff1…

012Node.js自定义模块文件名不是index.js引入的方法

nodejs默认会找node_modules对应模块db里的index.js //var dbrequire(db) //错误&#xff0c;因为nodejs默认会找node_modules对应模块db里的index.jsvar dbrequire(db); //没有错误&#xff0c;是因为在DB目录的CMD下执行了npm init --yes&#xff0c;生成了package.json文…

24年重庆三支一扶报名个人信息如何填写?

⏰报名时间&#xff1a;2024年4月15日上午9:00至4月19日上午9:00 &#x1f535;报名路径&#xff1a;重庆人力资源和社会保障局官网——首页下方找到 “我要办”——点击进入 【人事考试网上报名】板块。 &#x1f447;&#x1f3fb;开始报名&#xff0c;个人信息填写模板有&am…

企业微信主体的修改方法

企业微信变更主体有什么作用&#xff1f;当我们的企业因为各种原因需要注销或已经注销&#xff0c;或者运营变更等情况&#xff0c;企业微信无法继续使用原主体继续使用时&#xff0c;可以申请企业主体变更&#xff0c;变更为新的主体。企业微信变更主体的条件有哪些&#xff1…

嵌入式第四天:(C语言入门)

目录 什么是数组&#xff1f; 数组&#xff1a; 数组的使用&#xff1a; 数组的初始化&#xff1a; 数组名&#xff1a; 数组案例&#xff1a; 一维数组的最大值&#xff1a; 一维数组的逆置&#xff1a; 数组和指针&#xff1a; 通过指针操作数组元素&#xff1a; …

【笔记】ASP.NET Core 2.2 Web API —— 学习笔记

当年刚接触 ASP.NET Core 2.2 时&#xff0c;留下的学习笔记。现在把它挪到 CSDN&#xff0c;也是对过去学习 ASP.NET Core 痕迹进行记录。 VS 2019 ASP.NET Core 2.2 sqlSugarCore (ORM) 1. 仓储模式 服务 抽象接口 1.1 新建asp.net core 2.2 WebApi项目 nmmking.Core.…

安全中级-环境安装(手动nginx以及自动安装php,mysql)

为了方便大家跟bilibili课程&#xff0c;出了第一节环境 bilibili搜凌晨五点的星可以观看相关的教程 一、环境 ubentu 二、nginx手动安装 2.1第一步 wget https://nginx.org/download/nginx-1.24.0.tar.gz 2.2下载好安装包以后解压 tar -zxvf nginx-1.21.6.tar.gz2.3安…

CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀)

CTFHUB-技能树-Web前置技能-文件上传&#xff08;前端验证—MIME绕过、00截断、00截断-双写后缀&#xff09; 文章目录 CTFHUB-技能树-Web前置技能-文件上传&#xff08;前端验证—MIME绕过、00截断、00截断-双写后缀&#xff09;前端验证—MIME绕过有关MIMEMIME的作用 解题时有…

【学习笔记】Vue3源码解析:第四部分- runtime-dom(1)

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第四部分-&#xff1a;&#xff08;对应课程的第24-26节&#xff09; 第24节&#xff1a;《理解runtime-dom的作用》 源码中除了 dep.ts &#xff0c;其余基…

设计模式——备忘录模式18

备忘录模式将创建状态快照 /备份的工作委派给实际状态的拥有者 &#xff08;Originator&#xff09; 对象。 这样其他对象就不再需要从 “外部” 复制文件状态了&#xff0c; 拥有者拥有其文件状态的完全访问权&#xff0c; 因此可以自行生成快照。 设计模式&#xff0c;一定要…

Linux-时间同步服务器

1. (问答题) 一.配置server主机要求如下&#xff1a; 1.server主机的主机名称为 ntp_server.example.com 编写脚本文件 #!/bin/bash hostnamectl hostname ntp_server.example.com cd /etc/NetworkManager/system-connections/ rm -fr * cat > eth0.nmconnection <&…