feat(learning): add roadmap "Cache-aside with Redis" (en/fr)#71
Merged
Conversation
Derssa
approved these changes
Jul 17, 2026
OthmaneZ05
added a commit
that referenced
this pull request
Jul 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary of Changes
Adds the second flagship learning roadmap, "Cache-aside with Redis" (
roadmaps/cache-aside-redis.json+ French translationcache-aside-redis.fr.json, sameidand step ids). Pure content at the frozen v1 roadmap format — zero backend/frontend changes.The arc (8 steps, ~30 min, sequel to the Nimbus Books story): rebuild a minimal store (web + PostgreSQL, least-privilege security groups from day one) → feel a catalog page that costs ~1500 ms of database time on every request → add a Redis node → implement the cache-aside read path at the terminal (
GET→ miss → query →SETEX180 s) → prove the hit with the badge, the Key Explorer and a liveTTLcountdown → finish on cache invalidation: insert a new book, watch customers get a stale page, validate while stale to read the failure, thenDELthe key.Uses 6 validator types:
container_running,table_exists,edge_exists,http_get_contains,redis_key_exists(globcache:*climax), and aport_deniedlock-in check that keeps the cache out of the database. Key/table names (cache:*,books) are chosen not to collide with the explorer demo seeds. Validator order in the cache-aside step is deliberate: the HTTP check's own request causes the first miss that fills the cache, so the key check deterministically fails while the old (non-caching) server is still running.Types of Changes
Verification & Testing
Automated Checks
npm run lintsuccessfully with no errorsnpm run buildsuccessfully with no compilation errorsnpm testsuccessfully (all tests pass)Both files pass
npm run roadmap:validate. Backend: 246 tests green. Frontend: 225 tests green.Manual Verification
Played end-to-end against real Docker containers, twice, with an API driver that mirrors the canvas UI (same network-config/save semantics, prepended SG rules, real
docker execfor terminal steps):port_deniedlock-in check red until tightened back to Source=web; the stale-catalog step validated before invalidation fails withserved from cachevisible in the observed excerpt; stoppingwebthen starting it revives the app via the baked.bashrcboot line; stoppingcacheleaves the store up (slow,served from database) thanks to the client timeouts + try/except taught in the step.http://localhost:<port>link on the hit-proving step serves the store from the host; the Redis Key Explorer showscache:booksnext to the demo keys andTTL cache:bookscounts down in the Redis Shell; switching EN→FR mid-roadmap keeps the progression and reopening loads the French file; killing and restarting the backend mid-roadmap resumes on the right step; the finale (stale fail →DEL→ pass) completes the roadmap in French.TTLreturns the configured 180 s.Checklist