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

redis的三种客户端

在 Redis 中,常用的 Java 客户端有三种:JedisLettuceRedisson。它们各有特点,适用于不同的场景。以下是它们的详细介绍,以及如何在 Spring Boot 中集成 Redis。


一、Redis 三种常用客户端详解

1.1 Jedis

Jedis 是 Redis 官方推荐的 Java 客户端,采用同步、阻塞的 I/O 模型。它简单易用,提供了丰富的 Redis API 支持,并支持连接池。

  • 特点

    • 同步阻塞:所有 Redis 操作都是同步执行的,当前线程会等待操作完成。
    • 多线程支持:Jedis 需要为每个线程创建独立的 Jedis 实例(连接),可以使用连接池来管理这些连接。
    • 高性能:Jedis 性能优异,但需要注意连接池的配置,以免连接耗尽。
  • 适用场景:适合简单的同步操作,适用于较小的并发量下进行同步阻塞的 Redis 操作。

1.2 Lettuce

Lettuce 是一个基于 Netty 的 Redis 客户端,支持异步和同步操作,连接默认是线程安全的。Lettuce 在 Spring Boot 的 Redis 自动配置中默认集成。

  • 特点

    • 支持异步、同步和响应式操作:Lettuce 支持 Future 异步调用,还可以与 Reactor 框架集成实现响应式操作。
    • 线程安全:默认单实例即可支持多线程访问,无需连接池。
    • 基于 Netty:Lettuce 具有较好的性能和资源利用率,适合高并发和低延迟场景。
  • 适用场景:适合高并发场景下的异步处理,尤其在 Spring Boot 中作为默认选择。

1.3 Redisson

Redisson 是一个功能丰富的 Redis 客户端库,主要用于构建分布式系统,它提供了丰富的分布式工具,例如分布式锁、分布式集合、分布式队列等。

  • 特点

    • 支持分布式对象和服务:Redisson 提供了分布式锁、队列、集合、信号量等分布式工具,简化了在分布式系统中使用 Redis 的实现。
    • 简单易用的 API:Redisson 提供了许多基于 Java 原生集合的接口。
    • 可扩展性强:支持 Redis Cluster 和 Redis Sentinel,实现高可用和高扩展性。
  • 适用场景:适合构建分布式系统,使用分布式锁、分布式缓存和分布式集合等工具的场景。


二、Spring Boot 集成 Redis 客户端

Spring Boot 集成 Redis 非常简单,以下是如何集成三种不同 Redis 客户端的方法。

2.1 使用 Jedis 客户端集成
  1. 引入依赖

    pom.xml 中引入 spring-boot-starter-data-redis 和 Jedis 依赖:

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.0.1</version> <!-- 版本可能会更新,请选择合适的版本 -->
    </dependency>
    
  2. 配置 Jedis 连接池

    application.yml 中配置 Jedis 连接池:

    spring:redis:host: localhostport: 6379jedis:pool:max-active: 10max-idle: 5min-idle: 1
    
  3. 使用 RedisTemplate

    Spring Boot 会自动配置 RedisTemplate,直接注入使用即可:

    @Service
    public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void setValue(String key, String value) {redisTemplate.opsForValue().set(key, value);}public String getValue(String key) {return (String) redisTemplate.opsForValue().get(key);}
    }
    
2.2 使用 Lettuce 客户端集成(Spring Boot 默认配置)
  1. 引入依赖

    pom.xml 中只需添加 spring-boot-starter-data-redis 依赖,因为它默认使用 Lettuce 作为 Redis 客户端:

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
  2. 配置 Lettuce

    application.yml 中可以简单配置 Redis 信息,Spring Boot 会默认使用 Lettuce:

    spring:redis:host: localhostport: 6379lettuce:pool:max-active: 10max-idle: 5min-idle: 1
    
  3. 使用 RedisTemplate

    使用 RedisTemplate 同样简单:

    @Service
    public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void setValue(String key, String value) {redisTemplate.opsForValue().set(key, value);}public String getValue(String key) {return (String) redisTemplate.opsForValue().get(key);}
    }
    
