Java项目对接redis,客户端是选Redisson、Lettuce还是Jedis?

JAVA项目对接redis,客户端是选Redisson、Lettuce还是Jedis?

在这里插入图片描述

在实际的项目开发中,对于一个需要对接Redis的项目来说,就面临着选择合适的Redis客户端。目前比较常用的Redis客户端有Redisson、Lettuce和Jedis,两者都有各自的优点和适用场景,本文将对三者进行比较,并给出选择的建议。

📕作者简介:战斧,从事金融IT行业,有着多年一线开发、架构经验;爱好广泛,乐于分享,致力于创作更多高质量内容
📗本文收录于 Redis专栏 专栏,有需要者,可直接订阅专栏实时获取更新
📘高质量专栏 云原生、RabbitMQ、Spring全家桶 等仍在更新,欢迎指导
📙Zookeeper Redis kafka docker netty等诸多框架,以及架构与分布式专题即将上线,敬请期待


一、客户端简介

1. Jedis介绍

Jedis代码仓库地址:https://github.com/redis/jedis 。它是Redis对Java语言所推出的官方客户端,可见下图
在这里插入图片描述

Jedis的主要特点如下:

  1. 简洁高效:Jedis的设计简洁高效,性能较好,可以通过直接发送命令字符串与Redis进行通信,适用于对Redis的原生命令操作更为关注的场景。

  2. 社区活跃:Jedis是最早的Java Redis客户端,拥有庞大的用户社区和完善的文档支持,可以方便地获取到各种使用案例和问题解答。

  3. 支持大部分特性:Jedis支持Redis的大部分特性,如事务、流水线、发布/订阅等,可以满足绝大多数的需求。

简而言之,作为官方客户端,各种命令及功能的支持自然是齐全的,社区及文档的支持也是最完善的

2. Lettuce介绍

Lettcue代码仓库地址:https://github.com/redis/lettuce 。自从Lettcue并入Redis官方后(如下新闻),我们可以说Jedis是长子,Lettcue就是次子,也成为了官方推荐的客户端。

在这里插入图片描述
Lettuce主打高性能,它的主要特点如下:

  1. 异步IO:Lettuce使用异步IO和非阻塞IO模型,可以在一个线程中处理多个并发请求,提供了更好的并发能力和响应速度。它使用了Netty作为底层网络通信框架,充分利用了Netty的高性能和可扩展性。

  2. 响应式编程:Lettuce支持响应式编程模式,使用Reactive Streams来处理异步数据流。通过使用响应式编程,可以简化异步编程的复杂性,提供了更加灵活和可组合的方式来处理Redis的响应。

  3. 连接池:Lettuce内置了连接池功能,可以管理和复用Redis的连接,提供了更好的连接管理和资源利用。连接池可以有效地减少连接的创建和销毁开销,提高了系统的性能和稳定性。

  4. 高可用和集群支持:Lettuce支持Redis的高可用和集群模式,提供了自动的节点发现和故障转移功能。它可以自动检测集群的拓扑结构,并在节点故障时进行自动切换,保证数据的可用性和持久性。

  5. 扩展性和灵活性:Lettuce提供了丰富的功能和API,可以满足各种不同的需求。它支持事务、管道、发布-订阅等特性,还提供了对Redis Sentinel、Redis Cluster和Redis Streams等功能的支持。同时,Lettuce也支持自定义的扩展,可以方便地进行功能扩展和定制开发。

简而言之,相比Jedis,Lettuce提升了性能,丰富了功能,对于开发者来说就减少了自己造轮子

3. Redisson介绍

Redisson代码仓库地址:https://github.com/redisson/redisson 。虽然并不是官方客户端,但是其热度却超过了上述两个‘亲儿子’

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Redisson主打功能丰富,它的主要特点如下:

  1. 分布式对象:Redisson支持将Java对象存储在Redis中,以及在分布式环境中进行操作和调用。这使得开发人员可以更方便地使用常规的面向对象编程方式来处理分布式数据。

  2. 分布式集合:Redisson提供了一系列分布式集合数据结构,比如Set、List、Queue、Deque、Map等。这些数据结构可以在分布式环境中进行操作和处理,使得开发人员能够更方便地实现分布式应用。

  3. 分布式锁:Redisson提供了一种分布式锁的实现,支持公平锁和非公平锁两种模式。这使得开发人员可以更容易地实现分布式环境下的并发控制,避免数据竞争和资源争用。

  4. 分布式调度器:Redisson提供了一种分布式调度器的实现,可以让开发人员在分布式环境中进行任务调度和定时任务的管理。这使得分布式应用的任务调度更加方便和灵活。

  5. 集群支持:Redisson支持Redis的集群模式,可以轻松地在Redis集群中进行数据操作和处理。这使得Redisson能够处理大规模的数据量和高并发的请求。

