You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:45:37