[{"data":1,"prerenderedAt":1087},["ShallowReactive",2],{"navigation":3,"\u002Finstance-aware-counters\u002Fstrict":151,"\u002Finstance-aware-counters\u002Fstrict-surround":1082},[4,29,56,79,94,121,128,144],{"title":5,"path":6,"stem":7,"children":8,"icon":27,"defaultOpen":28},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17,22],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-book-open",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Redis setup","\u002Fgetting-started\u002Fredis-setup","1.getting-started\u002F3.redis-setup","i-lucide-database",{"title":23,"path":24,"stem":25,"icon":26},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F4.quickstart","i-lucide-zap","i-lucide-rocket",true,{"title":30,"icon":31,"path":32,"stem":33,"children":34,"page":55},"Concepts","i-lucide-lightbulb","\u002Fconcepts","2.concepts",[35,40,45,50],{"title":36,"path":37,"stem":38,"icon":39},"Keys","\u002Fconcepts\u002Fkeys","2.concepts\u002F1.keys","i-lucide-key-round",{"title":41,"path":42,"stem":43,"icon":44},"Strict vs lax","\u002Fconcepts\u002Fstrict-vs-lax","2.concepts\u002F2.strict-vs-lax","i-lucide-scale",{"title":46,"path":47,"stem":48,"icon":49},"Comparators","\u002Fconcepts\u002Fcomparators","2.concepts\u002F3.comparators","i-lucide-git-compare",{"title":51,"path":52,"stem":53,"icon":54},"Errors","\u002Fconcepts\u002Ferrors","2.concepts\u002F4.errors","i-lucide-triangle-alert",false,{"title":57,"path":58,"stem":59,"children":60,"icon":63},"Counters","\u002Fcounters","3.counters\u002F1.index",[61,64,69,74],{"title":62,"path":58,"stem":59,"icon":63},"Overview","i-lucide-hash",{"title":65,"path":66,"stem":67,"icon":68},"StrictCounter","\u002Fcounters\u002Fstrict-counter","3.counters\u002F2.strict-counter","i-lucide-target",{"title":70,"path":71,"stem":72,"icon":73},"LaxCounter","\u002Fcounters\u002Flax-counter","3.counters\u002F3.lax-counter","i-lucide-wind",{"title":75,"path":76,"stem":77,"icon":78},"Conditional & batch operations","\u002Fcounters\u002Fconditional-and-batch","3.counters\u002F4.conditional-and-batch","i-lucide-layers",{"title":80,"path":81,"stem":82,"children":83,"icon":85},"Instance-aware counters","\u002Finstance-aware-counters","4.instance-aware-counters\u002F1.index",[84,86,90],{"title":62,"path":81,"stem":82,"icon":85},"i-lucide-network",{"title":87,"path":88,"stem":89,"icon":68},"StrictInstanceAwareCounter","\u002Finstance-aware-counters\u002Fstrict","4.instance-aware-counters\u002F2.strict",{"title":91,"path":92,"stem":93,"icon":73},"LaxInstanceAwareCounter","\u002Finstance-aware-counters\u002Flax","4.instance-aware-counters\u002F3.lax",{"title":95,"path":96,"stem":97,"children":98,"icon":100},"Locks","\u002Flocks","5.locks\u002F1.index",[99,101,106,111,116],{"title":62,"path":96,"stem":97,"icon":100},"i-lucide-lock",{"title":102,"path":103,"stem":104,"icon":105},"Mutex","\u002Flocks\u002Fmutex","5.locks\u002F2.mutex","i-lucide-lock-keyhole",{"title":107,"path":108,"stem":109,"icon":110},"RwLock","\u002Flocks\u002Frwlock","5.locks\u002F3.rwlock","i-lucide-book-lock",{"title":112,"path":113,"stem":114,"icon":115},"Lock options","\u002Flocks\u002Foptions","5.locks\u002F4.options","i-lucide-sliders-horizontal",{"title":117,"path":118,"stem":119,"icon":120},"Guard state & errors","\u002Flocks\u002Fguard-state","5.locks\u002F5.guard-state","i-lucide-shield-alert",{"title":122,"path":123,"stem":124,"children":125,"icon":127},"Rate limiting","\u002Frate-limiting","6.rate-limiting\u002F1.index",[126],{"title":122,"path":123,"stem":124,"icon":127},"i-lucide-gauge",{"title":129,"icon":130,"path":131,"stem":132,"children":133,"page":55},"Reference","i-lucide-book-marked","\u002Freference","7.reference",[134,139],{"title":135,"path":136,"stem":137,"icon":138},"Feature flags","\u002Freference\u002Ffeature-flags","7.reference\u002F1.feature-flags","i-lucide-flag",{"title":140,"path":141,"stem":142,"icon":143},"API reference","\u002Freference\u002Fapi","7.reference\u002F2.api","i-lucide-file-code",{"title":145,"path":146,"stem":147,"children":148,"icon":150},"Changelog","\u002Fchangelog","8.changelog\u002F1.index",[149],{"title":145,"path":146,"stem":147,"icon":150},"i-lucide-scroll",{"id":152,"title":87,"badge":153,"body":154,"date":153,"description":1076,"extension":1077,"links":153,"meta":1078,"navigation":1079,"path":88,"seo":1080,"stem":89,"__hash__":1081},"docs\u002F4.instance-aware-counters\u002F2.strict.md",null,{"type":155,"value":156,"toc":1071},"minimark",[157,177,182,367,381,385,392,801,805,808,1064,1067],[158,159,160,163,164,167,168,171,172,176],"p",{},[161,162,87],"code",{}," is immediately consistent with Redis on every call. ",[161,165,166],{},"set"," and ",[161,169,170],{},"del"," bump a per-key ",[173,174,175],"strong",{},"epoch",", which causes any stale instance to reset its stored count on its next operation - this is what prevents double-counting when the global total is reset out from under an instance.",[178,179,181],"h2",{"id":180},"construct","Construct",[183,184,189],"pre",{"className":185,"code":186,"language":187,"meta":188,"style":188},"language-rust shiki shiki-themes material-theme-lighter github-light github-dark","use distkit::DistkitRedisKey;\nuse distkit::icounter::{\n    InstanceAwareCounterTrait,\n    StrictInstanceAwareCounter, StrictInstanceAwareCounterOptions,\n};\n\nlet prefix = DistkitRedisKey::try_from(\"my_app\".to_string())?;\nlet counter = StrictInstanceAwareCounter::new(\n    StrictInstanceAwareCounterOptions::new(prefix, conn),\n);\n","rust","",[161,190,191,215,232,241,255,261,267,317,338,361],{"__ignoreMap":188},[192,193,196,200,204,208,211],"span",{"class":194,"line":195},"line",1,[192,197,199],{"class":198},"sw1J6","use",[192,201,203],{"class":202},"sbgvK"," distkit",[192,205,207],{"class":206},"smGrS","::",[192,209,210],{"class":202},"DistkitRedisKey",[192,212,214],{"class":213},"sP7_E",";\n",[192,216,218,220,222,224,227,229],{"class":194,"line":217},2,[192,219,199],{"class":198},[192,221,203],{"class":202},[192,223,207],{"class":206},[192,225,226],{"class":202},"icounter",[192,228,207],{"class":206},[192,230,231],{"class":213},"{\n",[192,233,235,238],{"class":194,"line":234},3,[192,236,237],{"class":202},"    InstanceAwareCounterTrait",[192,239,240],{"class":213},",\n",[192,242,244,247,250,253],{"class":194,"line":243},4,[192,245,246],{"class":202},"    StrictInstanceAwareCounter",[192,248,249],{"class":213},",",[192,251,252],{"class":202}," StrictInstanceAwareCounterOptions",[192,254,240],{"class":213},[192,256,258],{"class":194,"line":257},5,[192,259,260],{"class":213},"};\n",[192,262,264],{"class":194,"line":263},6,[192,265,266],{"emptyLinePlaceholder":28},"\n",[192,268,270,274,278,281,284,286,290,293,297,301,303,306,309,312,315],{"class":194,"line":269},7,[192,271,273],{"class":272},"sbsja","let",[192,275,277],{"class":276},"su5hD"," prefix ",[192,279,280],{"class":206},"=",[192,282,283],{"class":202}," DistkitRedisKey",[192,285,207],{"class":206},[192,287,289],{"class":288},"sGLFI","try_from",[192,291,292],{"class":213},"(",[192,294,296],{"class":295},"sjJ54","\"",[192,298,300],{"class":299},"s_sjI","my_app",[192,302,296],{"class":295},[192,304,305],{"class":206},".",[192,307,308],{"class":288},"to_string",[192,310,311],{"class":213},"())",[192,313,314],{"class":206},"?",[192,316,214],{"class":213},[192,318,320,322,325,327,330,332,335],{"class":194,"line":319},8,[192,321,273],{"class":272},[192,323,324],{"class":276}," counter ",[192,326,280],{"class":206},[192,328,329],{"class":202}," StrictInstanceAwareCounter",[192,331,207],{"class":206},[192,333,334],{"class":288},"new",[192,336,337],{"class":213},"(\n",[192,339,341,344,346,348,350,353,355,358],{"class":194,"line":340},9,[192,342,343],{"class":202},"    StrictInstanceAwareCounterOptions",[192,345,207],{"class":206},[192,347,334],{"class":288},[192,349,292],{"class":213},[192,351,352],{"class":276},"prefix",[192,354,249],{"class":213},[192,356,357],{"class":276}," conn",[192,359,360],{"class":213},"),\n",[192,362,364],{"class":194,"line":363},10,[192,365,366],{"class":213},");\n",[158,368,369,372,373,376,377,380],{},[161,370,371],{},"StrictInstanceAwareCounterOptions::new"," defaults ",[161,374,375],{},"dead_instance_threshold_ms"," to ",[161,378,379],{},"30_000"," (30 s). Set the field directly to change it.",[178,382,384],{"id":383},"operations","Operations",[158,386,387,388,391],{},"Every call returns ",[161,389,390],{},"(cumulative, instance_count)",":",[183,393,395],{"className":185,"code":394,"language":187,"meta":188,"style":188},"let key = DistkitRedisKey::try_from(\"connections\".to_string())?;\n\n\u002F\u002F Add to \u002F subtract from this instance's contribution.\nlet (total, mine) = counter.inc(&key, 5).await?;\nlet (total, mine) = counter.dec(&key, 2).await?;\n\n\u002F\u002F Read without modifying.\nlet (total, mine) = counter.get(&key).await?;\n\n\u002F\u002F Set just this instance's slice (no epoch bump).\nlet (total, mine) = counter.set_on_instance(&key, 10).await?;\n\n\u002F\u002F Set the global total and bump the epoch.\nlet (total, mine) = counter.set(&key, 100).await?;\n\n\u002F\u002F Remove only this instance's contribution.\nlet (total, removed) = counter.del_on_instance(&key).await?;\n\n\u002F\u002F Delete the key globally and bump the epoch.\nlet (old_total, _) = counter.del(&key).await?;\n",[161,396,397,431,435,441,496,540,544,549,588,592,597,642,647,653,697,702,708,749,754,760],{"__ignoreMap":188},[192,398,399,401,404,406,408,410,412,414,416,419,421,423,425,427,429],{"class":194,"line":195},[192,400,273],{"class":272},[192,402,403],{"class":276}," key ",[192,405,280],{"class":206},[192,407,283],{"class":202},[192,409,207],{"class":206},[192,411,289],{"class":288},[192,413,292],{"class":213},[192,415,296],{"class":295},[192,417,418],{"class":299},"connections",[192,420,296],{"class":295},[192,422,305],{"class":206},[192,424,308],{"class":288},[192,426,311],{"class":213},[192,428,314],{"class":206},[192,430,214],{"class":213},[192,432,433],{"class":194,"line":217},[192,434,266],{"emptyLinePlaceholder":28},[192,436,437],{"class":194,"line":234},[192,438,440],{"class":439},"sutJx","\u002F\u002F Add to \u002F subtract from this instance's contribution.\n",[192,442,443,445,448,451,453,456,459,462,465,467,470,472,475,478,480,484,486,488,492,494],{"class":194,"line":243},[192,444,273],{"class":272},[192,446,447],{"class":213}," (",[192,449,450],{"class":276},"total",[192,452,249],{"class":213},[192,454,455],{"class":276}," mine",[192,457,458],{"class":213},")",[192,460,461],{"class":206}," =",[192,463,464],{"class":276}," counter",[192,466,305],{"class":206},[192,468,469],{"class":288},"inc",[192,471,292],{"class":213},[192,473,474],{"class":206},"&",[192,476,477],{"class":276},"key",[192,479,249],{"class":213},[192,481,483],{"class":482},"srdBf"," 5",[192,485,458],{"class":213},[192,487,305],{"class":206},[192,489,491],{"class":490},"sVHd0","await",[192,493,314],{"class":206},[192,495,214],{"class":213},[192,497,498,500,502,504,506,508,510,512,514,516,519,521,523,525,527,530,532,534,536,538],{"class":194,"line":257},[192,499,273],{"class":272},[192,501,447],{"class":213},[192,503,450],{"class":276},[192,505,249],{"class":213},[192,507,455],{"class":276},[192,509,458],{"class":213},[192,511,461],{"class":206},[192,513,464],{"class":276},[192,515,305],{"class":206},[192,517,518],{"class":288},"dec",[192,520,292],{"class":213},[192,522,474],{"class":206},[192,524,477],{"class":276},[192,526,249],{"class":213},[192,528,529],{"class":482}," 2",[192,531,458],{"class":213},[192,533,305],{"class":206},[192,535,491],{"class":490},[192,537,314],{"class":206},[192,539,214],{"class":213},[192,541,542],{"class":194,"line":263},[192,543,266],{"emptyLinePlaceholder":28},[192,545,546],{"class":194,"line":269},[192,547,548],{"class":439},"\u002F\u002F Read without modifying.\n",[192,550,551,553,555,557,559,561,563,565,567,569,572,574,576,578,580,582,584,586],{"class":194,"line":319},[192,552,273],{"class":272},[192,554,447],{"class":213},[192,556,450],{"class":276},[192,558,249],{"class":213},[192,560,455],{"class":276},[192,562,458],{"class":213},[192,564,461],{"class":206},[192,566,464],{"class":276},[192,568,305],{"class":206},[192,570,571],{"class":288},"get",[192,573,292],{"class":213},[192,575,474],{"class":206},[192,577,477],{"class":276},[192,579,458],{"class":213},[192,581,305],{"class":206},[192,583,491],{"class":490},[192,585,314],{"class":206},[192,587,214],{"class":213},[192,589,590],{"class":194,"line":340},[192,591,266],{"emptyLinePlaceholder":28},[192,593,594],{"class":194,"line":363},[192,595,596],{"class":439},"\u002F\u002F Set just this instance's slice (no epoch bump).\n",[192,598,600,602,604,606,608,610,612,614,616,618,621,623,625,627,629,632,634,636,638,640],{"class":194,"line":599},11,[192,601,273],{"class":272},[192,603,447],{"class":213},[192,605,450],{"class":276},[192,607,249],{"class":213},[192,609,455],{"class":276},[192,611,458],{"class":213},[192,613,461],{"class":206},[192,615,464],{"class":276},[192,617,305],{"class":206},[192,619,620],{"class":288},"set_on_instance",[192,622,292],{"class":213},[192,624,474],{"class":206},[192,626,477],{"class":276},[192,628,249],{"class":213},[192,630,631],{"class":482}," 10",[192,633,458],{"class":213},[192,635,305],{"class":206},[192,637,491],{"class":490},[192,639,314],{"class":206},[192,641,214],{"class":213},[192,643,645],{"class":194,"line":644},12,[192,646,266],{"emptyLinePlaceholder":28},[192,648,650],{"class":194,"line":649},13,[192,651,652],{"class":439},"\u002F\u002F Set the global total and bump the epoch.\n",[192,654,656,658,660,662,664,666,668,670,672,674,676,678,680,682,684,687,689,691,693,695],{"class":194,"line":655},14,[192,657,273],{"class":272},[192,659,447],{"class":213},[192,661,450],{"class":276},[192,663,249],{"class":213},[192,665,455],{"class":276},[192,667,458],{"class":213},[192,669,461],{"class":206},[192,671,464],{"class":276},[192,673,305],{"class":206},[192,675,166],{"class":288},[192,677,292],{"class":213},[192,679,474],{"class":206},[192,681,477],{"class":276},[192,683,249],{"class":213},[192,685,686],{"class":482}," 100",[192,688,458],{"class":213},[192,690,305],{"class":206},[192,692,491],{"class":490},[192,694,314],{"class":206},[192,696,214],{"class":213},[192,698,700],{"class":194,"line":699},15,[192,701,266],{"emptyLinePlaceholder":28},[192,703,705],{"class":194,"line":704},16,[192,706,707],{"class":439},"\u002F\u002F Remove only this instance's contribution.\n",[192,709,711,713,715,717,719,722,724,726,728,730,733,735,737,739,741,743,745,747],{"class":194,"line":710},17,[192,712,273],{"class":272},[192,714,447],{"class":213},[192,716,450],{"class":276},[192,718,249],{"class":213},[192,720,721],{"class":276}," removed",[192,723,458],{"class":213},[192,725,461],{"class":206},[192,727,464],{"class":276},[192,729,305],{"class":206},[192,731,732],{"class":288},"del_on_instance",[192,734,292],{"class":213},[192,736,474],{"class":206},[192,738,477],{"class":276},[192,740,458],{"class":213},[192,742,305],{"class":206},[192,744,491],{"class":490},[192,746,314],{"class":206},[192,748,214],{"class":213},[192,750,752],{"class":194,"line":751},18,[192,753,266],{"emptyLinePlaceholder":28},[192,755,757],{"class":194,"line":756},19,[192,758,759],{"class":439},"\u002F\u002F Delete the key globally and bump the epoch.\n",[192,761,763,765,767,770,772,775,777,779,781,783,785,787,789,791,793,795,797,799],{"class":194,"line":762},20,[192,764,273],{"class":272},[192,766,447],{"class":213},[192,768,769],{"class":276},"old_total",[192,771,249],{"class":213},[192,773,774],{"class":276}," _",[192,776,458],{"class":213},[192,778,461],{"class":206},[192,780,464],{"class":276},[192,782,305],{"class":206},[192,784,170],{"class":288},[192,786,292],{"class":213},[192,788,474],{"class":206},[192,790,477],{"class":276},[192,792,458],{"class":213},[192,794,305],{"class":206},[192,796,491],{"class":490},[192,798,314],{"class":206},[192,800,214],{"class":213},[178,802,804],{"id":803},"dead-instance-cleanup","Dead-instance cleanup",[158,806,807],{},"Each instance sends a heartbeat on every operation. If a process silently dies, surviving instances remove its contribution the next time any of them touches the same key:",[183,809,811],{"className":185,"code":810,"language":187,"meta":188,"style":188},"let opts = |conn| StrictInstanceAwareCounterOptions {\n    prefix: prefix.clone(),\n    connection_manager: conn,\n    dead_instance_threshold_ms: 30_000, \u002F\u002F 30 s\n};\nlet server_a = StrictInstanceAwareCounter::new(opts(conn1));\nlet server_b = StrictInstanceAwareCounter::new(opts(conn2));\n\nserver_a.inc(&key, 10).await?; \u002F\u002F cumulative = 10\nserver_b.inc(&key,  5).await?; \u002F\u002F cumulative = 15\n\n\u002F\u002F server_a goes offline. After 30 s, server_b's next call removes\n\u002F\u002F server_a's slice automatically.\nlet (total, _) = server_b.get(&key).await?; \u002F\u002F total = 5 once cleaned up\n",[161,812,813,836,854,865,880,884,912,938,942,975,1008,1012,1017,1022],{"__ignoreMap":188},[192,814,815,817,820,822,825,828,831,833],{"class":194,"line":195},[192,816,273],{"class":272},[192,818,819],{"class":276}," opts ",[192,821,280],{"class":206},[192,823,824],{"class":206}," |",[192,826,827],{"class":276},"conn",[192,829,830],{"class":206},"|",[192,832,252],{"class":202},[192,834,835],{"class":213}," {\n",[192,837,838,841,843,846,848,851],{"class":194,"line":217},[192,839,840],{"class":276},"    prefix",[192,842,391],{"class":206},[192,844,845],{"class":276}," prefix",[192,847,305],{"class":206},[192,849,850],{"class":288},"clone",[192,852,853],{"class":213},"(),\n",[192,855,856,859,861,863],{"class":194,"line":234},[192,857,858],{"class":276},"    connection_manager",[192,860,391],{"class":206},[192,862,357],{"class":276},[192,864,240],{"class":213},[192,866,867,870,872,875,877],{"class":194,"line":243},[192,868,869],{"class":276},"    dead_instance_threshold_ms",[192,871,391],{"class":206},[192,873,874],{"class":482}," 30_000",[192,876,249],{"class":213},[192,878,879],{"class":439}," \u002F\u002F 30 s\n",[192,881,882],{"class":194,"line":257},[192,883,260],{"class":213},[192,885,886,888,891,893,895,897,899,901,904,906,909],{"class":194,"line":263},[192,887,273],{"class":272},[192,889,890],{"class":276}," server_a ",[192,892,280],{"class":206},[192,894,329],{"class":202},[192,896,207],{"class":206},[192,898,334],{"class":288},[192,900,292],{"class":213},[192,902,903],{"class":288},"opts",[192,905,292],{"class":213},[192,907,908],{"class":276},"conn1",[192,910,911],{"class":213},"));\n",[192,913,914,916,919,921,923,925,927,929,931,933,936],{"class":194,"line":269},[192,915,273],{"class":272},[192,917,918],{"class":276}," server_b ",[192,920,280],{"class":206},[192,922,329],{"class":202},[192,924,207],{"class":206},[192,926,334],{"class":288},[192,928,292],{"class":213},[192,930,903],{"class":288},[192,932,292],{"class":213},[192,934,935],{"class":276},"conn2",[192,937,911],{"class":213},[192,939,940],{"class":194,"line":319},[192,941,266],{"emptyLinePlaceholder":28},[192,943,944,947,949,951,953,955,957,959,961,963,965,967,969,972],{"class":194,"line":340},[192,945,946],{"class":276},"server_a",[192,948,305],{"class":206},[192,950,469],{"class":288},[192,952,292],{"class":213},[192,954,474],{"class":206},[192,956,477],{"class":276},[192,958,249],{"class":213},[192,960,631],{"class":482},[192,962,458],{"class":213},[192,964,305],{"class":206},[192,966,491],{"class":490},[192,968,314],{"class":206},[192,970,971],{"class":213},";",[192,973,974],{"class":439}," \u002F\u002F cumulative = 10\n",[192,976,977,980,982,984,986,988,990,992,995,997,999,1001,1003,1005],{"class":194,"line":363},[192,978,979],{"class":276},"server_b",[192,981,305],{"class":206},[192,983,469],{"class":288},[192,985,292],{"class":213},[192,987,474],{"class":206},[192,989,477],{"class":276},[192,991,249],{"class":213},[192,993,994],{"class":482},"  5",[192,996,458],{"class":213},[192,998,305],{"class":206},[192,1000,491],{"class":490},[192,1002,314],{"class":206},[192,1004,971],{"class":213},[192,1006,1007],{"class":439}," \u002F\u002F cumulative = 15\n",[192,1009,1010],{"class":194,"line":599},[192,1011,266],{"emptyLinePlaceholder":28},[192,1013,1014],{"class":194,"line":644},[192,1015,1016],{"class":439},"\u002F\u002F server_a goes offline. After 30 s, server_b's next call removes\n",[192,1018,1019],{"class":194,"line":649},[192,1020,1021],{"class":439},"\u002F\u002F server_a's slice automatically.\n",[192,1023,1024,1026,1028,1030,1032,1034,1036,1038,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061],{"class":194,"line":655},[192,1025,273],{"class":272},[192,1027,447],{"class":213},[192,1029,450],{"class":276},[192,1031,249],{"class":213},[192,1033,774],{"class":276},[192,1035,458],{"class":213},[192,1037,461],{"class":206},[192,1039,1040],{"class":276}," server_b",[192,1042,305],{"class":206},[192,1044,571],{"class":288},[192,1046,292],{"class":213},[192,1048,474],{"class":206},[192,1050,477],{"class":276},[192,1052,458],{"class":213},[192,1054,305],{"class":206},[192,1056,491],{"class":490},[192,1058,314],{"class":206},[192,1060,971],{"class":213},[192,1062,1063],{"class":439}," \u002F\u002F total = 5 once cleaned up\n",[158,1065,1066],{},"Cleanup is lazy: it happens on the next operation, not on a timer. A key nobody touches keeps its stale contributions until someone reads or writes it.",[1068,1069,1070],"style",{},"html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}",{"title":188,"searchDepth":195,"depth":217,"links":1072},[1073,1074,1075],{"id":180,"depth":217,"text":181},{"id":383,"depth":217,"text":384},{"id":803,"depth":217,"text":804},"Immediately consistent per-instance counting with epoch-based correctness.","md",{},{"icon":68},{"title":87,"description":1076},"FpqBU_T1r1z1dgOMPdsppuejSlVxiQwqOw__2X-04EU",[1083,1085],{"title":62,"path":81,"stem":82,"description":1084,"icon":85,"children":-1},"Counters where each instance owns a slice of the total, with automatic cleanup of dead instances.",{"title":91,"path":92,"stem":93,"description":1086,"icon":73,"children":-1},"Buffered per-instance counting for high-frequency updates.",1781569582576]