ZBLOG

golang

在 Go 中,你可以使用 go-redis 包来将 MongoDB 数据存储到 Redis。以下是如何将你提供的记录示例转换为适合存储到 Redis 的结构。

安装依赖

首先,你需要安装 go-redis 包:

go get github.com/go-redis/redis/v8

示例代码

下面是一个简单的 Go 程序,展示了如何将两个 MongoDB 记录存储到 Redis 中。

package main

import (
	"context"
	"encoding/json"
	"fmt"
	"log"

	"github.com/go-redis/redis/v8"
)

type Link struct {
	Item []Href `json:"item"`
}

type Href struct {
	Href string `json:"href"`
}

type Record struct {
	ID    string `json:"_id"`
	NfType string `json:"nfType"`
	Link   Link   `json:"_link"`
}

func main() {
	ctx := context.Background()

	// 创建Redis客户端
	rdb := redis.NewClient(&redis.Options{
		Addr: "localhost:6379", // 默认地址和端口
	})

	defer rdb.Close()

	// 定义要存储的数据
	records := []Record{
		{
			ID:    "6787610fb3a57bc85615da73",
			NfType: "AMF",
			Link: Link{
				Item: []Href{
					{Href: "http://127.0.0.1:29510/nnrf-nfm/v1/nf-instances/NF_INSTANCE_ID_12345"},
				},
			},
		},
		{
			ID:    "678764d8b3a57bc85615da75",
			NfType: "SMF",
			Link: Link{
				Item: []Href{
					{Href: "http://127.0.0.1:29510/nnrf-nfm/v1/nf-instances/smf_12345"},
					{Href: "http://127.0.0.1:29510/nnrf-nfm/v1/nf-instances/smf_update_12345"},
					{Href: "http://127.0.0.1:29510/nnrf-nfm/v1/nf-instances/smf_update_1"},
				},
			},
        },
    }

	for _, record := range records {
        key := fmt.Sprintf("record:%s", record.ID)

        // 将_link 转换为 JSON 字符串以便于存储
        linkJSON, err := json.Marshal(record.Link)
        if err != nil {
            log.Fatalf("failed to marshal link for ID %s: %v", record.ID, err)
        }

        // 存入Redis中,使用哈希类型保存字段
        err = rdb.HSet(ctx, key, map[string]interface{}{
            "nfType": record.NfType,
            "_link":  linkJSON,
        }).Err()
        
        if err != nil {
            log.Fatalf("failed to store record %s in redis: %v", record.ID, err)
        }
    }

    // 验证存储的数据
    for _, record := range records {
        key := fmt.Sprintf("record:%s", record.ID)

        result, err := rdb.HGetAll(ctx, key).Result()
        
        if err != nil {
            log.Fatalf("failed to retrieve record %s from redis: %v", record.ID, err)
        }

	    fmt.Printf("Retrieved from Redis for ID %s:\n", record.ID)
	    for k, v := range result {
		    fmt.Printf("%s : %s\n", k, v)
	    }
	    
	    var retrievedLink Link
	    json.Unmarshal([]byte(result["_link"]), &retrievedLink) // 将 JSON 解析回结构体

	    fmt.Printf("_link item : %+v\n\n", retrievedLink.Item)
    }
}

注意事项

  • 错误处理:确保对每一步操作(连接、写入、读取等)进行错误处理,以捕获并处理潜在的问题。

  • 上下文管理:使用上下文 (context) 来控制请求的生命周期,这在分布式环境中非常重要。

  • JSON 序列化与反序列化:对于 _link 字段,需要将其序列化成 JSON 字符串才能保存,同时也可以从字符串恢复为结构体。

运行此代码后,它会将 MongoDB 的数据插入到 Redis,并打印出检索到的记录及其内容。这使得你能够确认数据已经成功地存储和检索。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21144

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?