在之前的 Redis 数据结构设计中,我们可以将 _id
字段也包括在内,以确保每个订阅的唯一性。我们可以将其存储为一个哈希表中的一个字段,或者作为 Redis 键的一部分。
修改后的数据结构设计
更新我们的 Hash 结构以包含 _id
字段:
- Redis Key:
subscription:<subscriptionId>
- Hash Fields:
_id
nfStatusNotificationUri
示例代码实现(包含 ID)
以下是修改后的代码示例,其中包含了 _id
字段的存储:
package main
import (
"context"
"fmt"
"log"
"github.com/go-redis/redis/v8"
)
type Subscription struct {
ID string `json:"_id"`
NfStatusNotificationUri string `json:"nfStatusNotificationUri"`
SubscriptionId string `json:"subscriptionId"`
}
// 将订阅数据保存到Redis
func storeSubscription(ctx context.Context, rdb *redis.Client, subscription Subscription) error {
key := fmt.Sprintf("subscription:%s", subscription.SubscriptionId)
// 存入Hash表,包括_id
err := rdb.HSet(ctx, key, map[string]interface{}{
"_id": subscription.ID,
"nfStatusNotificationUri": subscription.NfStatusNotificationUri,
}).Err()
return err
}
func main() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})
defer rdb.Close()
subscriptions := []Subscription{
{ID: "678768d1b3a57bc85615da79", NfStatusNotificationUri: "", SubscriptionId: "78"},
{ID: "678768d8b3a57bc85615da7a", NfStatusNotificationUri: "", SubscriptionId: "39"},
}
for _, sub := range subscriptions {
err := storeSubscription(ctx, rdb, sub)
if err != nil {
log.Fatalf("Failed to store subscription %s in Redis : %v", sub.SubscriptionId, err)
}
}
fmt.Println("Subscriptions stored successfully!")
}
总结
现在,每个哈希表中都包括了 _id
字段,允许你在需要时轻松访问该唯一标识符。这有助于保持数据的一致性和完整性,同时也使得从 Redis 中获取信息更加方便。
内容由零声教学AI助手提供,问题来源于学员提问