本文探討如何使用go-redis/redis v8
高效地存儲和讀取Go結構體數組到Redis。直接將Go結構體數組保存到Redis會導致錯誤,因為go-redis/redis v8
的SET
命令僅支持字符串類型鍵值對。
以下代碼片段演示了嘗試直接存儲[]model.sysrolemenu
類型數組到Redis,並解釋了錯誤原因。該代碼旨在獲取菜單樹結構並將其存儲到Redis中,以便快速訪問。 getmenutree
函數獲取菜單樹數據後,嘗試使用global.gva_redis.set
直接存儲menus
數組,但由於SET
方法要求值為字符串類型,導致失敗。
解決方法是將[]model.sysrolemenu
數組轉換為Redis支持的JSON字符串。 序列化為JSON字符串後,即可成功存儲到Redis;讀取時再反序列化回Go結構體數組。
修改後的getmenutree
函數如下所示,在保存到Redis之前將menus
數組轉換為JSON字符串:
import ( "context" "encoding/json" "github.com/go-redis/redis/v8" "go.uber.org/zap" ) // ... other imports and code ... func GetMenuTree(roleId string) (err error, menus []model.SysRoleMenu) { err, menuTree := GetMenuTreeMap(roleId) menus = menuTree["0"] // ... other code ... jsonData, err := json.Marshal(menus) if err != nil { zap.L().Error("json marshal error", zap.Error(err)) return err, nil } err = global.gvaRedis.Set(context.Background(), "menuTree:" roleId, string(jsonData), 0).Err() if err != nil { zap.L().Error("redis set error", zap.Error(err)) return err, nil } return nil, menus } //讀取數據示例func ReadMenuTree(roleId string) (err error, menus []model.SysRoleMenu) { val, err := global.gvaRedis.Get(context.Background(), "menuTree:" roleId).Result() if err != nil { if err == redis.Nil { return nil, nil //Key不存在} return err, nil } err = json.Unmarshal([]byte(val), &menus) if err != nil { zap.L().Error("json unmarshal error", zap.Error(err)) return err, nil } return nil, menus }
通過json.Marshal
函數將menus
數組編碼為JSON字符串,然後將其存儲到Redis中。 讀取數據時,使用json.Unmarshal
進行反序列化。 這解決了go-redis/redis v8
不支持直接存儲數組結構的問題。
以上是如何使用go-redis/redis v8高效存儲和讀取Go結構體數組到Redis?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Redis是现在最热门的key-value数据库,Redis的最大特点是key-value存储所带来的简单和高性能;相较于MongoDB和Redis,晚一年发布的ES可能知名度要低一些,ES的特点是搜索,ES是围绕搜索设计的。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于redis的一些优势和特点,Redis 是一个开源的使用ANSI C语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式存储数据库,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis Cluster集群收缩主从节点的相关问题,包括了Cluster集群收缩概念、将6390主节点从集群中收缩、验证数据迁移过程是否导致数据异常等,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于原子操作中命令原子性的相关问题,包括了处理并发的方案、编程模型、多IO线程以及单命令的相关内容,下面一起看一下,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了bitmap问题,Redis 为我们提供了位图这一数据结构,位图数据结构其实并不是一个全新的玩意,我们可以简单的认为就是个数组,只是里面的内容只能为0或1而已,希望对大家有帮助。

redis error就是redis数据库和其组合使用的部件出现错误,这个出现的错误有很多种,例如Redis被配置为保存数据库快照,但它不能持久化到硬盘,用来修改集合数据的命令不能用。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境