go-redis使用管道一次传输多条语句
一、介绍项目中碰到需要一次插入、删除多个key的情况,数据结构用的是hash存储,可以使用redis的pipeline功能实现。注:Redis的pipeline功能的原理是 Client通过一次性将多条redis命令发往Redis Server,减少了每条命令分别传输的IO开销。同时减少了系统调用的次数,因此提升了整体的吞吐能力。二、使用pipeline添加pipeline := redisdb.
·
一、介绍
项目中碰到需要一次插入、删除多个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)
}
}
更多推荐
所有评论(0)