Redis 客户端有哪些?
文章目录
- Jedis
- Lettuce
- Redisson
- 最佳实践 - 到底用哪个?
Redis 最常见的 Java 客户端有两个,Jedis 和 Lettuce,高级客户端有 Redisson,见下图(图源 Clients | Redis)

Jedis
Github地址:redis/jedis: Redis Java 客户端 (github.com)
SpringBoot2.0 之前的默认 Java 连接 Redis 客户端,作为 Redis 官方推荐的老牌 Java 客户端,Jedis 提供了对 Redis 命令完善的支持。
Jedis 通过 Socket 直接连接 Redis,实际上就是一个 tcp 连接,在使用完连接对象后需要关闭连接,否则会占用系统资源,造成内存泄漏,并且频繁的创建连接,销毁连接开销过大。在并发场景下,直连的方式也存在着线程不安全的问题。为什么线程不安全呢?
查看 Jedis 源码可知,socket、outputStream、inputStream 对象都是共享变量。

通过引入池化思想,使用连接池管理 Jedis 连接对象,降低创建销毁的开销,同时避免了线程不安全的问题,一个线程对应一个连接对象,请求处理完成后,归还连接对象到连接池,提高了性能。
虽然 Jedis 提供了较为全面的 Redis 原生指令的支持,但是其上层封装比较弱,并且对集群等其他高级特性支持度非常低。通过 Socket 进行网络通信,使用阻塞 I/O,且其方法调用都是同步的,程序流需要等到 sockets 处理完 I/O 才能执行,不支持异步。
Lettuce
官网:Lettuce
在 SpringBoot 2.0 之后,被选作为 默认的 Redis 客户端,身为后期之秀的 Lettuce,底层采用了 Netty 实现了网络通信,通过创建一个线程安全的连接对象就可以实现多个线程共享一个连接(除了事务和阻塞操作),并很好的支持 Redis 的高级特性,比如哨兵,集群等。
Lettuce 支持同步、异步以及响应式通信模式。
至于性能方面,csdn 界普遍认为 Lettuce 的性能更高,但我总觉得两者差不多,实践是检验真理的唯一标准,后面再填坑。
Lettuce 相较于Jedis,使用上更加方便快捷(大多数情况下不需要连接池),抽象度更高。通过复用线程安全的连接对象,降低了系统中 Redis 的连接数量,提升了系统的稳定性,并且 Lettuce 也提供了很多配置、接口,方便对性能进行优化和实现深度业务定制的场景。除此之外,其官方社区更为活跃,官方文档也配备详细。
Spring Data Redis 官方文档中有解释为什么 Spring 后来选择了 Lettuce?(X 表示支持该项功能)

