【⚡ Cache伺服器 - Redis】別急,我慢慢讓Partial資料流進去Redis JSON

更新 發佈閱讀 4 分鐘

我們在「【🔒 Cache伺服器 - Redis】流式數據處理 - Redis Stream」有介紹關於Stream如何在串流架構下發揮作用, 這個主題我們要來分享一下如何像串流一般持續的部份更新JSON內容, 在開始進入主題之前, 我們先稍微簡介一下Redis JSON吧!


Redis 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, 那麼當使用者輸入姓名時會先更新姓名欄位, 接著輸入電話後更新電話欄位, 剩下的欄位依此類推, 就如同下圖一般:

raw-image


可以怎麼做呢?

我們可以使用 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扮演快取伺服器的角色, 正是串流中繼站最佳的角色, 就讓我們持續學習串流相關的技術與技巧吧! 歡迎訂閱我們的頻道, 讓我們一起學習共同成長吧!

留言
avatar-img
阿Han的沙龍
150會員
324內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/05/07
有時候我們的API會處理運算功能, 因此會設計為多機來進行分散運算的作業, 但問題來了! 假設我們設計一個修改的API, 修改某個值, 但其它機器的API究竟要如何知曉並更新值呢? 這時候就需要來個通知與訂閱 我們在佇列系列主題有提到Queue的概念, 歡迎參考一下, 這會與我們的通知訂
Thumbnail
2025/05/07
有時候我們的API會處理運算功能, 因此會設計為多機來進行分散運算的作業, 但問題來了! 假設我們設計一個修改的API, 修改某個值, 但其它機器的API究竟要如何知曉並更新值呢? 這時候就需要來個通知與訂閱 我們在佇列系列主題有提到Queue的概念, 歡迎參考一下, 這會與我們的通知訂
Thumbnail
2025/04/09
我們在「【⚡ Cache伺服器 - Redis】 讓系統服務更加順暢的快取機制」 分享如何使用Docker架設Redis, 在進入此篇章之前也請您親自架設一遍, 這樣才能加深學習的效果, 接下來我們會使用Python這套程式語言進行示範與說明, 讓我們以實戰的方式來練習, 將技術內化為知識, 達到真
Thumbnail
2025/04/09
我們在「【⚡ Cache伺服器 - Redis】 讓系統服務更加順暢的快取機制」 分享如何使用Docker架設Redis, 在進入此篇章之前也請您親自架設一遍, 這樣才能加深學習的效果, 接下來我們會使用Python這套程式語言進行示範與說明, 讓我們以實戰的方式來練習, 將技術內化為知識, 達到真
Thumbnail
2025/04/07
我們在「【⚡ Cache伺服器 - Redis】 讓系統服務更加順暢的快取機制」有介紹關於Redis的基本概念, 相信對於快取伺服器也具備一定的概念了, 而在「【⚡ Cache伺服器 - Redis】使用pub/sub來完成通知訂閱機制」也提到了如何設計pub/sub機制來完成通知與訂閱, 但某些情
Thumbnail
2025/04/07
我們在「【⚡ Cache伺服器 - Redis】 讓系統服務更加順暢的快取機制」有介紹關於Redis的基本概念, 相信對於快取伺服器也具備一定的概念了, 而在「【⚡ Cache伺服器 - Redis】使用pub/sub來完成通知訂閱機制」也提到了如何設計pub/sub機制來完成通知與訂閱, 但某些情
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
KSQL引擎, 串流形式的SQL? 聽了應該霧煞煞吧! 想像一下傳統的SQL, 是不是一個指令一個動作, 每發送一個指令之後就必須等到查詢/寫入…動作皆完成之後才回應, 然而在Streaming的應用上這顯然不太可行, 每分每秒都有資料流入的情境下, 資料的狀態都在變化, 假設我們一個指令一個動作,
Thumbnail
KSQL引擎, 串流形式的SQL? 聽了應該霧煞煞吧! 想像一下傳統的SQL, 是不是一個指令一個動作, 每發送一個指令之後就必須等到查詢/寫入…動作皆完成之後才回應, 然而在Streaming的應用上這顯然不太可行, 每分每秒都有資料流入的情境下, 資料的狀態都在變化, 假設我們一個指令一個動作,
Thumbnail
※ 靜態資源回傳 ※ 什麼是靜態資源: 定義:是指事先準備好的資源,這些資源在伺服器上是靜態的、不會隨著每個請求而改變。 資源通常包括: 靜態 HTML 文件。 CSS。 圖像(Image)。 Video。 字體文件:google fonts。 favicon:網頁名稱旁邊的ico
Thumbnail
※ 靜態資源回傳 ※ 什麼是靜態資源: 定義:是指事先準備好的資源,這些資源在伺服器上是靜態的、不會隨著每個請求而改變。 資源通常包括: 靜態 HTML 文件。 CSS。 圖像(Image)。 Video。 字體文件:google fonts。 favicon:網頁名稱旁邊的ico
Thumbnail
我們在「【🎓 Python的深度問答集】torchaudio 對部分段落進行音訊解碼」有分享到如何對一包包的封包進行音訊解碼, 但隨著音檔越大, 最終解碼的速度會越來越慢, 而這並非串流的本意, 串流應該就像水管一樣, 收到多少資料就運算多少量, 並不會隨著累積的容量越大而導致效能下降。 但實際
Thumbnail
我們在「【🎓 Python的深度問答集】torchaudio 對部分段落進行音訊解碼」有分享到如何對一包包的封包進行音訊解碼, 但隨著音檔越大, 最終解碼的速度會越來越慢, 而這並非串流的本意, 串流應該就像水管一樣, 收到多少資料就運算多少量, 並不會隨著累積的容量越大而導致效能下降。 但實際
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 而扮演中樞平台的系統架構功能也漸趨複雜完整, Kafka是一個事件流平台, 正好滿足串流時代之下的即時訊息傳遞架構, 因此我們有必要深入來學習這套事件流平台, 不論是自動化、金融交易、IOT、物流…皆離不開即時的需求, 所以就讓我們蹲好馬步來好好的學習一
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 而扮演中樞平台的系統架構功能也漸趨複雜完整, Kafka是一個事件流平台, 正好滿足串流時代之下的即時訊息傳遞架構, 因此我們有必要深入來學習這套事件流平台, 不論是自動化、金融交易、IOT、物流…皆離不開即時的需求, 所以就讓我們蹲好馬步來好好的學習一
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News