Locke is a drop-in Keycloak distribution that runs Keycloak's caching on Redis instead of an embedded JGroups cluster. Same admin console, same base de données, one switch (KC_CACHE=redis).
What is Locke
Locke is the upstream Keycloak codebase plus one thing: a Redis cache backend behind a single switch. Same SPIs, same admin console, same base de données schema. Flip it back and you have ordinary Keycloak.
Basculez KC_CACHE=infinispan|redis au démarrage. Aucun changement de code, aucune migration.
Entièrement open source : Keycloak standard plus un backend de cache Redis, rien de verrouillé.
Fonctionne avec n'importe quel Redis géré. Colocalisé ou externe performent de la même manière.
Pas de découverte de cluster, de gestion split-brain ou de transfert d'état. Redis coordonne.
The benchmark
Un cluster de production à 3 instances, face à face. Le débit est égal. La différence apparaît au moment où un nœud meurt.
| Load (logins/sec) | Stock / Infinispan | Locke / Redis | Parity |
|---|---|---|---|
| 80 | 274 req/s | 274 req/s | 100% |
| 160 | 548 req/s | 548 req/s | 100% |
| 250 | 856 req/s | 856 req/s | 100% |
Les barres utilisent une échelle compressée pour garder Locke visible ; l'écart est d'environ 15-34x. Lorsqu'un nœud Infinispan meurt, le cluster se bloque sur un rééquilibrage JGroups et un transfert d'état. Locke continue de servir depuis Redis.
Cluster à 3 instances, Keycloak 26.6.1, start --optimized, flux keycloak-benchmark Gatling AuthorizationCode. Méthodologie complète dans le rapport.
Why it matters
A lost node is a sub-second blip, not a 31-second JGroups rebalance stall that hangs authentification mid-incident.
Across an Infinispan-version boundary the recommended Keycloak path is a brief planned restart; Locke can do that same mise à niveau as a rolling update because there is no JGroups version handshake. Keycloak doesn't guarantee no-downtime minor mises à niveau in general, so this is one fewer constraint, not a blanket promise.
Pointez Keycloak vers le Redis géré que vous exécutez et surveillez déjà. Pas de découverte JGroups, pas de transfert d'état, un système distribué de moins à exploiter.
Quick start
Exécutez l'image Locke en mode production et pointez-la vers votre Redis.
The honest part
An honest trade. Moving local caches to Redis adds a few milliseconds of read latency at moderate load (both stay under 170ms p99 to 250 logins/sec). And Redis does not raise Keycloak's realm-count ceiling. That limit is base de données-bound, not cache-bound. We benchmark these things and say so.
Open source, Apache 2.0, benchmark en mode production.