ZBLOG

collName := "urilist" filter := bson.M{"nfType": nfType} UL := MongoDBLibrary.RestfulAPIGetOne(collName, filter) 这个要怎么改变

要将 MongoDB 的查询结果(在此示例中是 MongoDBLibrary.RestfulAPIGetOne 方法)适应到 Redis,你需要根据你当前的 MongoDB 查询逻辑进行调整。以下是如何修改代码,以便在查询到数据后将其存储到 Redis 中。

修改后的代码示例

首先,确保你的 RestfulAPIGetOne 方法可以返回一个结构体实例,这样你就可以从 MongoDB 中获取数据并随后将其存入 Redis。以下是实现这一逻辑的基本步骤:

package main

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

	"github.com/go-redis/redis/v8"
	"go.mongodb.org/mongo-driver/bson" // 引入MongoDB驱动
)

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

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

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

// 假设这是从 MongoDB 获取单个记录的方法
func (mdb *MongoDBLibrary) RestfulAPIGetOne(collName string, filter interface{}) (*Record, error) {
	var result Record
	err := mdb.Collection(collName).FindOne(context.TODO(), filter).Decode(&result)
	if err != nil {
		return nil, err
	}
	return &result, nil
}

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

	rdb := redis.NewClient(&redis.Options{
		Addr: "localhost:6379", // Redis地址和端口
	})
	defer rdb.Close()

	nfType := "AMF" // 这里指定你的 nfType

	collName := "urilist"
	filter := bson.M{"nfType": nfType}

	mongoLib := &MongoDBLibrary{} // 初始化你的MongoDB库实例

	record, err := mongoLib.RestfulAPIGetOne(collName, filter)
	if err != nil {
		log.Fatalf("Error fetching record from MongoDB: %v", err)
	}

	key := fmt.Sprintf("record:%s", record.ID)

	linkJSON, err := json.Marshal(record.Link)
	if err != nil {
		log.Fatalf("Failed to marshal link for ID %s: %v", record.ID, err)
	}

	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)
    }

    fmt.Printf("Stored record in Redis with key: %s\n", key)
}

主要变化说明:

  1. 从 MongoDB 获取记录:使用 RestfulAPIGetOne 方法从 MongoDB 中获取单个记录,该方法假设返回的是一个结构体指针。

  2. Redis 存储

    • 使用获取到的记录信息,生成一个唯一的 Redis 键。
    • _link 字段序列化为 JSON,并通过哈希类型存储在 Redis 中。
  3. 错误处理:对每一步操作(从 MongoDB 获取、JSON 序列化、写入 Redis)进行了错误处理,以确保程序健壮性。

这样,在运行时,如果满足指定的条件,它会从 MongoDB 获取数据并存储到 Redis 中。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?