Go语言如何批量推送数组内结构体至Redis队列(非遍历方式)
解决go-redis v6批量推送结构体数组到Redis队列的问题
你需要利用LPush的可变参数特性,将数组中每个结构体单独序列化为JSON字符串后作为独立参数传入,而非序列化整个数组。这样Redis会把每个字符串当作队列的单个元素存入,且只需调用一次LPush命令。
具体实现代码
package main import ( "encoding/json" "github.com/go-redis/redis" ) // 定义你的结构体 type MyStruct struct { Abc string `json:"abc"` Def string `json:"def"` Ghi string `json:"ghi"` } func main() { // 初始化Redis客户端 client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", // 替换为你的Redis地址 }) // 示例结构体数组 structArr := []MyStruct{ {Abc: "abc", Def: "def", Ghi: "ghi"}, {Abc: "jkl", Def: "mno", Ghi: "pqr"}, } // 逐个序列化结构体为JSON字符串,存入参数切片 var pushArgs []interface{} for _, item := range structArr { jsonData, err := json.Marshal(item) if err != nil { // 根据业务需求处理错误 panic(err) } pushArgs = append(pushArgs, string(jsonData)) } // 批量推送至Redis队列,展开参数切片 err := client.LPush("target_queue", pushArgs...).Err() if err != nil { panic(err) } }
关键说明
LPush方法支持可变参数values ...interface{},你可以将所有序列化后的结构体字符串一次性传入,Redis会逐个添加为队列元素。- 这里的循环仅用于序列化每个结构体,并没有多次调用Redis命令,仍然是单次
LPush完成批量推送,符合你的需求。 - 验证结果:执行后Redis队列
target_queue中的元素会是{"abc":"abc","def":"def","ghi":"ghi"}和{"abc":"jkl","def":"mno","ghi":"pqr"}两个独立元素。
内容的提问来源于stack exchange,提问作者Dinesh s
相关产品推荐
相关产品推荐

