go-redis使用管道一次传输多条语句

龙德义
2023-12-01

一、介绍

项目中碰到需要一次插入、删除多个key的情况,数据结构用的是hash存储,可以使用redis的pipeline功能实现。

注:Redis的pipeline功能的原理是 Client通过一次性将多条redis命令发往Redis Server,减少了每条命令分别传输的IO开销。同时减少了系统调用的次数,因此提升了整体的吞吐能力。

二、使用pipeline添加

	pipeline := redisdb.Pipeline()
	pipeline.HMSet(ctx, "key1", "friendType", 1)
	pipeline.HMSet(ctx, "key2", "friendType", 1)
	cmders, err := pipeline.Exec(ctx)
	if err != nil {
		lg.Errorf("pipeline exec failed. err[%v]", err)
		return err
	}
	for _, cmder := range cmders {
		cmd := cmder.(*redis.BoolCmd)
		_, err := cmd.Result()
		if err != nil {
			lg.Errorf("err[%v]", err)
		}
	}

三、使用pipeline删除

pipeline := redisdb.Pipeline()
	pipeline.Del(ctx, "key1")
	pipeline.Del(ctx, "key2")
	cmders, err := pipeline.Exec(ctx)
	if err != nil {
		lg.Errorf("pipeline exec failed. err[%v]", err)
		return err
	}
	for _, cmder := range cmders {
		cmd := cmder.(*redis.IntCmd)
		_, err := cmd.Result()
		if err != nil {
			lg.Errorf("err[%v]", err)
		}
	}
 类似资料: