2011-11-21 2 views
1

내 앱의 경우, 사용중인 API 호출을 줄이기 위해 맵 이미지를 외부 저장소의 캐시에 저장합니다. 이 데이터는지도 데이터이므로 시간이 지남에 따라 변경 될 수 있습니다. 결과적으로 이러한 이미지는 매번 업데이트되어야합니다.정기적으로 외부 캐시 디렉토리 삭제하기

프로그래밍 방식으로 캐시 디렉토리를 주기적으로 삭제할 수 있습니까? 예를 들어, 매주 말하십시오.

일부 추가 생각 : 아마 전체 디렉토리를 삭제하는 것이 좋습니다. 아마도 각 이미지의 "신선도"를 확인하고 이전 이미지를 삭제할 수 있습니까?

답변

2

예, 일반적으로 캐시를 일부 방법으로 제한하는 것이 좋습니다. 일부 캐시는 크기가 고정되어 있고 캐시 크기가 초과되면 이전 내용이 제거됩니다. 이 크기는 항목 수 또는 디스크 공간의 크기 일 수 있습니다. 일부 캐시에는 각 항목에 대해 TTL (또는 모든 항목에 대해 동일한 TTL)이 있으므로 항목이 특정 시간 후에 만료됩니다. 일부 캐시는 만료되지 않습니다. 아마도 첫 번째 장소에서 캐시 될 수있는 가능한 항목의 수에 의해 크기가 한정되어있을 것입니다. 이러한 접근법 중 어느 것도 유효하지만 일부는 다른 시나리오보다 특정 시나리오에 더 적합 할 수 있습니다.

"신선함"개념은 아마도 제가 생각하기에 접근법 일 것입니다. 그것은 TTL과 같습니다. 기본적으로 캐시 항목이 살아갈 시간을 설정하려고합니다. 캐시 데이터와 함께이 캐시 시간을 저장 한 다음 캐시 데이터를 읽을 때마다 캐시 시간을 확인하십시오. 만료일이 지난 경우 해당 캐시 파일을 삭제하고 API에서지도 데이터를 다시 검색하고 캐시 할 수 있습니다. 개별적으로 날짜를 저장하고 응용 프로그램에 고정 수명을 하드 코딩하거나 구성하지 않으려면 파일 작성 시간을 읽는 것만으로도 뭔가를 할 수 있습니다.

업데이트는 의견을 해결하기 : 나도 전에 파일 이름과 URL을 해싱 사용했습니다

. 충돌 가능성이 있음을 알고 있어야합니다 (해시 알고리즘 및 데이터 집합에 크게 의존 함). 또한 URL을 많이 사용하는 경우 해시 알고리즘의 성능도 중요 할 수 있습니다.

특히 URL이 많지 않은 경우 캐시 메타 데이터를 텍스트 파일에 저장하는 것이 좋습니다. 당신은 그 텍스트 파일을 어떻게 업데이트하는지 조심하고 싶을 것이다. 조심하지 않고 적절한 동기화없이 여러 스레드에서 액세스 할 경우 쉽게 손상시킬 수 있습니다. 많은 양의 데이터가 있다면 고려할 수있는 또 다른 옵션은 데이터베이스를 사용하는 것입니다. 이 캐시 메타 데이터를 파일 (데이터베이스 또는 텍스트 파일)에 저장하면 파일 이름에 다른 체계를 사용하여 해싱 문제를 피할 수 있습니다. 예를 들어 16 진수 또는 36 진수로 증가시킬 수 있습니다.

+0

다음에 앱을 실행하고 캐시 된 데이터를 가져 오는 대신 일주일에 한 번씩 정리 작업을하는 것이 중요하다면 AlarmManager를 추가하는 것만으로도 AlarmManager를 사용할 수 있습니다. –

+0

답변 주셔서 감사합니다. 각 이미지와 관련된 ttl 값을 저장 하시겠습니까? 각 이미지를 API 호출에 사용 된 URL의 해시 값 다음에 명명 된 파일로 저장합니다. 해시 값과 ttl 타임 스탬프가있는 쌍 값을 txt 파일에 저장한다고 생각하십니까? 나는 우아한 해결책을 찾고있다. 감사! –

+0

좋은 질문입니다. 답변에 대한 자세한 내용을 추가했습니다. – kabuko

관련 문제