這是Redis AI 挑戰賽:超越快取的提交內容

我建造了什麼

MemMouse — 一個微型控制平面,用於在 Redis 之上管理專案 → 命名空間 → 服務 → 策略。它是一個深色、透明的 Next.js UI,可讓您:

  • 建立專案和命名空間,設定配額/TTL/驅逐,凍結/解凍寫入。

  • 透過關鍵模式、範圍和速率限制將服務綁定到命名空間。

  • 頒發/輪換服務令牌,並為您的微服務下載可立即使用的代理配置

  • 查看專案概覽(容量、庫存、操作快照、頂級命名空間、最近事件)。

這是一個黑客馬拉松演示,但架構傾向於生產:Redis 是主要的元資料存儲,UI 被清楚地分為控制平面(Next.js API 路由)和資料平面(Redis)。


示範

  • GitHubhttps://github.com/simplizio/memmouse-next-ui

  • Docker 中心docker pull simplizio/memmouse-next-ui:latest

使用 Docker Compose 執行:

# docker-compose.yml in repo
docker compose pull
docker compose up -d
# open http://localhost:3000/projects
# (optional) seed demo data:
# curl "http://localhost:3000/api/dev/seed?force=1&drop=1"

為什麼重要

Redis 本身就像一張白紙。你可以儲存任何你想要的資料,但資料的組織完全由開發者決定。鍵前綴、存取策略、命名約定——一切都需要根據專案和團隊的具體情況進行調整。因此,你得到的只是一堆雜亂無章的資料,現有的監控工具幾乎無法有效管理。

巨大的碎片堆

我們建議將這些堆積如山的資料視為值得單獨服務的物件。在每個專案內部,資料被組織到給定大小的命名空間中,並為微服務提供明確定義的存取權限。

架上整齊貼有標籤的盒子

這項原則使得記憶體管理流程能夠大規模集中化。策略可以自動化並整合到企業環境中—無論是雲端環境還是自訂 DevOps 設定。

記憶體分配部門的工廠車間

透過應用此工具,團隊可以真正控制和觀察整個系統。在微服務架構中,要實現這一點通常成本高且容易出錯。而採用我們的方法,生活變得輕鬆多了。

用雙筒望遠鏡觀察的老鼠

截圖:

專案概覽(容量條、計數、操作、頂級命名空間)

專案概述

專案記憶景觀

命名空間詳細資訊(策略編輯、使用欄位、綁定)

命名空間概述

命名空間內存詳細訊息

服務(列表+詳細訊息,包括令牌輪換和下載配置)

服務清單

服務記憶體存取管理


我如何使用 Redis 8

除了快取之外,我還使用 Redis 作為控制平面資料庫以及未來串流媒體/事件處理的基礎。具體來說:

Redis中的資料模型

  • 字串儲存 JSON 記錄:
- `mm:project:{id}`, `mm:namespace:{projectId}:{nsId}`, `mm:binding:{projectId}:{nsId}:{serviceId}`, `mm:service:{projectId}:{serviceId}`
  • 集合充當索引:
- `mm:idx:projects` (project ids)
- `mm:idx:namespaces:{projectId}` (ns ids per project)
- `mm:idx:bindings:{projectId}:{nsId}` (service ids per ns)
- **Reverse index**: `mm:idx:bindings_by_service:{projectId}:{serviceId}` (ns ids per service)
  • 原子性:更新在單一MULTI/EXEC中同時觸及正向和反向索引。

  • 吞吐量:讀取大量記錄時使用管道;管理掃描使用SCAN

  • 持久性:示範在 Docker 中使用 AOF( appendonly yes );可以切換到tmpfs以實現超快速的開發執行。

mm:project:...                  -> JSON
mm:idx:projects                 -> Set(projectId)
mm:namespace:<projId>:<nsId>    -> JSON
mm:idx:namespaces:<projId>      -> Set(nsId)
mm:binding:<projId>:<nsId>:<svcId> -> JSON
mm:idx:bindings:<projId>:<nsId> -> Set(serviceId)
mm:idx:bindings_by_service:<projId>:<svcId> -> Set(nsId)

控制平面 → 代理切換

每個服務都有令牌,可以從以下位置取得我們簽署的配置(演示使用 Bearer 令牌檢查):

GET /api/projects/:projectId/services/:serviceId/config
Authorization: Bearer <token>

此配置包含 Redis 端點、綁定(模式、權限、作用域、速率限制)以及遙測目標。一個小型的 FastAPI 代理可以從此啟動,並在客戶端強制執行寫入模式,同時我們致力於伺服器端的強制執行。

為什麼選擇 Redis(以及下一步是什麼)

  • 簡單、富有表現力的原語(字串/集合)使得模式演變變得簡單。

  • 透過清單和儀表板的管道快速扇出

  • 鋪路:

- **Streams** for CDC + replay/DLQ,
- **Pub/Sub** for live UI events,
- **ACL materialization** per binding (key patterns → Redis users),
- Backups via RDB/AOF snapshots per namespace.

團隊備註:單獨提交。

Dev.to 上的 @vsoldatov

LinkedIn


原文出處:https://dev.to/vsoldatov/memmouse-enterprise-memory-management-m9o


共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝8   💬8   ❤️13
402
🥈
我愛JS
📝1   💬6   ❤️4
88
🥉
酷豪
📝1   ❤️1
50
#4
AppleLily
📝1   💬4   ❤️1
38
#5
💬3  
10
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次