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

jedis、lettuce与redis交互分析

概念梳理:

redis是缓存服务器,jedis、lettuce都是Java语言下的redis客户端,用于与redis服务器进行交互。springboot项目中一般使用的是spring data redis,spring data redis依赖与jedis或lettuce,可以进行配置,默认使用的是lettuce。lettuce依赖了netty网络通信框架。

TCP协议:

Redis主要是以TCP协议对外提供服务,先来简单了解下TCP协议:

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,用于在网络上可靠地传输数据。以下是TCP协议的一些特性和工作原理的详细介绍:

  1. 面向连接:TCP在通信之前需要建立一个连接,通过三次握手来确保双方的通信可靠性。连接建立后,通信双方可以进行数据的可靠传输。

  2. 可靠性:TCP提供的传输是可靠的,通过序列号和确认应答机制来确保数据按顺序传输和不丢失。接收方会对收到的数据进行确认应答,发送方在收到确认应答后才会发送下一批数据。

  3. 流量控制:TCP使用滑动窗口机制来进行流量控制。接收方通过发送窗口大小告知发送方自己的接收能力,发送方根据接收方的窗口大小来控制发送的数据量,以避免数据的丢失和网络拥塞。

  4. 拥塞控制:TCP使用拥塞控制算法来避免网络拥塞的发生。通过动态调整发送方的发送速率和接收方的接收速率,以适应网络的状况,保持网络的稳定性和公平性。

  5. 双向通信:TCP是一种全双工的协议,即通信双方可以同时发送和接收数据,实现双向的数据传输。

TCP的工作原理如下:

  1. 连接建立:通信双方通过三次握手来建立连接。首先,客户端发送一个SYN(同步)报文给服务器,服务器收到后回复一个SYN-ACK(同步-确认)报文给客户端,客户端再发送一个ACK(确认)报文给服务器,完成连接的建立。

  2. 数据传输:连接建立后,通信双方可以通过发送和接收数据来进行通信。发送方将数据分割成适当大小的报文段,并添加序列号,然后通过IP协议将报文段发送给接收方。接收方收到报文段后进行确认应答,并按序重组数据。如果有丢失的报文段,接收方会要求发送方重新发送。

  3. 连接释放:当通信结束时,通信双方可以通过四次握手来释放连接。首先,一方发送一个FIN(结束)报文给对方,对方收到后回复一个ACK报文,表示收到了FIN报文。然后,对方也发送一个FIN报文给另一方,另一方收到后回复一个ACK报文,表示同意关闭连接。这样,连接就被正常释放了。

Redis管道模式:

Redis的管道(Pipeline)模式是一种优化Redis客户端与服务器之间交互的方式。它可以在减少网络往返延迟的同时提高命令的执行效率。

在传统的Redis交互模式中,客户端发送一个命令给服务器后,需要等待服务器完成该命令的执行并返回结果,然后才能发送下一个命令。这样的方式在需要执行多个命令时会存在较大的延迟。

而在管道模式下,客户端可以一次性发送多个命令给服务器,并在之后一次性接收服务器返回的结果。这样可以减少网络往返的次数,从而提高命令的执行效率。

具体的管道模式使用步骤如下:

  1. 创建管道:客户端通过调用Redis的管道命令(例如pipeline)创建一个管道。

  2. 发送命令:客户端可以通过调用管道对象的命令方法(例如setget等)来发送多个命令给服务器。这些命令会被缓存到管道中而不会立即执行。

  3. 执行命令:客户端通过调用管道对象的executesync方法来执行管道中的命令。在这一步,客户端会将管道中的命令一次性发送给服务器。

  4. 接收结果:客户端可以通过调用管道对象的相应方法(例如get_response)来一次性接收服务器返回的结果。这些结果与命令的发送顺序相对应。

通过使用管道模式,可以将多个命令一次性发送给服务器,减少了网络往返的次数,从而提高了命令的执行效率。管道模式尤其适用于需要批量处理命令或需要进行多个命令的批量操作的场景。

需要注意的是,管道模式虽然可以提高命令的执行效率,但也有一些潜在的问题,比如如果某个命令执行失败,整个管道的执行结果可能会受到影响。因此,在使用管道模式时需要注意异常处理和结果的正确性验证。

与redis交互时,jedis、lettuce有哪些相同之处?

1、这俩都是Java语言下的Redis客户端,用于与Redis服务器进行交互;

2、都支持同步和异步的命令执行方式;

3、内部都维护了线程池,负责与redis进行交互;

4、都支持连接池管理,都可以复用连接资源,以提高性能和效率。

