返回顶部
首页 > 资讯 > 后端开发 > GO >golang redis中Pipeline通道如何使用
  • 655
分享到

golang redis中Pipeline通道如何使用

2023-06-30 18:06:06 655人浏览 八月长安
摘要

本文小编为大家详细介绍“golang redis中Pipeline通道如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang Redis中Pipeline通道如何使用”文章能帮助大家解决疑惑,下面跟着小编的

本文小编为大家详细介绍“golang redis中Pipeline通道如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang Redis中Pipeline通道如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

goredis库连接客户端

package clientimport (    "GitHub.com/go-redis/redis"    "github.com/sirupsen/logrus")var MainRDS *redis.Clientfunc init() {    ConnectRedis()}func ConnectRedis() {    MainRDS = redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379", PassWord: "******"})    err := MainRDS.Ping().Err()    if err != nil {        logrus.Infof("[ConnectRedis]connect redis error:%s", err.Error())        panic("init client error")    }}

一、pipeline出现的背景

redis客户端执行一条命令分4个过程:

发送命令 -> 命令排队 -> 命令执行 -> 返回结果

这个过程称为Round trip time(简称RTT, 往返时间),mget、mset有效节约了RTT,但大部分命令不支持批量操作,需要消耗N次RTT ,这个时候需要pipeline来解决这个问题。

Pipeline 主要是一种网络优化,它本质上意味着客户端缓冲一堆命令并一次性将它们发送到服务器,减少了每条命令分别传输的IO开销, 同时减少了系统调用的次数,因此提升了整体的吞吐能力,节省了每个命令的网络往返时间(RTT)。

二、pipeline的用法

Pipeline 基本示例如下:

pipe := Redis.Pipeline()pipe.Del(context.Background(), "test1")pipe.Del(context.Background(), "test2")ret, err := pipe.Exec(context.Background())fmt.Println(ret, err)

上面的代码相当于将以下两个命令一次发给redis server端执行与不使用Pipeline相比能减少一次RTT。

del test1
del test2

pipeline命令的使用

PS:如果redis采用了集群部署,不可以直接使用pipeline命令进行操作,因为访问的key可能并不在同一个节点上

// PipelineGetHashField 使用pipeline命令获取多个hash key的单个字段// keyList,需要获取的hash key列表// field 需要获取的字段值func PipelineGetHashField(keyList []string,filed string) []string {    pipeClient :=client.MainRDS.Pipeline()    for _, key := range keyList {        pipeClient.HGet(key, filed)    }    res, err := pipeClient.Exec()    if err != nil {        if err != redis.Nil {            logrus.WithField("key_list", keyList).Errorf("[PipelineGetHashField] get from redis error:%s", err.Error())        }                // 注意这里如果某一次获取时出错(常见的redis.Nil),返回的err即不为空        // 如果需要处理redis.Nil为默认值,此处不能直接return    }    valList := make([]string, 0, len(keyList))    for index, cmdRes := range res {        var val string        // 此处断言类型为在for循环内执行的命令返回的类型,上面HGet返回的即为*redis.StrinGCmd类型        // 处理方式和直接调用同样处理即可        cmd, ok := cmdRes.(*redis.StringCmd)         if ok {            val,err = cmd.Result()            if err != nil {                logrus.WithField("key",keyList[index]).Errorf("[PipelineGetHashField] get key error:%s",err.Error())            }        }        valList = append(valList, val)    }    return valList}

读到这里,这篇“golang redis中Pipeline通道如何使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网GO频道。

您可能感兴趣的文档:

--结束END--

本文标题: golang redis中Pipeline通道如何使用

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

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

猜你喜欢
  • golang redis中Pipeline通道如何使用
    本文小编为大家详细介绍“golang redis中Pipeline通道如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang redis中Pipeline通道如何使用”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-06-30
  • golangredis中Pipeline通道的使用详解
    目录一、pipeline出现的背景二、pipeline的用法pipeline命令的使用goredis库连接客户端 package client import (     "githu...
    99+
    2024-04-02
  • Redis如何使用pipeline
    这篇文章主要介绍Redis如何使用pipeline,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用 pipelineRedis 是基于请求-响应模型的 TCP 服务器。意味着单次请求 RTT(往返时间),取决于当前...
    99+
    2023-06-27
  • redis如何通过pipeline提升吞吐量
    这篇文章给大家分享的是有关redis如何通过pipeline提升吞吐量的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。案例目标简单介绍 redis pipeline 的机制,结合一...
    99+
    2024-04-02
  • Springboot下使用Redis管道(pipeline)进行批量操作
    目录前言管道(pipeline)的优势1.网络传输(RTT)开销少2.提高redis每秒可以执行操作的数量分别使用RedisCallback、SessionCallback进行Red...
    99+
    2023-05-20
    Springboot Redis管道批量操作 Springboot Redis管道
  • Golang如何实现 pipeline 模式的 redis 客户端
    这篇文章主要介绍“Golang如何实现 pipeline 模式的 redis 客户端”,在日常操作中,相信很多人在Golang如何实现 pipeline 模式的 redis 客户端问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-20
  • multi与pipeline怎么在redis中使用
    本篇文章给大家分享的是有关multi与pipeline怎么在redis中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。multi简介标记一个事务块的开始。事务块内的多条命令...
    99+
    2023-06-15
  • golang函数如何使用管道进行通信
    在 go 中,管道是用于 goroutine 之间通信的 fifo 队列。创建一个管道:使用 make(chan t) 函数,其中 t 是管道中数据类型。发送数据:使用 ch Go ...
    99+
    2024-04-30
    golang 管道
  • golang如何将通道关闭
    本篇内容主要讲解“golang如何将通道关闭”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“golang如何将通道关闭”吧!在golang中,可以使用close()函数来关闭通道,语法“close...
    99+
    2023-07-05
  • VB.NET中如何使用事件通道
    这期内容当中小编将会给大家带来有关VB.NET中如何使用事件通道,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#代码示例如下:public delegate void sh...
    99+
    2023-06-17
  • Golang 实现 Redis系列(六)如何实现 pipeline 模式的 redis 客户端
    本文的完整代码在github.com/hdt3213/godis/redis/client 通常 TCP 客户端的通信模式都是阻塞式的: 客户端发送请求 -> 等待服务端响应 ...
    99+
    2024-04-02
  • Golang - 如何合并多个通道?
    怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面编程网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Golang - 如何合并多个通道...
    99+
    2024-04-04
  • Golang通道channel使用源码分析
    这篇文章主要介绍了Golang通道channel使用源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang通道channel使用源码分析文章都会有所收获,下面我们一起来看看吧。前言channel是g...
    99+
    2023-07-04
  • golang管道如何用于函数间通信
    管道在 go 语言中是一种无缓冲通道,用于在 goroutine 之间传输数据。它允许 goroutine 异步通信,提高程序效率和可扩展性。管道可以用于写入和读取数据,使用 Go ...
    99+
    2024-05-02
    golang 管道
  • golang 如何正确地关闭通道
    Golang是近年来开发人员中越来越流行的编程语言。它提供了许多方便的特性,其中一个就是通道(Channel)。通道是Golang中用于协程(Goroutine)之间通信的一种机制。通道的优点是可以保证数据交换的原子性,并且可以在多个协程之...
    99+
    2023-05-14
  • golang函数中的通道是如何实现的?
    go 语言中,通道的内部结构包含元素类型、缓冲区指针、互斥锁、发送和接收队列。收发机制涉及唤醒 goroutine 来发送或接收数据。通道分为缓冲和无缓冲两种。缓冲通道允许gorouti...
    99+
    2024-05-23
    golang 通道 并发访问
  • 如何在golang中根据ID取消通道作业
    在golang中,取消通道作业是一个常见的需求。当我们在处理并发任务时,有时候需要根据任务的ID来取消正在执行的任务。那么,在golang中如何实现这个功能呢?下面,我将为大家介绍一种...
    99+
    2024-02-09
  • GO语言中通道和sync包如何使用
    这篇文章主要讲解了“GO语言中通道和sync包如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“GO语言中通道和sync包如何使用”吧!GO通道和 sync 包的分享我们一起回顾一下上次...
    99+
    2023-07-05
  • Go中如何使用select遍历多个通道
    在Go中,可以使用select语句来遍历多个通道。select语句可以同时监听多个通道的操作,并在其中任意一个通道准备就绪...
    99+
    2024-04-02
  • 详解redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作
    前段时间在做用户画像的时候,遇到了这样的一个问题,记录某一个商品的用户购买群,刚好这种需求就可以用到Redis中的Set,key作为productID,value就是具体的customerid集合,后续的话...
    99+
    2022-06-04
    批量 详解 管道
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作