如何使用go-redis/redis v8高效存儲和讀取Go結構體數組到Redis?
本文探討如何使用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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

Redis在數據存儲和管理中扮演著關鍵角色,通過其多種數據結構和持久化機製成為現代應用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數據結構,適用於緩存和復雜業務邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數據的可靠存儲和快速恢復。

在Idea中如何設置SpringBoot項目默認運行配置列表在使用IntelliJ...

繪製比特幣結構分析圖的步驟包括:1. 確定繪圖目的與受眾,2. 選擇合適的工具,3. 設計框架並填充核心組件,4. 參考現有模板。完整的步驟確保圖表準確且易於理解。

適合新手的加密貨幣數據平台有CoinMarketCap和非小號。 1. CoinMarketCap提供全球加密貨幣實時價格、市值、交易量排名,適合新手與基礎分析需求。 2. 非小號提供中文友好界面,適合中文用戶快速篩選低風險潛力項目。

SpringBoot定時任務在多節點環境下的優化方案在開發Spring...

使用RedisTemplate進行批量查詢時為何返回值為空?在使用RedisTemplate進行批量查詢操作時,可能會遇到返回的結果�...

2025年幣圈前10大正規加密貨幣交易平台預測為:1. Coinbase,2. Kraken,3. Gemini,4. 幣安,5. 歐易,6. Bitstamp,7. LMAX Digital,8. Itbit,9. Coincheck,10. 芝麻開門,這些平台在合規性、安全性、用戶體驗等方面表現優異。
