RedisJSON 技術揭秘`JSON.CLEAR` 一鍵清空容器、重置數字的“軟刪除”

一、指令速查

JSON.CLEAR <key> [path]
參數說明
keyRedis 鍵名
pathJSONPath(可選,缺省 $ 根;支持 *.. 多路徑)

返回值:整數——被清空的數組 / 對象數量 + 被置零的數值字段數量。已為空或為 0 的字段不會重復統計。

時間復雜度

  • 單路徑 → O(N),N 為被清空容器的元素個數
  • 多路徑 → O(N × 匹配數)

二、行為要點

  1. 數組 / 對象 → 空容器[]{}

  2. 數值 → 0intfloat 皆置為 0

  3. 字符串 / 布爾 / null:保持原值

  4. 路徑不存在:安靜忽略,不報錯

  5. JSON.DEL 區別

    場景CLEARDEL
    JSON 結構保留字段刪除字段
    數值置 0刪除
    引用路徑不存在忽略忽略
    典型用途重置 / Soft-Delete硬刪除

三、CLI 實戰

3.1 創建示例文檔

JSON.SET doc $ '{"obj": {"a":1,"b":2},"arr": [1,2,3],"str": "foo","bool": true,"int": 42,"float": 3.14
}'

3.2 清空所有一級容器 & 數字

redis> JSON.CLEAR doc $.*
(integer) 4   # obj + arr + int + float

3.3 查看結果

redis> JSON.GET doc $
[{"obj":{},"arr":[],"str":"foo","bool":true,"int":0,"float":0
}]

四、精選應用場景

場景玩法
每日統計歸零定時 CLEAR stats $.counters.*
多租戶初始化復制模板 JSON 后立即 CLEAR tenant:xxx $.data
循環緩存寫前先 CLEAR 再 append,避免殘留舊元素
軟刪除字段接口要求字段仍存在,可 CLEAR 容器并保留鍵

五、跨語言速用

5.1 Python(redis-py ≥ 5.0)

from redis import Redis
r = Redis(decode_responses=True)affected = r.execute_command("JSON.CLEAR", "doc", "$.obj")
print("清空字段數:", affected)  # 1

5.2 Node.js(@redis/client)

import { createClient } from 'redis';
const cli = createClient(); await cli.connect();const affected = await cli.json.clear('doc', '$.arr');
console.log(affected); // 1

5.3 Go(go-redis/v9)

affected, _ := rdb.Do(ctx, "JSON.CLEAR", "doc", "$.int").Int()
log.Println(affected)  // 1

六、常見陷阱 & 性能提示

問題排查要點
清空后仍占內存容器本身仍在,巨大嵌套保持層級。若需徹底刪除請用 JSON.DEL
想讓字符串變空CLEAR 不會置空字符串;需顯式 JSON.SET
大型數組 O(N)每次清空都會遍歷元素;可考慮直接 DELSET 新空數組以節省 CPU
多路徑忽略 nil路徑寫錯無錯誤提示,務必 JSON.TYPEEXISTS 驗證

七、最佳實踐

  1. 定時任務批量清
    對統計量、滑動窗口定期統一 JSON.CLEAR,避免寫時阻塞。
  2. 事務 / Lua
    若需要清空后立即寫入默認值,用 MULTI/EXEC 或 Lua 保證原子順序。
  3. 搭配 ARRTRIM
    ARRTRIM 留窗口,再 CLEAR 子對象,實現分層管控。
  4. 監控返回值
    通過返回的受影響字段數判斷重置是否生效,寫 Prometheus 指標告警。

八、總結

JSON.CLEAR 為 RedisJSON 家族補上“軟刪除 / 快速歸零”能力,與之前介紹的“增、查、刪、量、彈、裁”六神技形成完美閉環:

  • 增/改ARRAPPEND / ARRINSERT / SET
  • ARRINDEX / GET / TYPE
  • ARRPOP / DEL
  • ARRLEN
  • ARRTRIM
  • 清零CLEAR

通過恰當地組合,你可以應對幾乎所有 JSON 數據結構的生命周期管理場景。至此,RedisJSON 系列全部完結,愿你在高并發、高可維護的系統設計中靈活運用,碼力倍增!🎉

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91258.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91258.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91258.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java單元測試JUnit

