返回顶部
首页 > 资讯 > 精选 >multi与pipeline怎么在redis中使用
  • 236
分享到

multi与pipeline怎么在redis中使用

2023-06-15 08:06:08 236人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关multi与pipeline怎么在redis中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。multi简介标记一个事务块的开始。事务块内的多条命令

本篇文章给大家分享的是有关multi与pipeline怎么在redis中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

multi

简介

标记一个事务块的开始。
事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。

实现原理

我用PHP扩展调起Redis服务,执行,代码如下:

$redis = new redis();$redis->connect('127.0.0.1',6379);$handle = $redis->multi();$handle->incr('a');$handle->incr('b');$handle->exec();

为了查看这期间具体的连接过程,用wireshark监听回环地址端口6379,抓包请求如下图所示:

multi与pipeline怎么在redis中使用

redis客户端与服务端建立连接后,multi标记事务开始,之后每次执行,服务端返回queued队列标志。查看redis源码src/multi.c文件:

void queueMultiCommand(client *c) {    multiCmd *mc;    int j;    c->mstate.commands = zrealloc(c->mstate.commands,            sizeof(multiCmd)*(c->mstate.count+1));    mc = c->mstate.commands+c->mstate.count;    mc->cmd = c->cmd;    mc->arGC = c->argc;    mc->argv = zmalloc(sizeof(robj*)*c->argc);    memcpy(mc->argv,c->argv,sizeof(robj*)*c->argc);    for (j = 0; j < c->argc; j++)        incrRefCount(mc->argv[j]);    c->mstate.count++;}

在上述源码中可以看到redis服务端每次会把事务块中的命令保存到内存中,上述简介已经解释过最后通过exec命令执行,再看下面示例图的返回结果可以了解到redis服务端一次性返回所有命令执行返回结果。

multi与pipeline怎么在redis中使用

pipeline

简介

客户端将执行的命令写入到缓冲中,最后由exec命令一次性发送给redis执行返回。

实现原理

同样,用相关代码调用redis抓包;

$redis = new redis();$redis->connect('127.0.0.1',6379);$handle = $redis->pipeline();$handle->incr('a');$handle->incr('b');$handle->exec();

继续用wireshark抓包,如下图所示

multi与pipeline怎么在redis中使用

pipeline 客户端请求包示例图

multi与pipeline怎么在redis中使用

这上面的图片简要分析一下,pipeline管道操作是需要客户端与服务端的支持,客户端将命令写入缓冲,最后再通过exec命令发送给服务端,服务端通过命令拆分,逐个执行返回结果。

两者的区别

由上面的请求也可以看出了两者最明显的区别是客户端发送请求的方式不一样,具体相关区别如下:

  • pipeline选择客户端缓冲,multi选择服务端缓冲;

  • 请求次数的不一致,multi需要每个命令都发送一次给服务端,pipeline最后一次性发送给服务端,请求次数相对于multi减少

  • multi/exec可以保证原子性,而pipeline不保证原子性

以上就是multi与pipeline怎么在redis中使用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: multi与pipeline怎么在redis中使用

