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