本文将指导您如何快速搭建redis cluster开发环境.
-
确认您已经安装了
docker或podman容器运行时. -
使用对应命令将
redis:7.0镜像拉取到本地(也可以用其它版本,但集群必须一致).
| 算法 | 核心思想 | 预处理时间 | 预处理空间 | 匹配时间复杂度(最好/平均/最坏) | 算法难度 | 优势 | 劣势 |
|---|---|---|---|---|---|---|---|
| 朴素 (Naïve) | 从左到右逐字符比较,失败后右移一位 | O(1) | O(1) | O(n) / O(n+m) / O(nm) | 极低 | 实现极其简单,无额外空间,短串时常因缓存友好而很快 | 最坏情况极慢(如文本和模式均为"aaaaa..."),无法利用任何跳过信息 |
| KMP | 前缀函数(π表)避免文本回溯 | O(m) | O(m) | O(n) / O(n) / O(n) | 中等 | 严格线性时间,最坏情况下也有保证;文本指针永不回溯,适合流式处理 | 需要O(m)额外空间;平均性能往往不如BM/Horspool等跳跃算法 |
| Boyer‑Moore (BM) | 从右向左比较,坏字符 + 好后缀双规则跳跃 | O(m+σ) | O(m+σ) | O(n/m) / O(n/m) / O(nm) | 复杂 | 平均性能极佳(尤其是大字母表、长模式串),跳跃步长很大 | 预处理较复杂,空间较大(σ表),最坏情况可能退化为O(nm);对短模式串优势不明显 |
| Horspool (BMH) | BM的简化版,仅使用坏字符规则,且每次看窗口最后一个字符 | O(m+σ) | O(σ) | O(n) / 通常接近O(n/m) / O(nm) | 简单 | 实现简单,跳跃效果依然很好,实际应用中常比完整BM更快 | 最坏情况下仍可能退化为O(nm);对于某些重复模式跳跃不如好后缀规则 |
| Sunday | 借鉴BM,但失败时看窗口下一个字符决定跳跃 | O(m+σ) | O(σ) | O(n) / 通常接近O(n/m) / O(nm) | 简单 | 跳跃更激进,平均性能甚至优于Horspool,短串表现优异 | 同样存在最坏退化;对大字母表需要构建跳转表 |
| Two‑Way | 关键分解 + 周期性跳跃,匹配时先扫右侧再扫左侧 | O(m) | O(1) | O(n) / O(n) / O(n) | 中等偏难 | O(n)最坏时间 + O(1)空间,完美平衡,被glibc/musl等标准库采用 | 实现比KMP复杂;平均跳跃不如BM系列激进;长模式串预处理稍慢 |
| Rabin‑Karp | 滚动哈希(如Rabin指纹)比较数值 | O(m) | O(1) | O(n) / O(n+m) / O(nm)(哈希冲突时) | 中等 | 适合多模式匹配(一次扫描匹配多个模式),可扩展至二维模式(矩阵) | 哈 |
环境压测数据工具
bench_fd_verify.c - 验证stat和fcntl 验证 fd有效性 只读性能数据
bench_pipe.c - pipe 与 sockpair 的 读/写 吞吐与延迟 性能数据