简而言之,相比前两者,Redisson提供了更多贴近业务的功能,在性能上也做了优化

二、横向对比

看完三大客户端的特点,其实不难发现针对Redis的基础用法是大家都有的,重点就是是否内置“高级功能”,以及对“连接性能”的追求。Jedis的主要不足在于它不支持异步和响应式API;Lettuce有高性能的异步和响应式API,但在“高级功能”(如分布式功能)方面的支持相对有限,Redisson则有很多高级功能也做了连接优化,但也因此比较复杂臃肿,处理简单的Redis操作时反倒浪费了一些性能。它们的部分特性对比如下:

特性RedissonLettuceJedis
异步IO
非阻塞IO
连接池
分布式锁
分布式集合
哨兵模式
主从复制
集群模式
性能一般
功能丰富性非常丰富较丰富基本
学习曲线较陡适中简单
社区支持相对较多相对较多相对较多

综合对比来看,Redisson在功能丰富性和性能方面都具有优势,适用于对分布式对象和服务有更高要求的项目。Lettuce在性能方面表现优秀,适合对并发能力和响应速度有较高要求的项目。Jedis虽然简单易用,但在性能和功能方面相对较弱。

三、选型说明

作为架构选型,我们必须清楚,选出一个完美的方案几乎不可能。更多的时候,架构只是排除掉那些不符合要求的方案,然后在剩下的方案中,选一个不那么差的,就成了所谓的“最佳实践”。因此在选型之前,我们必须明确自己当前的需求,按需来选。以我们自己的某个项目来说,引入Redis主要就是两方面的作用:

  1. 固定-复杂数据的分布式缓存
    有一些计算非常复杂,但用的又比较频繁,如果用到了就去算一遍非常耗时,因此把结果缓存至Redis,供各业务获取
  2. 分布式锁
    有些业务运行时,其他相关业务需要锁定为不可操作,需要使用分布式锁
    针对项目要对接Redis的场景,我们可以根据以下因素进行选择:

接下来,就是分析支持情况,选择Redis做缓存是一个比较基础的功能,各个客户端都能比较简单的实现这个功能。而对于分布式锁其实场景比较复杂,使用 Jedis 或 Lettuce也都能实现,但需要我们自己写不少代码来完善场景。 而 Redisson 本身就实现了比较完备的分布式锁功能,比如支持RedLock算法,读写锁,上锁后自动续期的 watchDog 功能。所以开发者可以直接使用现成的功能。

所以在我们项目这种场景下,选择 Redisson 几乎成了必然,事实上用Redis做分布式锁,Redisson确实是最强大而省事的,这也正是 Redisson 比官方客户端人气还高的重要因素。当然如果你的项目对接redis,纯为了当缓存用,既没有高并发也没有复杂场景,使用
Lettuce 也是可以的。至于Jedis则太简单了,不支持NIO,性能上也稍弱,一旦后续有些复杂的业务,还需要我们手动去改,新项目的话就不推荐再用了。

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

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

相关文章

如何从浅入深理解transformer?

前言 在人工智能的浩瀚海洋中,大模型目前无疑是其中一颗璀璨的明星。从简单的图像识别到复杂的自然语言处理,大模型在各个领域都取得了令人瞩目的成就。而在这其中,Transformer模型更是成为大模型技术的核心。 一、大模型的行业发展现状如…

QT5:调用qt键盘组件实现文本框输入

目录 一、环境与目标 二、Qt VirtualKeyboard 1.勾选Qt VirtualKeyboard 2.ui设计流程 3.注意事项及问题点 三、参考代码 参考博客 一、环境与目标 qt版本:5.12.7 windows 11 下的 Qt Designer (已搭建) 目标:创建一个窗…

二叉树的顺序实现-堆

一、什么是堆 在数据结构中,堆(Heap)是一种特殊的树形数据结构,用数组存储,通常被用来实现优先队列。 堆具有以下特点: 堆是一棵完全二叉树(Complete Binary Tree),即…

下载安装nvm,使用nvm管理node.js版本

目录 一、下载安装nvm(windows) 二、使用nvm管理node.js版本 (1)nvm命令行 (2) 使用nvm管理node.js版本 ①查看nvm版本 ②显示活动的node.js版本 ③列出可供下载的node.js版本 ④安装node.js指定版本 ⑤列出…

HTML+CSS 响应式侧边栏菜单

效果演示 实现了一个响应式的侧边栏菜单,当用户点击菜单按钮时,菜单会从左侧滑出,同时页面内容会向右移动,展示菜单选项。菜单选项包括一个头像和用户名,以及其他的菜单项,当用户将鼠标悬停在菜单项上时,菜单项会高亮显示。这段代码使用了CSS的flex布局和过渡效果,以及…