2.3 使用 Redisson 客户端集成
  1. 引入依赖

    pom.xml 中引入 Redisson 依赖:

    <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.17.5</version> <!-- 版本可能会更新,请选择合适的版本 -->
    </dependency>
    
  2. 配置 Redisson

    application.yml 中添加 Redisson 配置:

    spring:redis:host: localhostport: 6379
    
  3. 定义 Redisson 配置类

    使用 RedissonClient 作为 Bean 注册:

    import org.redisson.api.RedissonClient;
    import org.redisson.config.Config;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;@Configuration
    public class RedissonConfig {@Beanpublic RedissonClient redissonClient() {Config config = new Config();config.useSingleServer().setAddress("redis://localhost:6379").setConnectionPoolSize(10);return Redisson.create(config);}
    }
    
  4. 使用分布式锁示例

    Redisson 提供了丰富的分布式数据结构,例如分布式锁 RLock

    import org.redisson.api.RLock;
    import org.redisson.api.RedissonClient;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
    public class RedissonService {@Autowiredprivate RedissonClient redissonClient;public void doSomethingWithLock() {RLock lock = redissonClient.getLock("my-lock");try {// 尝试加锁,最多等待 5 秒,锁定 10 秒自动释放if (lock.tryLock(5, 10, TimeUnit.SECONDS)) {try {// 加锁成功,执行任务System.out.println("Lock acquired, executing task...");} finally {lock.unlock();}}} catch (InterruptedException e) {Thread.currentThread().interrupt();}}
    }
    

三、总结

  • Jedis:简单易用,适合同步操作,需注意多线程问题。
  • Lettuce:Spring Boot 默认使用的客户端,支持异步和同步,线程安全。
  • Redisson:提供丰富的分布式工具,适合需要分布式锁、分布式集合等高级功能的场景。

在 Spring Boot 项目中,可以根据业务需求选择合适的客户端。例如,高并发或异步场景中更适合 Lettuce,而在分布式环境中 Redisson 能提供更多高级功能。

相关文章:

redis的三种客户端

在 Redis 中&#xff0c;常用的 Java 客户端有三种&#xff1a;Jedis、Lettuce 和 Redisson。它们各有特点&#xff0c;适用于不同的场景。以下是它们的详细介绍&#xff0c;以及如何在 Spring Boot 中集成 Redis。 一、Redis 三种常用客户端详解 1.1 Jedis Jedis 是 Redis 官…...

边缘计算【智能+安全检测】系列教程--agx orin解决RTC时间问题

因为是离线运行&#xff0c;首要问题是时间不准确&#xff0c;就在主板上加装了纽扣电池&#xff0c;但是会有一系列问题&#xff0c;比如无法将RTC时间回写到系统时间&#xff0c;或者无法将系统时间写到RTC中等等一些列问题。为解决这些问题&#xff0c;一劳永逸的方式&#…...

数据库动态扩容:Java实现与技术策略

引言 数据库动态扩容是应对数据量增长和业务需求变化的关键技术。它允许数据库系统在不停机的情况下&#xff0c;通过增加或减少资源来适应业务负载的变化。本文将详细介绍数据库动态扩容的工作原理、技术策略&#xff0c;并提供Java代码示例。 1. 数据库动态扩容的工作原理 …...

Golang | Leetcode Golang题解之第525题连续数组

题目&#xff1a; 题解&#xff1a; func findMaxLength(nums []int) (maxLength int) {mp : map[int]int{0: -1}counter : 0for i, num : range nums {if num 1 {counter} else {counter--}if prevIndex, has : mp[counter]; has {maxLength max(maxLength, i-prevIndex)} …...

低代码架构浅析

低代码的定义与应用场景 定义 低代码平台是一种通过可视化工具和预定义组件实现快速应用开发的环境&#xff0c;显著减少了编码量。它旨在简化开发流程&#xff0c;加快应用交付&#xff0c;提高开发效率&#xff0c;使非技术人员也能参与应用开发。 应用场景 企业内部应用 …...

mysql字段是datetime如何按照小时来统计

在 MySQL 中&#xff0c;如果你有一个包含 DATETIME 类型的列&#xff0c;并且你想按照小时来统计数据&#xff0c;可以使用 DATE_FORMAT 函数将 DATETIME 列格式化为仅包含日期和小时的形式&#xff0c;然后使用 GROUP BY 子句来分组。 假设你有一个名为 events 的表&#xf…...

nacos快速启动

预备环境准备&#xff1a; 确保是64 bit OS&#xff08;推荐Linux/Unix/Mac&#xff09;&#xff0c;安装64 bit JDK 1.8并下载&配置&#xff0c;安装Maven 3.2.x并下载&配置。 下载源码或者安装包&#xff1a; 从Github上下载源码方式&#xff1a; git clone https://…...

@Excel若依导出异常/解决BusinessBaseEntity里面的字段不支持导出

今天发现所有实体类继承BusinessBaseEntity里面的这些通用字段不支持导出&#xff0c;debug时发现是这样&#xff1a; 导出效果 这里我把能查到的方法都汇总了&#xff0c;如果你也遇到这个异常&#xff0c;可以去逐步排查 1.先看库里有没有数据 2.看字段名是否对齐 3.所需要…...

虚拟机 Email 恢复专用工具:Virtual Machine Email Recovery

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务&#xff0c;并针对企业面临的数据安全风险&#xff0c;提供专业的相关数据安全培训。 天津鸿萌科贸发展有限公司是 SysTools 系列数据恢复、取证及…...

代理人工智能如何应对现代威胁的速度和数量

Seven AI首席执行官 Lior Div 讨论了代理 AI 的概念及其在网络安全中的应用。他解释了代理 AI 与传统自动化安全系统的区别&#xff0c;即代理 AI 具有更大的自主性和决策能力。 Div 强调&#xff0c;通过实时处理大量警报&#xff0c;代理 AI 特别适合对抗现代 AI 驱动的威胁…...

element-plus版本过老,自写选项弹框增删功能

title: element-plus版本过老&#xff0c;自写选项弹框增删功能 date: 2024-10-31 10:53:18 tags: element-plus 1.情景 发现代码怎么都用不了el-select的#footer插槽从而实现不了相关的操作&#xff0c;发现el-select自带的管理相关数据的属性popper-class用不了。 2.原因与…...

Python毕业设计选题:基于django+vue的宠物寄养平台的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 1. 前台系统功能模块 系统首页界面 用户注册界面 用户登录界面 宠物商城界面 宠物店…...

计算机后台服务-更新下载,重启————未来之窗行业应用跨平台架构

一在教育中应用 1. 提高效率&#xff1a;能够快速收集大量学生的卷子&#xff0c;节省了传统人工收集和整理的时间。 2. 准确性&#xff1a;减少了人工收卷过程中可能出现的错漏和混乱&#xff0c;确保每份卷子都能准确无误地被收集和记录。 3. 即时性&#xff1a;可以实时接收…...

springcloud通过MDC实现分布式链路追踪

在DDD领域驱动设计中&#xff0c;我们使用SpringCloud来去实现&#xff0c;但排查错误的时候&#xff0c;通常会想到Skywalking&#xff0c;但是引入一个新的服务&#xff0c;增加了系统消耗和管理学习成本&#xff0c;对于大型项目比较适合&#xff0c;但是小的项目显得太过臃…...

logback日志级别动态切换四种方案

生产环境中经常有需要动态修改日志级别。 现在就介绍几种方案 方案一&#xff1a;开启logback的自动扫描更新 配置如下 <?xml version"1.0" encoding"UTF-8"?> <configuration scan"true" scanPeriod"60 seconds" debug…...

AI视频管理平台中使用目标检测模型中的NMS参数原理及设置原则

目标检测模型中的NMS参数原理及设置原则 在目标检测模型中&#xff0c;非极大值抑制&#xff08;Non-Maximum Suppression&#xff0c;简称NMS&#xff09;是一种常用的后处理技术&#xff0c;用于筛选和保留最佳的检测框。本文将详细介绍NMS的原理、参数设置原则以及实际应用…...

从零开始点亮一个LED灯 —— keil下载、新建工程、版本烧录、面包板使用、实例代码

一、keil下载 参考视频&#xff1a;Keil5安装教程视频 (全套资料51和32皆可用Keil5编译设置)_哔哩哔哩_bilibili 视频内容包括下载链接、安装教程、库导入&#xff0c;非常详细&#xff01; 二、新建工程 2.1.使用stm32CubeMX新建工程 10. 使用STM32CubeMX新建工程 — [野…...

[pdf,epub]105页《分析模式》漫谈合集01

105页的《分析模式》漫谈合集第1集的pdf、epub文件&#xff0c;已上传到本账号的CSDN资源。 如果无法下载&#xff0c;也可以访问umlchina.com/url/ap.html 已排版成适合手机阅读&#xff0c;pdf的排版更好一些。 ★UMLChina为什么叒要翻译《分析模式》&#xff1f; ★[缝合故…...

计算机网络5层模型

应用层常见协议 DNS协议 作用:用于实现网络设备名字到IP地址映射的网络服务 特点:DNS是因特网使用的命名系统&#xff0c;它将人们易于记忆的主机名(如www.example.com)转换为机器可识别的IP地址。 FTP协议 作用:用于实现交互式文件传输功能。 特点:FTP支持Standard(主动…...

Python毕业设计选题:基于Python的无人超市管理系统-flask+vue

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 超市商品详情 购物车 我的订单 管理员登录界面 管理员功能界面 用户界面 员…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...