ehcache : 만료 시간을 코드레벨에서 다룰 수 있을까요?

2017-06-09 12:28

특정 함수의 return value 를 캐싱하고자 합니다.

특정 key 로 그룹핑 된 사용자들은 특정 시간동안 같은 값을 받아야하고, 해당 함수는 무겁고, 굳이 실행될 필요가 없어 캐싱을 생각하고 있는데요.

문제는 저 특정 시간동안을 관리하는 것이 배치입니다.

특정 함수라 함은 배치 결과를 요청하는 함수라고 볼 수 있는데요.

배치에서 캐싱 만료를 관리해줄 수 있을까요?

환경은 자바1.8 + 스프링 4.3.5 이며 캐시툴은 ehcache 입니다.

배치서버와 운영서버는 서로 다른 인스턴스입니다.

3개의 의견 from SLiPP

2017-06-09 12:39

나도 해보지 않아서 검색을 해봤더니 이런 자료가 있는데 맞는지 모르겠네.

EHcache simple example with time-to-live

무엇인가 Cache를 만료하려면 데이터에 변경이 있다는 의미로 보고 접근하면 되는 건가? 뭔가 다른 요구가 있나?

운영 서버가 데이터를 cache하고 배치 서버가 이 cache 데이터를 사용하고 있는데 배치 서버가 cache를 만료 시키고 싶다는 것인가?

2017-06-09 13:56

@자바지기 링크를 보니 캐시설정을 코드레벨에서 정의하는 것 같네요. 어노테이션 기반의 캐싱만 생각하고 있었는데, 그렇게 말고 보내주신 링크를 활용할 수 있겠다 싶은데. 고려해야할 사항들을 체크해봐야겠네요 ㅎㅎ

배치잡이 수행되어 데이터를 갱신하게 되면, 그 시점부터 배치잡이 재수행되기 전까지는 데이터 캐싱이 필요해서요. 다만 제한사항은 배치서버와 운영서버가 서로 다른 인스턴스이고, 운영서버가 여러대인 점을 감안해야하며, 단 한번도 특정키에 대한 조회요청이 없다면 굳이 특정 키에 맵핑된 데이터를 캐싱을 할 필요없다 정도입니다.

배치서버는 RDS 를 업데이트하고, 운영서버는 그 RDS 의 데이터를 캐싱할 목적입니다. ㅋ

2017-06-09 15:38

@자바지기 형의 링크를 힌트로, 자답합니다 ㅎㅎ; 우선 캐싱 대상 데이터 사이즈를 체크했더니 생각했던것보다 많이 작아서 캐싱스토리지는 redis 로 결론을 내렸구요. 캐시의 기한 만료주기 같은 개념을 두지 않고, 배치서버에서 배치잡 수행 후에 운영 서버에 배치가 수행되었다고 알려주고 (api call 등) 운영 서버에서는 해당 api 가 들어오면 redis 서버의 데이터들을 삭제합니다.

특정 함수는 수행 첫단계에 우선 redis 에 데이터가 있는지 조회, 있으면 데이터를 그냥 return. 없으면 나머지 로직 실행후 작업된 데이터를 redis 에 적재후 return.

그냥저냥 무난하게 풀이하게 되었네요 ㅎㅎ

의견 추가하기

연관태그

← 목록으로