Поставьте слой cache-aside (Redis/Memcached) перед БД, чтобы чтения попадали в память, давайте записям TTL и инвалидируйте при записи, добавьте защиту от stampede, чтобы холодный ключ не обрушил thundering herd на БД, и распределяйте горячие ключи по репликам, чтобы один популярный ключ не расплавил один узел.
┌── hit ──▶ return value
request ──▶ cache│
└── miss ─▶ lock ─▶ DB read ─▶ set(TTL) ─▶ return
│
(only ONE miss populates; others wait)
DB writes ──▶ invalidate/update key
