7.10. ユーザーキャッシュ
ユーザーオブジェクトが ID、ユーザー名、またはメールクエリーによって読み込まれると、キャッシュされます。ユーザーオブジェクトがキャッシュされている場合、これは UserModel
インターフェイス全体を繰り返し処理し、この情報をローカルのインメモリーのみのキャッシュにプルします。クラスターでは、このキャッシュは引き続きローカルに存在しますが、インバリデーションキャッシュになります。ユーザーオブジェクトが変更されると、これはエビクトされます。このエビクションイベントはクラスター全体に伝播され、他のノードのユーザーキャッシュも無効になります。
7.10.1. ユーザーキャッシュの管理
KeycloakSession.getProvider(UserCache.class)
を呼び出してユーザーキャッシュにアクセスできます。
/** * All these methods effect an entire cluster of Keycloak instances. * * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */ public interface UserCache extends UserProvider { /** * Evict user from cache. * * @param user */ void evict(RealmModel realm, UserModel user); /** * Evict users of a specific realm * * @param realm */ void evict(RealmModel realm); /** * Clear cache entirely. * */ void clear(); }
特定のユーザー、特定のレルムに含まれるユーザー、またはキャッシュ全体をエビクトする方法があります。
7.10.2. OnUserCache Callback インターフェイス
プロバイダー実装に固有の追加情報をキャッシュすることもできます。ユーザーストレージ SPI には、ユーザーがキャッシュされるたびにのコールバック (org.keycloak.models.cache.OnUserCache
) が設定されます。
public interface OnUserCache { void onCache(RealmModel realm, CachedUserModel user, UserModel delegate); }
このコールバックが必要な場合は、プロバイダークラスはこのインターフェイスを実装する必要があります。UserModel
パラメーターは、プロバイダーによって返される UserModel
インスタンスです。CachedUserModel
は、拡張された UserModel
インターフェイスです。これは、ローカルストレージでローカルにキャッシュされるインスタンスです。
public interface CachedUserModel extends UserModel { /** * Invalidates the cache for this user and returns a delegate that represents the actual data provider * * @return */ UserModel getDelegateForUpdate(); boolean isMarkedForEviction(); /** * Invalidate the cache for this model * */ void invalidate(); /** * When was the model was loaded from database. * * @return */ long getCacheTimestamp(); /** * Returns a map that contains custom things that are cached along with this model. You can write to this map. * * @return */ ConcurrentHashMap getCachedWith(); }
CachedUserModel
インターフェイスを使用すると、ユーザーをキャッシュから強制的に削除 (エビクト) し、プロバイダーの UserModel
インスタンスを取得できます。getCachedWith()
メソッドは、ユーザーに関連する追加情報をキャッシュできるマップを返します。たとえば、認証情報は UserModel
インターフェイスの一部ではありません。認証情報をメモリーにキャッシュする必要がある場合は OnUserCache
を実装し、getCachedWith()
メソッドを使用してユーザーの認証情報をキャッシュします。
7.10.3. キャッシュポリシー
ユーザーストレージプロバイダーの管理者向けのコンソール管理ページで、固有のキャッシュポリシーを指定できます。