2016-08-10 3 views
1

Play 2.5.4를 사용 중입니다. CacheAPI를 사용하여 페이지 요청 동안 여러 번 필요하기 때문에 현재 로그인 한 사용자를 저장하기 시작했습니다. cache.set()를 통해 캐시에이 객체를 추가했습니다. 나는이 일을 잘 해냈다.Play 2.5+ 및 CacheAPI

문제는이 사용자 개체를 관리자 계정과 다른 권한 또는 역할로 업데이트하면 사용자가 해당 권한이나 역할을 얻을 수 있도록 해당 캐시 개체를 무효화해야합니다.

사용자 캐시를 업데이트하려면 어떻게해야합니까? 여러 웹 서버에서 어떻게 할 수 있습니까?

도움 주셔서 감사합니다.

+0

사용자를 어떻게 캐시합니까? 이 캐시의 핵심은 무엇입니까? ... – MipH

+0

후드 아래에서 EHCache를 사용하는 Play의 cache.set() 및 cache.get()을 통해 캐싱 중입니다. 사용자가 로그인 할 때 세션에 사용자 ID (기본 키)를 저장 한 다음 해당 사용자의 ID를 사용하여 캐시 키를 통해 해당 사용자 개체를 캐시에서 검색합니다. – Mule

답변

1

사용자 캐시를 업데이트하려면 어떻게해야합니까?

그냥 다시 추가하기 만하면됩니다. 당신은 키

cache.set(user.getId(), user); 

으로 사용자 ID를 사용하는 가정하면 어떻게 할 수있는 여러 웹 서버에서 그?

이제 완전히 다른 질문입니다. 기본적으로 Play는 EhCache를 캐시 공급자로 사용하며 Play Cache API는 기본적으로 분산 캐시를 만들지 않습니다.

저는 EhCache에 대한 지식이별로 없지만 다른 제품에서 분산 캐시 (즉, 여러 서버 간의 캐시)를 지원하고 복제를 지원한다고 생각합니다. 따라서 먼저 조사를 해보고 자신에게 적합한 지 확인하십시오.

Cache API 구현을 만들고 EhCache/Terracota/Memcached/HazelCast를 사용하여 필요한 설정을 제공 할 수도 있습니다.

또 다른 옵션은 Akka Clustering/PubSub 확장과 같은 것을 사용하고 캐시 무효화 (즉, 서버 1의 캐시 무효화 - 모든 서버가 해당 캐시를 무효화하라는 브로드 캐스트 메시지)를 처리하는 것입니다. Akka 및 PubSub 확장에 익숙하지 않다면 구현하기 어려울 것입니다.

마지막 수단으로 사용할 수있는 경우 짧은 만료 시간 (예 : 1 분)으로 캐시를 설정할 수 있습니다. 응용 프로그램이 만료 시간이 지난 오래된 객체를 볼 수있는 경우 가장 쉬운 방법입니다.

+0

응답 해 주셔서 감사합니다. 나는 캐시의 한 서버 인스턴스를 가지고 있으며, 세션을 사용하여 사용자의 키를 유지하고 캐시를 사용하여 세션의 키를 통해 사용자 개체를 검색합니다. session.put ("USER_ID", user.id) ... 그러면 나중에 cache.get ("CACHED_USER"+ sessiong.get ("USER_ID")) ... 그 라인을 따라 뭔가를 검색하지만 NULL을 확인합니다. Play에서는 EHCache를 사용하므로 클러스터 된 EHCache 구현을 확인합니다. 도움에 다시 한번 감사드립니다. – Mule

관련 문제