Oracle登录时出现ERROR: ORA-01031 insufficient privileges

情况: 1.环境: - 操作系统版本:64位win10- Oracle版本:64位 oracle 11g解决方法: 利用DOS命令添加系统用户到ora_dba用户组 2.查看用户组 net localgroup–查看用户组; 3.查看ora_dba用户组下的具体用户&…

input输入框的一些复习

<template><div><div style"text-align: center;margin: 10px 0;"><span style"font-size: 15px;font-weight: bold;">input输入框的基本应用</span></div><el-descriptions :column"3" size"defau…

tinycudann安装

在安装完torch等 直接运行下面的指令会出现错误 pip install githttps://github.com/NVlabs/tiny-cuda-nn/#subdirectorybindings/torch大部分错误是下面的 大概看了一下都是因为虚拟环境里面的include文件下缺少文件&#xff0c;将之前的一些.h文件全部复制过来在执行上面的…

【vue3|第5期】Vue3响应式数据:ref 与 reactive 的深入解析

日期&#xff1a;2024年5月31日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

vue3 前端实现导出下载pdf文件

这样的数据实现导出 yourArrayBufferOrByteArray 就是后端返回数据 // 创建Blob对象const blob new Blob([yourArrayBufferOrByteArray], { type: application/pdf });// 创建一个表示该Blob的URLconst url URL.createObjectURL(blob);// 创建一个a标签用于下载const a doc…

Redis常用命令大全

目录 1、五大数据类型的基本命令 1.1 字符串 1.2 列表 1.3 哈希 1.4 集合 1.5 有序集合 2、与key相关 2.1 查看redis数据的类型 2.2 查看当前redis库中的所有key命令 3、除了五大数据类型外常见命令 3.1 键操作 3.2 服务器操作 3.3 连接操作 3.4 发布/订阅 3.5 事…

大模型时代的具身智能系列专题(六)

UCSD 王小龙组 王小龙是UCSD电子与计算机工程系的助理教授。他曾在加州大学伯克利分校与Alexei Efros和Trevor Darrell一起担任博士后研究员&#xff0c;在CMU RI获得了机器人学博士学位&#xff0c;师从Abhinav Gupta。他的研究重点是通过视频和物理机器人交互数据来学习3D和…

Vue 2.0使用Vue-count-to给数字添加增长动画

在开发后台管理系统时&#xff0c;时常会遇到数据汇总&#xff0c;为了页面展示更生动&#xff0c;用户体验更好&#xff0c;通常会对汇总的数字加一个逐步递增动画。 实现这个效果一般是用的 Vue-count-to这个插件&#xff0c;这是一款简单好用的一个数字滚动插件&#xff0c;…

如何申请微信支付0.2%-0.3%的手续费优惠? 详细步骤

随着微信支付在日常交易中的普及&#xff0c;许多商家开始关注如何降低支付手续费的问题。近期&#xff0c;微信支付推出了一项新的费率优惠政策&#xff0c;允许商家享受0.2%-0.3%的费率优惠。这一政策无疑为商家带来了实质性的成本节约。那么&#xff0c;商家如何申请这一费率…

如何在 c++ 里,让子类访问到父类的私有数据成员?答案之一:使用第三方友元类或友元函数

看 STL 库的代码时候&#xff0c;见有这种写法&#xff0c;感觉挺神奇的。故简化逻辑后&#xff0c;写个玩具验证一下。本来这是很别扭的做法。既然父类让数据成员私有了&#xff0c;还要让子类去调用&#xff0c;何苦呢&#xff1f;但看大师们的写法&#xff0c;果然 c 编译器…

LAMMPS - 分子动力学模拟器

本文翻译自&#xff1a;https://www.lammps.org/ 文章目录 一、关于 LAMMPS下载作者R&D 100 二、LAMMPS 亮点毛细血管中的血流 一、关于 LAMMPS 官网&#xff1a; https://www.lammps.org/ github &#xff1a;https://github.com/lammps/lammps LAMMPS 分子动力学模拟器…

上位机图像处理和嵌入式模块部署(f103 mcu定时器配置)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在mcu开发过程当中&#xff0c;有一种开发模式用的比较多&#xff0c;那就是中断while&#xff08;1&#xff09;。这里面的中断&#xff0c;又是以…

【mysql数据库】mycat中间件

MyCat 简介 Mycat 是数据库 中间件 。 1、 数据库中间件 中间件 是一类连接软件组件和应用的计算机软件&#xff0c; 以便于软件各部件之间的沟通 。 例子 Tomcat web 中间件 。 数据库 中间件 连接 java 应用程序和数据库 2、 为什么要用 Mycat ① Java 与数据库紧耦合 …

【Linux】操作系统之冯诺依曼体系

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 操作系统中 冯诺依曼体系 的相关内容。 如果看到最后您觉得这篇文…