--- title: "1.15.12 — Opt-in read-replica routing for the database and Redis" description: "This release adds opt-in read-replica support for both the database and Redis — off unless you configure it — plus three bug fixes: safer Redis URL credential encoding, a fix for provisioning a brand-new empty account, and a fix for the admin assistant's rate-limit inspection tool." date: "2026-08-21" tags: ["release"] canonical: "https://django-mojo.sitesmojo.com/changelog/1-15-12/" --- This release adds opt-in read-replica support for both the database and Redis — off unless you configure it — plus three bug fixes: safer Redis URL credential encoding, a fix for provisioning a brand-new empty account, and a fix for the admin assistant's rate-limit inspection tool. ### Added - Opt-in database reader routing: set `DATABASE_READER_HOST` to route safe (GET/HEAD/OPTIONS) reads to a replica while writes and everything else stay pinned to primary. Includes `use_reader()`/`use_primary()` helpers to force routing for a specific block of code. - Opt-in Redis reader connections via `get_connection(reader=True)` / `get_client(reader=True)`, configured with `REDIS_READER_URL` or `REDIS_READER_SERVER`. Falls back to the primary Redis connection when no reader is configured. ### Changed - Reads from the account app are always pinned to primary under reader routing, since stale replica data on auth/session checks is unsafe. ### Fixed - Redis URLs with a `/` in the username or password are now fully percent-encoded, preventing a malformed connection URL. - Provisioning a brand-new, empty account no longer fails outright — a fresh account's absent KMS alias was being treated as a hard failure instead of the expected empty state. - The admin assistant's rate-limit inspection tool now actually works — it was silently failing on a bad import and scanning the wrong Redis key pattern.