2016-09-08 7 views
0

사용자가 특정 환자, 의사 및 시설에 대한 약속을 작성할 수있는 의료용 웹 응용 프로그램을 개발 중입니다. 각 시설에는 N 명의 의사가있을 수 있으며 캘린더에는 의사 당 N 명 예약이 채워지고 각 의사의 사용 가능 여부도 표시됩니다 (예 : 수요일 9 시부 터 12 시까 지, 15 시부 터 15 시까 지 근무하는 의사). 18:00).Spring + Redis + Mysql : 캐시 전략

프런트 엔드 부분에서는 fullcalendar을 사용하고 있으며 백엔드는 Struts2 (컨트롤러) + Spring (종속성 주입) + Hibernate (DAO)를 사용하여 만들어졌습니다.

장래에이 주에서 한 달 또는 두 달로 약속을로드해야하고이보기를 오랫동안 사용할 각 시설에 대해 1 명에서 N 명의 사용자가있을 수 있으므로 Redis을 사용하여 약속 및 사용 가능 여부를 캐시하고 Spring data redisLettuce 클라이언트를 추가했습니다. DAO의 메서드에 대해 @Cacheable, @CachePut@CacheEvict 주석을 사용하고, 목록과 같은 사용자 동작을 처리하고, redis 데이터와 데이터베이스 데이터 간의 충돌을 피하기 위해 약속을 만들고 업데이트하고 기타 동시성 문제를 해결하는 것이 좋습니다.

내 질문은 :

  1. 이 올바른 전략인가?
  2. 시설 + 의사 ID로 약속 된 약속을 캐시하기 위해 맞춤 키 생성기를 구현해야합니까?
+1

패턴은 스프링 캐시 프로그래밍 모델에 맞습니다. 캐싱을 시작하기 전에 성능 테스트를 실행하여 캐싱이 솔루션인지 또는 증상인지 파악해야합니다. 객체가 직렬화 가능해야합니다. JPA 프록시를 캐시하지 않고 데이터 모델 내부의 데이터를 캐시합니다. 핵심 발전기 : 그것은 중요합니다. SpEL 표현식을 지정하여 충돌하지 않는 키를 만들고 해당 키가 맞는지 확인하십시오. – mp911de

답변

0

여기에서 알 수 있듯이 불필요한 db 호출을 피하고 성능을 향상시키기 위해 redis로 캐시하려는 약속 및 가용성과 별도의 데이터가 있습니다. 적은 데이터가있는 경우 나 레디 스 서버를 가정으로

  1. 는, 다음 원격으로 배치됩니다 성능이 향상되지 않고 또한 네트워크 오버 헤드가 있습니다

    나는 여기에 몇 가지 포인트가 있습니다. 따라서 모든 InMemory Cache를 Guava 캐시로 선택할 수 있습니다.

  2. 무거운 데이터가 사용되는 경우 재 다이얼을하면 도움이됩니다. 이제 이것이 올바른 전략이라면 첫 번째 요점이 무엇입니까? 나는 그렇다고 대답 할 것이다. 두 번째로, 사용자 지정 키 생성기를 구현해야하는지 여부는 데이터를 고유하게 저장하는 방식에 따라 다릅니다. Redis는 (키, 값) 상점입니다. 따라서 약속은 (시설 + 의사 ID) 에서 고유하게 식별됩니다. CustomKeyGenerator를 구현해야합니다.