ZBLOG

SET nfprofile:NF_INSTANCE_ID_12345 '{ "nfType" : "AMF", "nfStatus" : "REGISTERED", "plmnList" : [ { "mcc" : "460", "mnc" : "01" } ], "ipv4Addresses" : [ "192.168.0.1" ], "nfInstanceId" : "NF_INSTANCE_ID_12345" }' SET nfprofile:smf_12345 '{ "plmnLi...

在 Go 中使用 Redis 存储和读取 JSON 数据的示例代码如下。这个代码片段展示了如何将你提到的两个 JSON 对象存入 Redis,并从中读取它们。

示例代码

首先确保你已经安装了 go-redis 库:

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

然后,你可以使用以下代码与 Redis 交互:

package main

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

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

var ctx = context.Background()

// 定义 NFProfile 的结构体
type NFProfile struct {
	NfType      string        `json:"nfType,omitempty"`
	NfStatus    string        `json:"nfStatus,omitempty"`
	PlmnList    []PlmnEntry   `json:"plmnList,omitempty"`
	Ipv4Addresses []string     `json:"ipv4Addresses,omitempty"`
	NfInstanceId string       `json:"nfInstanceId,omitempty"`
}

type PlmnEntry struct {
	Mcc string `json:"mcc"`
	Mnc string `json:"mnc"`
}

func main() {
	// 创建 Redis 客户端
	rdb := redis.NewClient(&redis.Options{
		Addr: "localhost:6379", // Redis 服务器地址
	})

	nfInstanceID := "NF_INSTANCE_ID_12345"
	smfInstanceID := "smf_12345"

	nfProfile := NFProfile{
		NfType:      "AMF",
		NfStatus:    "REGISTERED",
		PlmnList:    []PlmnEntry{{Mcc: "460", Mnc: "01"}},
		Ipv4Addresses: []string{"192.168.0.1"},
		NfInstanceId: nfInstanceID,
	}

	smfProfile := NFProfile{
		NfType:      "", // 如果有特定类型可以添加
		NfStatus:    "", // 如果有状态信息也可以添加
		PlmnList:    []PlmnEntry{{Mcc: "460", Mnc: "01"}},
		Ipv4Addresses: []string{"192.168.0.1"},
		NfInstanceId: smfInstanceID,
	}

	err := setNFProfile(rdb, nfInstanceID, nfProfile)
	if err != nil {
        log.Fatalf("could not set NF profile for %s : %v", nfInstanceID, err)
    }

	err = setNFProfile(rdb, smfInstanceID, smfProfile)
	if err != nil {
        log.Fatalf("could not set SMF profile for %s : %v", smfInstanceID, err)
    }

	fmt.Println("Data has been stored in Redis.")

	retrievedNFS, err := getNFProfile(rdb, nfInstanceID)
	if err != nil {
	    log.Fatalf("could not retrieve NF profile for %s : %v", nfInstanceID, err)
	  }
	fmt.Printf("Retrieved NF Profile for %s : %+v\n", nfInstanceID, retrievedNFS)

	retrievedSMF, err := getNFProfile(rdb, smfInstanceID)
	if err != nil {
	    log.Fatalf("could not retrieve SMF profile for %s : %v", smfInstanceID, err)
	  }
	fmt.Printf("Retrieved SMF Profile for %s : %+v\n", smfInstanceID, retrievedSMF)

}

// 将结构体转换为 JSON 字符串并存储到 Redis
func setNFProfile(rdb *redis.Client, key string, profile NFProfile) error {
	profileJSON, err := json.Marshal(profile)
	if err != nil {
	    return fmt.Errorf("failed to marshal profile to JSON: %w", err)
	  }
	return rdb.Set(ctx, key, profileJSON, 0).Err()
}

// 从 Redis 获取并解析 JSON 字符串为结构体
func getNFProfile(rdb *redis.Client, key string) (NFProfile, error) {
	var profile NFProfile

	result, err := rdb.Get(ctx, key).Result()
	if err != nil {
	    return profile, fmt.Errorf("failed to get value from Redis for key %s : %w", key ,err )
	  }

	err = json.Unmarshal([]byte(result), &profile)
	if err != nil {
	    return profile ,fmt.Errorf("failed to unmarshal JSON to structure type :%w" ,err )
	  }
	return profile ,nil 
}

代码说明

  1. 结构体定义:我们定义了一个 NFProfile 和一个嵌套的 PlmnEntry 结构体来表示你的数据。

  2. 连接到 Redis:创建一个新的 Redis 客户端,连接到指定的地址(在这里是 localhost 的 6379 端口)。

  3. 设置和获取函数

    • setNFProfile 函数接收一个键和对应的结构体,将其转换为 JSON 格式后存储到 Redis。
    • getNFProfile 函数根据键从 Redis 获取值,并将其解析回结构体。
  4. 错误处理:对于可能出现的错误进行处理,并打印相应的信息。

  5. 执行逻辑:调用设置和获取函数,分别存储两个实例的数据并打印出来。

注意事项

  • 请确保你的环境中已安装 Go 和运行中的Redis 实例。
  • 若需要,适当修改连接参数以符合实际情况(如密码、数据库索引等)。
  • 对于更复杂的数据,可以根据需求扩展或调整数据模型。

通过上述示例,你应该能够成功地将 JSON 数据存储在 Redis 并能检索出来。如有其他问题,请随时询问!


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?