先看下第3点。应用程序中的主逻辑线程通过异步调用的方式,把redis命令交给jedis或lettuce,jedis或lettuce中的线程池中的线程与redis交互完成之后,回调主逻辑线程,主逻辑线程再进行结果处理,这样可以保证主逻辑线程不被阻塞而可以继续干其他事情。

重点看下第4点。所谓的连接池是一个抽象概念,类似于线程池,只不过线程池管理的是线程的生命周期,而连接池管理的是连接的生命周期,但无论是连接池还是线程池都是为了复用,避免频繁资源的创建及销毁,提高性能。连接池里的一个连接是与Redis服务器建立的一个网络连接,包含了与Redis服务器通信所需的相关信息,如IP地址、端口号、认证信息等,可以理解为就是一个TCP连接。

无论是jedis还是lettuce,在于redis进行交互时,内部都使用了连接池技术,通过连接池可以实现连接的复用,避免了TCP连接的频繁创建及销毁,避免了一次次繁琐的三次握手及四次挥手。

在与redis交互中,jedis 与 lettuce有什么不同之处?

1、实现方式:Jedis是基于阻塞IO的方式实现的,而Lettuce是基于非阻塞IO和Reactive编程模型实现的。

2、连接方式:Jedis在每个线程中使用一个连接,而Lettuce使用基于Netty的连接池,可以在多个线程之间共享连接。

3、性能和效率:由于Lettuce使用了非阻塞IO和连接池的方式,相对于Jedis在高并发场景下具有更好的性能和效率。

这里重点分析下第2点。Jedis和Lettuce都有连接池,而且都可以实现连接复用的效果,这一点是前提。但是Lettuce的骚操作来了:Lettuce连接池中的一个连接可以在某个时刻同时被多个线程使用,而Jedis连接池中的连接每次只能被一个线程独占。所以Lettuce的连接池复用效果更好,性能更高,并发性更好。

以lettuc与redis的交互为例,进行流程梳理:

1、应用程序主逻辑线程调用Spring Data Redis提供的RedisTemplate或者ReactiveRedisTemplate进行Redis操作。

2、RedisTemplate会将操作转化为相应的Redis命令,并将命令提交给Lettuce线程池。

3、Lettuce线程池中的线程从任务队列中获取任务,并进行Redis命令的序列化。

4、序列化后的命令通过Netty的事件循环线程发送到Redis服务器。

5、Netty事件循环线程将命令发送给Redis服务器,并等待响应。

6、当Redis服务器处理完命令后,将响应返回给Netty事件循环线程。

7、Netty事件循环线程将响应数据反序列化,并将结果返回给Lettuce线程池中的线程。

8、Lettuce线程池中的线程将结果返回给应用程序主逻辑线程,完成Redis操作。

在这个过程中,应用程序主逻辑线程通过RedisTemplate提交任务给Lettuce线程池,Lettuce线程池使用线程从任务队列中获取任务并处理,最终通过Netty事件循环线程将命令发送到Redis服务器,并将响应结果返回给应用程序主逻辑线程。这种异步的线程交互方式可以提高并发性能和吞吐量。

相关文章:

jedis、lettuce与redis交互分析

概念梳理: redis是缓存服务器,jedis、lettuce都是Java语言下的redis客户端,用于与redis服务器进行交互。springboot项目中一般使用的是spring data redis,spring data redis依赖与jedis或lettuce,可以进行配置&#x…...

C++算法:矩阵中的最长递增路径

涉及知识点 拓扑排序 题目 给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允…...

OpenWRT配置SFTP远程文件传输,让数据分享更安全

文章目录 前言 1. openssh-sftp-server 安装2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT上安装SFTP服务,并结合cpolar内网穿透,创建安全隧道映射22端口,实现在公网环境下远程OpenWRT SFTP&#xf…...

已解决:rm: 无法删除“/opt/module/zookeeper-3.4.10/zkData/zookeeper_server.pid“: 权限不够

解决: ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg Stopping zookeeper ... /opt/module/zookeeper-3.4.10/bin/zkServer.sh: 第 182 行:kill: (4149) - 不允许的操作 rm: 无法删除"/opt/module/zooke…...

Flink(四)【DataStream API - Source算子】

前言 今天开始学习 DataStream 的 API ,这一块是 Flink 的核心部分,我们不去学习 DataSet 的 API 了,因为从 Flink 12 开始已经实现了流批一体, DataSet 已然是被抛弃了。忘记提了,从这里开始,我开始换用 F…...