文章目錄前言一、JUnit描述&#xff08;引入Maven&#xff09;二、基本API注解2.1、Assert類2.2、JUnit注解三、普通單元測試3.1、BeforeClass、AfterClass、Before、After、Test合集測試四、SpringBoot單元測試4.1、SpringBoot集成Junit介紹4.2、實戰&#xff1a;SpringBoot項…

HR數字化轉型:3大痛點解決方案與效率突破指南

在人力資源部門工作多年&#xff0c;每天面對堆積如山的簡歷、此起彼伏的員工咨詢、錯綜復雜的薪酬報表……作為HR的你&#xff0c;是否常感到被海量事務性工作淹沒&#xff0c;難以喘息&#xff1f;在數字化轉型的浪潮下&#xff0c;傳統工作方式正遭遇前所未有的挑戰。本文將…

如何運用個人IP影響力尋找使命的力量|創客匠人

在知識付費領域&#xff0c;那些能穿越周期的 IP&#xff0c;往往不只是 “賣課機器”&#xff0c;而是以使命為內核的價值傳遞者。使命為知識變現注入靈魂&#xff0c;讓知識產品從 “信息交易” 升華為 “價值共鳴”&#xff0c;這正是個人 IP 實現深度變現與長期影響力的關鍵…

軟件開發中的瀑布式開發與敏捷開發

一、瀑布式開發&#xff08;Waterfall Model&#xff09;核心流程 采用線性、階段化開發&#xff0c;依次經歷需求分析、設計、開發、測試、部署、維護&#xff0c;前一階段完成后進入下一階段&#xff0c;如瀑布流水單向推進。 典型階段&#xff1a;需求固化→架構設計→代碼實…

如何卸載SQLServer

1.打開控制面板2.雙擊&#xff0c;彈出對話框&#xff0c;點擊刪除3.然后一步一步跟著提示&#xff0c;下一步下一步就好了。4.如果發現沒有卸載干凈&#xff0c;快捷鍵winR&#xff0c;輸入regedit&#xff0c;進入注冊表5.找到計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\…

策略設計模式分析

策略設計模式概述策略模式&#xff08;Strategy Pattern&#xff09;屬于行為型設計模式&#xff0c;允許在運行時動態選擇算法或行為。它將算法封裝成獨立的類&#xff0c;使得它們可以相互替換&#xff0c;而不會影響客戶端代碼。核心組件1. 策略接口&#xff08;Strategy In…

IPM31主板E3300usb鍵盤鼠標安裝成功Sata接口硬盤IDE模式server2003-nt-5.2.3790

IPM31主板E3300usb鍵盤鼠標安裝成功Sata接口硬盤IDE模式server2003-nt-5.2.3790

Docker環境搭建與容器操作全攻略:從入門到實戰

一、環境搭建 1.1 基礎包安裝&#xff08;最小化系統&#xff09; # 備份Yum源配置 mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ 配置Yum源示例 可以更換為阿里云鏡像 cat <<EOF > /etc/yum.repos.d/local.repo [baseos] …

4.2TCP/IP

1、TCP/IP基礎&#xff08;重要&#xff09;概要網絡協議3要素&#xff1a;語法、語義、時序 osi七層模型&#xff1a;應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層tcp四層模型&#xff1a;應用層&#xff08;應用層、表示層、會話層&#xff09;、傳輸層、int…

Java之Stream其二

文章目錄5,Optional5.1,概述5.2,使用5.2.1,創建對象5.2.2,安全消費值5.2.3,獲取值5.2.4,安全獲取值5.2.5,過濾5.2.6,判斷5.2.7,數據轉換6,方法引用6.1 推薦用法6.2 基本格式6.3 語法詳解(了解)6.3.1 引用類的靜態方法6.3.2 引用對象的實例方法6.3.3 引用類的實例方法6.3.4 構造…

一般芯片電氣特性中Flash參數達到其最大值的條件是什么?

