WebSocket 实现实时缓存命中率监测需构建“采集→封装→可视化”轻量闭环:服务端定时拉取 Redis/Memcached 指标、计算滚动命中率并 JSON 推送;前端监听消息、动态更新 DOM 并分组渲染。

直接用 WebSocket 实现网页端实时缓存命中率监测,核心不是“把 Redis 指标塞进 ws”,而是构建一条从服务端指标采集 → 协议封装 → 前端可视化闭环的轻量通道。它不替代 Prometheus,但能补足秒级感知和运营看板需求。
服务端:统一采集 + 结构化推送
缓存系统(如 Redis、Memcached)本身不支持 WebSocket 输出,需在中间加一层“指标桥接服务”:
- 定时拉取缓存指标:例如每 3 秒调用
INFO(Redis)或stats(Memcached),提取keyspace_hits/keyspace_misses或cmd_get中的hit/miss计数 - 计算滚动命中率:用最近两个采样点差值算出 3 秒粒度的命中率,避免初始冷启动偏差,公式为
(hits_now − hits_prev) / ((hits_now − hits_prev) + (misses_now − misses_prev)) × 100 - 通过 WebSocket 主动广播:将结果封装为 JSON,例如
{"type":"cache-hit-rate","instance":"redis-prod-01","value":92.7,"ts":1717023456},推送给所有已连接的监控页面
前端:连接管理 + 动态渲染
网页使用原生 WebSocket 接收数据,不做复杂状态同步,专注展示:
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
- 建立连接后监听
onmessage,解析 JSON 并更新 DOM 元素,如document.getElementById('hit-rate').textContent = data.value.toFixed(1) + '%' - 对多个缓存实例做分组展示:服务端在消息中带
instance和cluster字段,前端用 Map 维护各实例最新值,自动渲染表格或卡片列表 - 添加视觉反馈:命中率 transition: content 0.3s 配合伪元素或 JS 插值)
可靠性增强:心跳 + 断连恢复
避免页面长时间运行后失联或数据停滞:
立即学习“前端免费学习笔记(深入)”;
- 前端每 10 秒发一次
{"type":"ping"},服务端响应{"type":"pong","ts":...},超时 2 次未收到则主动重连 - 连接关闭时(
onclose),显示“离线中…”并启动指数退避重连(1s → 2s → 4s…上限 30s) - 服务端记录每个连接的最后活跃时间,若 60 秒无 ping,主动 close 连接,防止僵尸连接堆积
与现有监控体系协同
WebSocket 不是孤岛,要和 Prometheus、Grafana 形成分工:
- WebSocket 负责“此刻正在发生什么”:面向运维人员快速扫视、大屏轮播、告警弹窗触发
- Prometheus 负责“过去一小时趋势如何”:存储长期指标、做聚合计算、驱动告警规则(如连续 5 分钟
- 可让 WebSocket 桥接服务同时向 Prometheus Pushgateway 推送一份指标,实现双写,确保数据源头一致


