本文链接: https://lsjlt.com/news/278878.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • multi与pipeline怎么在redis中使用
    本篇文章给大家分享的是有关multi与pipeline怎么在redis中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。multi简介标记一个事务块的开始。事务块内的多条命令...
    99+
    2023-06-15
  • 深入理解redis中multi与pipeline
    背景 由于对redis缓存中数据有批量操作,例如预热缓存数据,或者在列表页批量去获取缓存数据,在使用了multi批量提交事务后,发现redis压力高居不下,而使用了pipeline...
    99+
    2024-04-02
  • golang redis中Pipeline通道如何使用
    本文小编为大家详细介绍“golang redis中Pipeline通道如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang redis中Pipeline通道如何使用”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-06-30
  • Laravel中的Pipeline怎么使用
    本文小编为大家详细介绍“Laravel中的Pipeline怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel中的Pipeline怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。关于管道是...
    99+
    2023-07-04
  • 在Redis集群中使用pipeline批量插入的实现方法
    由于项目中需要使用批量插入功能, 所以在网上查找到了Redis 批量插入可以使用pipeline来高效的插入, 示例代码如下: String key = "key"; Jedis jedis = new...
    99+
    2024-04-02
  • Scan命令怎么在Redis 中使用
    这期内容当中小编将会给大家带来有关Scan命令怎么在Redis 中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 概述SCAN 命令以及比较相近的 SSCAN、H...
    99+
    2024-04-02
  • 怎么在云开发中使用 Redis
    这篇文章主要介绍怎么在云开发中使用 Redis,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Redis 介绍及应用场景Redis 是一个开源的 In-Memory 的 NoSQL 数...
    99+
    2024-04-02
  • Redis怎么与Spring结合使用
    这期内容当中小编将会给大家带来有关Redis怎么与Spring结合使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Spring-data-redis是spring大家族的一部分,提供了在srping应用...
    99+
    2023-05-31
    spring redis
  • SignalR怎么与Redis结合使用
    要将SignalR与Redis结合使用,可以使用Redis作为SignalR backplane,以便在多个服务器之间共享实时通信消...
    99+
    2024-05-09
    SignalR Redis
  • NumPy怎么与Redis集成使用
    NumPy是一个用于科学计算的Python库,而Redis是一个开源的内存数据库,可以用于存储和检索数据。两者可以结合使用,以便在N...
    99+
    2024-05-13
    NumPy Redis
  • Redis怎么与Python集成使用
    要在Python中使用Redis,首先需要安装Redis的Python客户端库。常用的Python Redis客户端包括redis-...
    99+
    2024-05-07
    Redis Python
  • Redis怎么与RabbitMQ结合使用
    Redis和RabbitMQ是两种不同的消息中间件,它们在功能和使用场景上有所不同。通常情况下,Redis用于缓存和数据存储,而Ra...
    99+
    2024-05-07
    Redis RabbitMQ
  • Redis怎么与Docker结合使用
    要将Redis与Docker结合使用,需要以下步骤: 在Docker中拉取Redis镜像: 在终端中运行以下命令可以从Docker...
    99+
    2024-05-07
    Redis Docker
  • CentOS 7.0中怎么搭建与使用Redis集群
    CentOS 7.0中怎么搭建与使用Redis集群,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。安装 Redis下载,解压,编译:$ cd ...
    99+
    2023-06-16
  • 如何在Linux系统中安装与使用redis
    今天就跟大家聊聊有关如何在Linux系统中安装与使用redis,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、下载、解压wget htt...
    99+
    2024-04-02
  • 怎么在SpringBoot中使用Redis统计在线用户信息
    怎么在SpringBoot中使用Redis统计在线用户信息?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。springboot是什么springboot一种全新的...
    99+
    2023-06-14
  • TIMESTAMPDIFF与DATEDIFF怎么在MySQL中使用
    TIMESTAMPDIFF与DATEDIFF怎么在MySQL中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。时间差函数TIMESTAM...
    99+
    2024-04-02
  • Optimizer与optimizer.step()怎么在pytorch中使用
    今天就跟大家聊聊有关Optimizer与optimizer.step()怎么在pytorch中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。当我们想指定每一层的学习率时:opti...
    99+
    2023-06-15
  • foreach与collection怎么在mybatis 中使用
    foreach与collection怎么在mybatis 中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。foreach的主要用在构建in条件中,它可以在SQL语句中进...
    99+
    2023-05-31
    mybatis foreach collection
  • Future怎么在Java与Scala中使用
    Future怎么在Java与Scala中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Future很多同学可能会有疑问,Futrue跟异步编程有什么关系?从...
    99+
    2023-05-30
    java scala future
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作