🗺️ الخريطة
٣ فصول
فصل واحد
٣ فصول
٣ فصول
فصل واحد
المذكرة دي بتجاوب على سؤالين. الأول: إمتى وليه وإزاي تحط كاش قدام الداتابيز؟ والتاني: إزاي الكاش اللي المفروض يحمي الداتابيز يبقى هو نفسه السبب إنها تقع؟
المشكلة بالظبط كده:
- عندك key سخن: بيتقري أكتر من 10,000 مرة في الثانية.
- الـ TTL بتاعه خلص: فجأة كل الـ requests مش لاقية القيمة في الكاش.
- كلهم راحوا للداتابيز: في نفس اللحظة، بنفس الـ query.
- الداتابيز بطّأت: فالـ requests فضلت مستنية، والـ connection pool اتملى للآخر.
- الـ requests الجديدة بتفشل: قبل ما تبدأ أصلًا، لأنها مش لاقية connection.
الحل الأساسي: request واحد بس يروح للداتابيز ويجيب القيمة ويحطها في الكاش، والباقي يستنوه. ومعاه: إن الـ TTLs كلها متخلصش في نفس اللحظة (jitter).
terminal
docker run -d --rm --name redis -p 6379:6379 redis:7-alpinedocker run -d --rm --name pg -e POSTGRES_PASSWORD=pass -p 5432:5432 postgres:16-alpinemkdir cache-lab && cd cache-lab && pnpm init && pnpm add ioredis pg lru-cacheexport REDIS_URL=redis://127.0.0.1:6379export DATABASE_URL=postgres://postgres:pass@127.0.0.1:5432/postgres