vault backup: 2026-05-25 22:24:47

This commit is contained in:
hhs
2026-05-25 22:24:47 +08:00
parent 7e4671fe25
commit 9000c90abe
2 changed files with 22 additions and 14 deletions
@@ -134,12 +134,12 @@ entry := ht.table[idx] // 拿到链表头,遍历查找
```mermaid
flowchart TB
S1["1. 分配 ht[1]"] --> S2["2. rehashidx = 0, 开始渐进式迁移"]
S2 --> S3["3. 每次 CRUD 操作时, 迁移 ht[0] 上 rehashidx 指向的整个 bucket 到 ht[1]"]
S3 --> S4["4. rehashidx++"]
S1["分配 ht[1]"] --> S2["rehashidx = 0, 开始渐进式迁移"]
S2 --> S3["每次 CRUD 操作时, 迁移 ht[0] 上 rehashidx 指向的整个 bucket 到 ht[1]"]
S3 --> S4["rehashidx++"]
S4 --> S5{"所有 bucket 已迁移?"}
S5 -->|"否"| S3
S5 -->|"是"| S6["5. 释放 ht[0], ht[1] 变成 ht[0], 分配新空 ht[1]"]
S5 -->|"是"| S6["释放 ht[0], ht[1] 变成 ht[0], 分配新空 ht[1]"]
classDef step fill:#e1f5fe,stroke:#2196f3
classDef check fill:#fff3e0,stroke:#ff9800
@@ -261,8 +261,8 @@ flowchart LR
| 数据类型 | hashtable 的角色 | 特殊之处 |
|---------|-----------------|---------|
| **Hash** | 唯一存储结构(大 Hash 时) | field→value 直接映射 |
| **Set** | 唯一存储结构(含非整数元素时) | member→NULL,只用 key |
| **Hash** | 存储结构之一(超过 `hash-max-listpack-entries` / `hash-max-listpack-value` 阈值后;小 Hash 优先使用 listpack) | field→value 直接映射 |
| **Set** | 存储结构之一(含非整数元素或超过 `set-max-intset-entries` 阈值时;全整数小集合优先使用 intset) | member→NULL,只用 key |
| **ZSet** | skiplist 的"辅助索引" | member→score,配合 skiplist 实现 O(1) 定位 |
> [!insight] 为什么 Set 用 hashtable 而不是直接存数组?