Skip to content

动手实验

English · 中文版

先在仓库根目录安装:

uv sync

三个示例都调用 Direct API,并且只创建临时状态。

1. AOF 崩溃恢复

uv run python examples/aof_crash_recovery.py

预期关键输出:

1. SET before crash: Ok(message=b'OK')
2. Simulating a crash (no graceful AOF drain)...
3. GET after restart: Bytes(value=b'durable')
4. Recovery verified: True

重点观察 AofPolicy.ALWAYS 边界:成功 SET 在释放回复前先跨过 AOF 持久化 闸门。simulate_crash() 跳过优雅排空,但重新打开并重放后仍恢复该值。

2. 确定性 LFU 淘汰

uv run python examples/lfu_eviction.py

预期关键输出:

cold (least frequent, expected missing): Bytes(value=None)
hot  (expected retained): Bytes(value=b'x')
new  (expected retained): Bytes(value=b'xxx...')

重点通过公开回复而非内部计数观察结果。读取 hot 四次后,其频率高于 cold; 插入 new 超过逻辑内存预算,因此确定性的 allkeys-LFU 淘汰 cold

3. 部分重同步与全量同步回退

uv run python examples/replication_resync.py

预期关键输出:

Initial attachment: full
Short disconnect resumed with: partial
Cursor older than backlog resumed with: full

第一次断连只漏掉仍在 backlog 中的一个批次,复制游标可以续传;第二次漏掉的历史 超过两批 backlog 的保留范围,必须传输完整状态。这是进程内的 PSYNC 决策逻辑 模型,不是 Redis 线复制。

继续查看可执行证据

可按行为矩阵找到每个机制对应的 pytest 节点,或运行:

uv run pytest -q