# Menu Tree Redis Cache Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Add Redis caching for `/menu/tree` without changing the endpoint contract. **Architecture:** Cache the full menu tree in Redis behind a single stable key, then apply the existing `condition` filter in memory on the cached tree result. Evict the cache only after successful menu save, update, and remove operations so reads stay fast and behavior stays aligned with the database. **Tech Stack:** Spring Boot, MyBatis-Plus, Jedis-based `RedisService`, JUnit 5, Mockito --- ### Task 1: Lock behavior with controller tests **Files:** - Create: `rsf-server/src/test/java/com/vincent/rsf/server/system/controller/MenuControllerTest.java` - Modify: `rsf-server/src/main/java/com/vincent/rsf/server/system/controller/MenuController.java` - [ ] **Step 1: Write the failing test** ```java @Test void treeReturnsCachedTreeBeforeQueryingDatabase() { // arrange cached tree // call controller.tree(...) // assert menuService.list(...) is never called } ``` - [ ] **Step 2: Run test to verify it fails** Run: `mvn -pl rsf-server -Dtest=MenuControllerTest test` Expected: FAIL because `MenuController` does not use Redis for `/menu/tree` - [ ] **Step 3: Write minimal implementation** ```java List treeData = redisService.get(MENU_TREE_CACHE_FLAG, MENU_TREE_CACHE_KEY); if (treeData == null) { treeData = loadAndBuildTree(); redisService.set(MENU_TREE_CACHE_FLAG, MENU_TREE_CACHE_KEY, treeData, MENU_TREE_CACHE_TTL_SECONDS); } ``` - [ ] **Step 4: Run test to verify it passes** Run: `mvn -pl rsf-server -Dtest=MenuControllerTest test` Expected: PASS - [ ] **Step 5: Commit** ```bash git add docs/superpowers/plans/2026-03-26-menu-tree-redis-cache.md rsf-server/src/main/java/com/vincent/rsf/server/system/controller/MenuController.java rsf-server/src/test/java/com/vincent/rsf/server/system/controller/MenuControllerTest.java git commit -m "feat: cache menu tree in redis" ```