7.9. 사용자 캐시
사용자 오브젝트가 ID, 사용자 이름 또는 이메일에 의해 로드되면 캐시됩니다. 사용자 오브젝트가 캐시되는 경우 전체 UserModel
인터페이스를 반복하고 이 정보를 로컬 메모리 전용 캐시로 가져옵니다. 클러스터에서 이 캐시는 여전히 로컬이지만 무효화 캐시가 됩니다. 사용자 오브젝트가 수정되면 제거됩니다. 이 제거 이벤트는 다른 노드의 사용자 캐시도 무효화되도록 전체 클러스터에 전파됩니다.
7.9.1. 사용자 캐시 관리
KeycloakSession.userCache()
를 호출하여 사용자 캐시에 액세스할 수 있습니다.
/** * 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.9.2. OnUserCache 콜백 인터페이스
공급자 구현과 관련된 추가 정보를 캐시할 수 있습니다. 사용자 스토리지 SPI에는 org.keycloak.models.cache.OnUserCache
사용자가 캐시될 때마다 콜백이 있습니다.
public interface OnUserCache { void onCache(RealmModel realm, CachedUserModel user, UserModel delegate); }
공급자 클래스는 이 콜백을 원하는 경우 이 인터페이스를 구현해야 합니다. UserModel
delegate 매개변수는 공급자가 반환한 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.9.3. 캐시 정책
사용자 스토리지 공급자의 관리 콘솔 관리 페이지에서 고유한 캐시 정책을 지정할 수 있습니다.