golang:goredisライブラリpipeline使用方法


goredisライブラリ接続クライアント
package client
import (
	"github.com/go-redis/redis"
	"github.com/sirupsen/logrus"
)

var MainRDS *redis.Client
func 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コマンドの使用
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
}