Redisson
Github 地址:redisson
高级客户端,Redisson支持异步,底层是基于netty框架的事件驱动作为通信层,提供了许多开箱即用的高级功能。最常使用的就是分布式锁(可重入锁、红锁、联锁、公平锁、读写锁等)的功能,除了 redis 常用数据结构命令服务之外,还实现了 分布式 ID、布隆过滤器、分布式对象、分布式集合等
Redisson 为使用者提供了一系列具有分布式特性的常用工具类,使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。
最佳实践 - 到底用哪个?
从 Spring 将 Lettuce 作为 Redis 的默认客户端可以看出,Lettuce 以及逐渐超越 Jedis 成为了更优秀的 Redis 客户端,Lettuce 支持了更多的 Redis 特性,并且支持多种通信模式,但是 Lettuce 与 Jedis 都没有提供其他高级功能的实现,如分布式锁等,需要我们自己实现或借助 Redisson,csdn界通常的方案是 Lettuce + Redisson 的组合使用,两者相辅相成,各自发挥所长。
参考:
初探 Redis 客户端 Lettuce:真香! - vivo互联网技术 - 博客园 (cnblogs.com)
Jedis那么低性能,还在用?赶紧换上 lettuce 吧! - 知乎 (zhihu.com)
Redis三种客户端对比(优缺点对比+使用建议) - 知乎 (zhihu.com)
redisson使用全解——redisson官方文档+注释(上篇)_redisson官网中文_秃了也弱了。的博客-CSDN博客
相关文章:
Redis 客户端有哪些?
文章目录 JedisLettuceRedisson最佳实践 - 到底用哪个? Redis 最常见的 Java 客户端有两个,Jedis 和 Lettuce,高级客户端有 Redisson,见下图(图源 Clients | Redis) Jedis Github地址:redis/j…...
smbms 超市订单管理系统设计与实现计划表
smbms 超市订单管理系统 项目描述 smbms-JDBC:不使用 SSM 框架进行开发bookStore:学完ssm框架后的整合项目smbms-SSM:使用 SSM 框架开发 项目记录 smbms-JDBC 2023-10-28:第一天,搭建环境,写好基本的工…...
如何解决制造业数字化改造的障碍?
制造业的数字化转型可能是一个复杂且具有挑战性的过程,但解决以下障碍有助于为成功实施铺平道路: 抵制变革:数字化转型中最常见的挑战之一是员工的抵制,尤其是那些习惯传统方法的员工。为了克服这一问题,组织需要培养一…...
代码随想录算法训练营day49
文章目录 Day49买卖股票的最佳时机题目思路代码贪心算法动态规划法(推荐) 买卖股票的最佳时机II题目思路代码 Day49 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣(LeetCode) 题目 给定一个数组 prices ,它的第 i 个元素 prices[i]…...
云计算与大数据——部署Kubernetes集群+完成nginx部署(超级详细!)
云计算与大数据——部署Kubernetes集群完成nginx部署(超级详细!) 部署 Kubernetes 集群的基本思路如下: 准备环境: 选择适合的操作系统:根据需求选择适合的 Linux 发行版作为操作系统,并确保在所有节点上进行相同的选…...
Maven 打包项目后,接口识别中文乱码
背景 项目在Idea里面运行,调用接口发送中文消息正常,用Maven打包项目后,运行jar包,调用接口发送中文出现乱码。 解决方法 1.Idea编译配置 2.如果更改了上述配置之后还是没有效果,则在运行jar包的前面加上 -Dfile.en…...
计算机视觉项目中的文件批量操作与文件批量预处理
计算机视觉项目中的文件批量操作与文件批量预处理 目录 数据集制作文件批量重命名文件批量移动将文件批量按照一定格式进行重命名修改xml文件内容的方法 引言 在计算机视觉项目中,文件批量操作和文件批量预处理是必不可少的步骤。它们涉及处理大量的图像文件&am…...
PHP数组转对象和对象转数组
PHP数组转对象和对象转数组 <?php function array_to_object($arr){$obj new stdClass();foreach ($arr as $key > $val) {if (is_array($val) || is_object($val)) {$obj->$key array_to_object($val);} else {$obj->$key $val;}}return $obj; } function o…...
前后端分离开发中的传参
1.post请求,后台代码使用RequestBody注解接收前端传过来的参数 PostMapping("/saveHosp") public Result SaveHosp(RequestBody HospitalSet hospitalSet){//此处省略中间代码......} 此时前端传过来的参数须为JSON格式,前端VUE传参数为&…...
mount: wrong fs type, bad option, bad superblock报错 ubuntu
问题描述 mount: wrong fs type, bad option, bad superblock Ubuntu无法挂载磁盘。 原因 很大概率是你的硬盘是NTFS。 解决 sudo apt install ntfs-3g即可。...
【图像分类】CNN+Transformer结合系列.3
介绍两篇图像分类的论文:ResMLP(arXiv2305),MetaFormer(CVPR2022),两者都与Transformer有关系,前者基于transformer结构的特点设计ResMLP,后者认为宏观架构才是Transform…...
IDA分析实例android_crackme/EasyJNI/Transformers/pingan2
文章目录 第一个实例android_crackme将32位的android_server放到手机目录下给android_server赋予root更改root用户组运行android_serverpc端端口转发安装apk,并运行app打开32位IDA并attach到进程先使用jadx看java层逻辑定位要分析的方法IDA 给两个方法打断点 第二个…...
拿捏--->求一元二次方程的根
文章目录 题目描述算法思路代码示例 题目描述 从键盘输入a, b, c的值,编程计算并输出一元二次方程ax2 bx c 0的根,当a 0时,输出“Not quadratic equation”,当a ≠ 0时,根据△ b2 - 4ac的三种情况计算并输出方程…...
深入浅出之Docker Compose详解
目录 1.Docker Compose概述 1.1 Docker Compose 定义 1.2 Docker Compose产生背景 1.3 Docker Compose 核心概念 1.4 Docker Compose 使用步骤 1.5 Docker Compose 常用命令 2. Docker Compose 实战 2.1 Docker Compose下载和卸载 2.2 Docker Compose 项目概述 2.3 Do…...
spring5源码篇(12)——spring-mvc请求流程
spring-framework 版本:v5.3.19 文章目录 一、请求流程1、处理器映射器1.1、 RequestMappingHandlerMapping1.2、获取对应的映射方法1.3、添加拦截器 2、获取合适的处理器适配器3、通过处理器适配器执行处理器方法3.1、拦截器的前置后置3.2、处理器的执行3.2.1 参数…...
风辞远的科技茶屋:来自未来的信号枪
很久之前,有位朋友问我,现在科技资讯这么发达了,你们还写啊写做什么呢? 我是这么看的。最终能够凝结为资讯的那个新闻点,其实是一系列事情最终得出的结果,而这个结果又会带来更多新的结果。其中这些“得出”…...
MongoDB教程-8
ObjectId 在之前的所有章节中,我们一直在使用MongoDB的Object Id。在本章中,我们将了解ObjectId的结构。 ObjectId是一个12字节的BSON类型,具有以下结构-- 1. 前4个字节代表自unix epoch以来的秒数 接下来的3个字节是机器标识符 接下来的2…...
Redis 理论部分
前面写了很多redis项目,今天在通过redis的理论加深redis的了解,顺便做个总结 Redis 理论部分 1.redis 速度快的原因 纯内存操作单线程操作,避免频繁的上下文切换以及资源争用的问题,多线程需要占用更多的cpu资源采用非阻塞I/O多…...
Android—Monkey用法
文章目录 Monkey知识 Monkey知识 介绍 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软…...
几个影响 cpu cache 性能因素及 cache 测试工具介绍
》内核新视界文章汇总《 文章目录 1 cache 性能及影响因素1.1 内存访问和性能比较1.2 cache line 对性能的影响1.3 L1 和 L2 缓存大小1.4 指令集并行性对 cache 性能的影响1.5 缓存关联性对 cache 的影响1.6 错误的 cacheline 共享 (缓存一致性)1.7 硬件设计 2 cpu cache benc…...
尼泊尔语语音合成落地难?ElevenLabs官方未公开的3个语言模型限制(附2024年Q2实测延迟/错误率/重音支持对比表)
更多请点击: https://intelliparadigm.com 第一章:尼泊尔语语音合成落地难?ElevenLabs官方未公开的3个语言模型限制(附2024年Q2实测延迟/错误率/重音支持对比表) 尼泊尔语(नेपाली)作为IS…...
书成紫微动,律定凤凰驯:海棠山铁哥的道,从来不是嘴上说的,是写在作品里的
文坛从不缺大道理,也不缺高谈阔论的传道者,历来最缺的,是知行合一、落地成真的真大道。一、乱象:言道者多,行道者少口头标榜实际行径文脉传承随波逐流初心坚守妥协功利拒绝流量收割热度敬畏真诚唯数据论 语言可以伪装人…...
ARM64 Linux内核启动入口stext深度解析:从汇编到C环境的构建
1. 项目概述:从开机到内核的第一行代码 按下电脑的电源键,屏幕上闪过一行行启动信息,最终进入我们熟悉的操作系统界面。这个看似简单的过程背后,隐藏着一系列精密而复杂的交接仪式。对于Linux内核开发者或系统底层爱好者而言&…...
在nodejs后端服务中集成taotoken多模型调用能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Node.js后端服务中集成Taotoken多模型调用能力 1. 项目初始化与环境配置 在开始集成之前,你需要一个已经存在的Node…...
Spoolman:终极3D打印线轴管理解决方案,让您的打印工作更高效 [特殊字符]
Spoolman:终极3D打印线轴管理解决方案,让您的打印工作更高效 🚀 【免费下载链接】Spoolman Keep track of your inventory of 3D-printer filament spools. 项目地址: https://gitcode.com/gh_mirrors/sp/Spoolman Spoolman是一个强大…...
从MHC到MCC:PIC32项目迁移实战指南与问题排查
1. 项目概述:从MHC到MCC的迁移之路如果你是一位长期使用Microchip PIC32系列微控制器的嵌入式开发者,那么“MPLAB Harmony配置器(MHC)”这个名字你一定不陌生。它曾经是Harmony框架下图形化配置工具的核心,帮助我们快速…...
【Midjourney钯金印相风格终极指南】:20年影像工艺专家亲授——从化学印相原理到AI提示词精准转译的7步闭环工作流
更多请点击: https://intelliparadigm.com 第一章:钯金印相工艺的百年历史溯源与数字复兴语境 钯金印相(Platinum/Palladium Printing)诞生于19世纪末,是摄影史上最具质感与耐久性的手工印相工艺之一。其以铂族金属盐…...
AI教材写作神器!低查重AI工具,一键生成符合标准的专业教材!
许多教科书编写者常常会面临这样的困扰:在认真打磨正文内容的同时,配套资源的缺乏却影响到了整体的教学效果。设计有难度的课后练习题时,脑海中却没有多样的创意;想要制作生动的教学课件,却苦于缺乏技术支持࿱…...
5分钟快速掌握FlicFlac:Windows免费音频格式转换终极指南
5分钟快速掌握FlicFlac:Windows免费音频格式转换终极指南 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 还在为不同设备间的音频格式不兼容…...
SLO-Warden:基于错误预算的智能SLO守护平台设计与实践
1. 项目概述:一个面向SLO的智能守护者在云原生和微服务架构成为主流的今天,服务的稳定性和可靠性不再是“锦上添花”,而是“生死攸关”的底线。作为一线的运维工程师或SRE,我们每天都在和各种监控指标、告警风暴作斗争。传统的监控…...