GIS入门,xyz地图瓦片是什么,xyz数据格式详解,如何发布离线XYZ瓦片到nginx或者tomcat中

XYZ介绍 XYZ瓦片是一种在线地图数据格式,由goole公司开发。 与其他瓦片地图类似,XYZ瓦片将地图数据分解为一系列小的图像块,以提高地图显示效率和性能。 XYZ瓦片提供了一种开放的地图平台,使开发者可以轻松地将地图集成到自己的应用程序中。同时,它还提供了高分辨率图像和…...

[工业自动化-14]:西门子S7-15xxx编程 - 软件编程 - STEP7 TIA博途是全集成自动化软件TIA portal快速入门

目录 一、TIA博途是全集成自动化软件TIA portal快速入门 1.1 简介 1.2 软件常用界面 1.3 软件安装的电脑硬件要求 1.4 入口 1.5 主界面 二、PLC软件编程包含哪些内容 2.1 概述 2.2 电机运动控制 一、TIA博途是全集成自动化软件TIA portal快速入门 1.1 简介 Siemens …...

【教3妹学编程-算法题】Range 模块

3妹:哈哈哈哈哈哈哈哈 2哥 : 3妹看什么呢,笑的这么开森 3妹:2哥你快来看啊,成都欢乐谷的NPC模仿“唐僧”, 太搞笑了。 2哥 : 哦这个我也看到了,真的是唯妙唯肖,不能说像,只能说一模一…...

SpringBoot+MybatisPlus Restful示例

增删改查,分页 CREATE TABLE tbl_book ( id int NOT NULL AUTO_INCREMENT, type varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, name varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, desc_ription varchar(255) CHAR…...

【数据结构】树与二叉树(十一):二叉树的层次遍历(算法LevelOrder)

文章目录 5.2.1 二叉树二叉树性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点,其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…...

【PyQt】(自制类)处理鼠标点击逻辑

写了个自认为还算不错的类,用于简化mousePressEvent、mouseMoveEvent和mouseReleaseEvent中的鼠标信息。 功能有以下几点: 鼠标当前状态,包括鼠标左/中/右键和单击/双击/抬起鼠标防抖(仅超出一定程度时才判断鼠标发生了移动),灵…...

JAVA IDEA 下载

超简单步骤一: IntelliJ IDEA 官方下载链接 点击以上链接进入下图,点击下载 继续点下载,然后等待下载完后打开安装包即可 步骤二: 打开下好的安装包,点击Browse...我们把它下载到自己喜欢的地方(主要是别占…...

DevOps简介

DevOps简介 1、DevOps的起源2、什么是DevOps3、DevOps的发展现状4、DevOps与虚拟化、容器 1、DevOps的起源 上个世纪40年代,世界上第一台计算机诞生。计算机离不开程序(Program)驱动,而负责编写程序的人,被称为程序员&…...

体验前所未有的显示器管理体验:BetterDisplay Pro Mac

在现代的数字化时代,显示器是我们日常生活和工作中不可或缺的一部分。从笔记本电脑到台式机,从平板电脑到手机,几乎所有的电子设备都配备了显示器。然而,对于专业人士和从事设计行业的人来说,仅仅依靠系统自带的显示器…...

python用pyinstaller打包exe,去掉黑窗口

使用Python编写程序将Python脚本打包成可执行文件(EXE),但是会有一个命令框产生,很烦,所以,去掉这个框 1,安装pyinstaller pip install pyinstaller2,打包产生cmd命令框 pyinstaller --onefi…...

如何关闭Windows Defender(亲测可行!!非常简单)

一、背景 Windows Defender(简称WD)真的太讨厌了,经常给你报你下载的文件是病毒,且不说真的是不是病毒,它都不询问直接删。 另外聚资料显示WD还会不合时宜地执行扫描导致系统变慢(不会在合适的、空闲的时…...

【objectarx.net】创建多重引线

创建多重引线...

【objectarx.net】创建组,列出所有组,查找实体所在的组

创建组,列出所有组...

Llama2通过llama.cpp模型量化 WindowsLinux本地部署

Llama2通过llama.cpp模型量化 Windows&Linux本地部署 什么是LLaMA 1 and 2 LLaMA,它是一组基础语言模型,参数范围从7B到65B。在数万亿的tokens上训练的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而无需求…...

Coding面试题之手写线程池

原理图 JDK线程池原理 实现代码 1.线程类&#xff08;PoolThread&#xff09; 这个类用于执行任务队列中的任务。 public class PoolThread extends Thread {private final Queue<Runnable> taskQueue;private boolean isStopped false;private long lastTaskTime …...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...