我們在「【🔒 Cache伺服器 - Redis】流式數據處理 - Redis Stream」有介紹關於Stream如何在串流架構下發揮作用, 這個主題我們要來分享一下如何像串流一般持續的部份更新JSON內容, 在開始進入主題之前, 我們先稍微簡介一下Redis JSON吧!
簡單的介紹一下相關的操作
存入數據
JSON.SET user:1 $ '{"name": "Alice", "age": 25, "skills": ["Python", "Redis"]}'
取出數據
JSON.GET user:1 $.name
# ["Alice"]
更新json內的某個值
JSON.SET user:1 $.age 26
刪除 JSON 內的某個欄位
JSON.DEL user:1 $.skills
Redis JSON適用的場景
- 需要存儲結構化數據的應用
- 實時數據處理
- 需要高效查詢 JSON 內部數據
- 需要頻繁更新 JSON 部分數據
我們的情境
假設我們設計一個串流系統, 需要持續更新個人資料, 而我們的個人資料儲存格式為JSON, 那麼當使用者輸入姓名時會先更新姓名欄位, 接著輸入電話後更新電話欄位, 剩下的欄位依此類推, 就如同下圖一般:

可以怎麼做呢?
我們可以使用 JSON.MERGE (Redis 7.2+) 這個功能, 它有以下的幾個特點:
- 合併 JSON 物件(Object 合併)
- 只有相同 key 的部分會被更新,沒有的 key 會被新增。
- 不會刪除現有的 key。
- 數組(Array)覆蓋: Array 會被直接替換,而不會合併。
- 遞迴合併: 嵌套物件也可以合併。
基本語法:
JSON.MERGE <key> <path> <json>
就讓我們從基本的合併開始吧!
📌 假設原本的 JSON
JSON.SET user:1 $ '{"name": "Alice", "age": 25, "skills": {"programming": "Python"}}'
📌 執行 JSON.MERGE
JSON.MERGE user:1 $ '{"city": "Taipei", "skills": {"database": "Redis"}}'
📌 查詢合併後的結果
JSON.GET user:1
{"name": "Alice", "age": 25, "city": "Taipei", "skills": {"programming": "Python", "database": "Redis"}}
結語
不只要快! 還要更快的時代來臨了, 這樣的系統架構之下少不了串流的技術, 而串流除了傳輸上的渠道之外, 更重要的是儲存媒介是否支援這樣的串流功能, Redis扮演快取伺服器的角色, 正是串流中繼站最佳的角色, 就讓我們持續學習串流相關的技術與技巧吧! 歡迎訂閱我們的頻道, 讓我們一起學習共同成長吧!