2012-06-08 4 views
1

일부 데이터베이스 작업이 캐시되는 경우 잘 수행 할 웹 응용 프로그램이 있습니다. 그것들은 정적 데이터이고 매일 새로운 데이터가 추가됩니다. 데이터베이스 읽기 작업을 줄이기 위해 나는 memcached를 사용할 것이다.memcache에 만료 시간을 부여하는 것이 중요합니까?

memcached에 넣은 데이터의 만료 시간을 지정하지 않으면 어떻게 될까요? 더 많은 RAM을 소비하여 성능에 영향을 미칩니 까? 캐시에 데이터를 추가하는 동안 만료 시간을 버리는 것이 좋습니다.

추 신 : 우리는 AWS를 사용하여 webapp을 ngnix, php, mysql과 함께 배포합니다.

답변

3

아마도 앱이 2050 년에도 계속 실행 중이면 2012 년에 캐시 방식으로 다시 가져온 일부 항목은 더 이상 적합하지 않습니다. 일종의 만료를 제공하지 않으면 캐시 재설정 (예 : 서버 다시 시작) 만 캐시 플러시를 종료합니다.

무한한 메모리가 없다면 (그리고 AWS가 제공하지 않는다고해도 ;-) 캐시 된 항목에 만료 시간을 추가하는 것이 현명합니다.

Memcached가 least recently used 메커니즘을 기반으로 항목을 만료하더라도 (캐시를 가리키는 데 @mikewied 덕분에) memcache가 LRU를 기반으로 항목을 퇴거하기 전에 캐시가 계속 채워집니다. 안타깝게도 Memcache의 LRU 알고리즘은 전역이 아닌 슬래브 (slab) 단위입니다. 이는 LRU 기반 퇴거가 최적보다 적을 수 있음을 의미합니다. Memcached Memory Allocation and Optimization을 참조하십시오.

+2

이것은 사실이 아닙니다. memcached가 캐시를 채울 때 만료 된 항목을 삭제하기 시작합니다. (만료 이후 게으름을 일으킨다.) 만료 된 항목이 없으면 memcached는 lru 알고리즘을 사용하여 만료되지 않은 항목을 삭제하여 공간을 만듭니다. 더 많은 데이터를 추가하려면 캐시를 플러시해야하는 경우에는 절대로 안됩니다. – mikewied

+0

@mikewied : 지적 해 주셔서 고맙습니다. 그러나 그 사실이 내 충고를 무효로하지는 않습니다. 이유를 설명하기 위해 답을 업데이트했습니다. –

+0

투표 해 주신 것에 대해 감사드립니다. – mikewied

관련 문제