芯片電氣特性中標注的最大值&#xff08;比如 Data Flash 擦除時間的最大值&#xff09;&#xff0c;代表在最惡劣但仍在規格書定義的工作條件范圍內的情況下&#xff0c;該參數可能達到的最差值。達到這個最大值通常是由多個最壞情況因素組合造成的。 對于 Data Flash 擦除時間…

python中正則中的split方法、sub方法、finditer方法、compile方法、match對象

正則常見方法梳理 split方法 將一個字符串按照正則表達式匹配結果進行分割,返回結果是列表類型。 pattern:正則表達式的字符串或原生字符串表示string:待匹配字符串maxsplit:最大分割數,剩余部分最為最后一個元素輸出flags:正則表達式使用時候的控制標記 re模塊的spli…

Pytorch中張量的索引和切片使用詳解和代碼示例

PyTorch 中張量索引與切片詳解 使用前先導入&#xff1a; import torch1.基礎索引&#xff08;類似 Python / NumPy&#xff09; 適用于低維張量&#xff1a;x[i]、x[i, j] x torch.tensor([[10, 11, 12],[13, 14, 15],[16, 17, 18]])print(x[0]) # 第0行: tensor([10…

北京-4年功能測試2年空窗-報培訓班學測開-第五十一天

行叭&#xff0c;今天復習第一天&#xff0c;狀態效率&#xff0c;差我發現&#xff0c;一旦換了新環境/知識&#xff0c;我就需要重新調整狀態&#xff0c;少則一兩天&#xff0c;多則一周多。從周日起就很迷茫&#xff0c;哪怕昨天老師講了簡歷與面試&#xff0c;我也清楚地知…

虛擬現實的鏡廊:當技術成為存在之繭

傍晚&#xff0c;摘下VR頭盔的瞬間&#xff0c;房間里未關的臺燈竟顯得刺眼。指尖劃過光滑的塑料外殼&#xff0c;溫熱的機體還在微微震動&#xff0c;如同某種活物的呼吸。窗外城市的光污染在玻璃上暈染成片&#xff0c;而我的視網膜里仍殘留著方才的極光&#xff1a;挪威峽灣…

OSPF過濾

首先需要復習一個點&#xff1a;ACL最終隱含規則不同&#xff1a;如果acl匹配的是流量&#xff0c;則默認是運行所有如果acl匹配的是路由&#xff0c;則默認是拒絕所有OSPF過濾&#xff1a; 1.路由過濾1.LSA可以正常學習&#xff0c;但是不會使用LSA計算路由[AR1]acl 2000[AR1-…

OneCode 3.0 VFS客戶端驅動(SDK)技術解析:從架構到實戰

引言 在分布式系統架構中&#xff0c;高效的文件管理一直是開發者面臨的核心挑戰。OneCode 3.0作為新一代微內核引擎&#xff0c;其VFS&#xff08;虛擬文件系統&#xff09;模塊通過客戶端驅動(SDK)提供了統一的文件操作抽象&#xff0c;屏蔽了底層存儲細節&#xff0c;為開發…

@Reusable-組件復用

Reusable組件復用概述&#xff1a;ArkUI布局中&#xff0c;將自定義組件從組件樹上移除后放入緩存池&#xff0c;后續在創建相同類型的組件節點時&#xff0c;直接復用緩存池中的組件對象。ArkUI中使用Reusable裝飾器以實現自定義組件的復用。常見的組件復用場景是當有大量數據…

黑馬點評系列問題之p63unlock.lua不知道怎么整

問題描述&#xff1a;這個位置的這個unlock.lua文件是怎么生成的。老師給的不是很清楚。解決右鍵單擊resources。如圖輸入回車&#xff0c;然后界面的上方&#xff0c;大概是在這個位置&#xff0c;會有讓你引入這個依賴的選項&#xff0c;我的已經沒有了。他會出來大概三個選項…

Python爬蟲實戰:研究Python-Markdown庫相關技術

1. 引言 在當今信息爆炸的時代,網絡上存在著大量有價值的技術文章。對于技術人員來說,如何高效地收集、整理和保存這些文章是一個重要的問題。爬蟲技術可以幫助我們自動從網絡上獲取所需的文章內容,而 Markdown 作為一種輕量級標記語言,因其簡潔的語法和良好的兼容性,成為…