2011-03-03 4 views
3

메모리 내 캐시 란 무엇입니까? 웹에서 많은 정보를 찾을 수 없었습니다.OO 개념을 사용하는 메모리 내 캐시 설계

실제로 C++을 사용하여 OO 개념을 기반으로 메모리 내 캐시를 설계하라는 요청을 받았지만 시작하는 방법을 모르겠습니다. 모든 제안을 부탁드립니다.

+0

자세한 내용이 없으면 오늘은 불가능합니다. 그들은 아마도 memoizing, 또는 아마도 디스크 캐시에 대해 이야기하고있을 수도 있습니다. 또는 –

답변

5

이것은 컨텍스트에 따라 다르지만 일반적으로 메모리 내 캐시는 새 개체를 만드는 대신 나중에 검색 할 수 있도록 일부 값을 저장합니다. 이것은 데이터베이스와 함께 또는 객체의 생성/검색이 비싼 인 실제 응용 프로그램과 함께 사용됩니다. 간단한 메모리 캐시에 대한

(모범 사례의 톤을 위반하는, 그래서 복사하지 마십시오!) 다음 더미 클래스를 상상 :

class Integer { 
    int value; 

public: 

    Integer(int value) : value(value) { 
     sleep(1000); // Simulates an expensive constructor 
    } 
}; 

를 이제이 클래스의 인스턴스를 만들 필요가 상상 :

Integer one(1); 
Integer two(2); 
// etc. 

...하지만 나중에 (다른 방법으로는) 아마 당신은 새로운 예 2의 작성해야

Integer two(2); 

이것은 비쌉니다. 이전 값을 재활용 할 수 있다면 어떨까요? 생성자를 사용하면,이 수 없습니다하지만 사용하는 팩토리 메소드는 우리가 쉽게이 작업을 수행 할 수 있습니다

class Integer { 
    int value; 

    static std::map<int, Integer> cache; 

    Integer(int value) : value(value) { 
     sleep(1000); // Simulates an expensive constructor 
    } 

    friend Integer make_int(int); 
}; 

Integer make_int(int value) { 
    std::map<int, Integer>::iterator i = Integer::cache.find(value); 
    if (i != Integer::cache.end()) 
     return i->second; 

    Integer ret = Integer(value); 
    Integer::cache[value] = ret; 
    return ret; 
} 

지금 우리가 만들거나 정수를 검색 할 수 make_int를 사용할 수 있습니다. 각 값은 한 번만 생성됩니다 :

Integer one = make_int(1); 
Integer two = make_int(2); 
Integer other = make_int(2); // Recycles instance from above. 
+0

return i-> second; 이것은 무엇을 의미합니까? –

+1

나는 그것을 얻는다. 고맙습니다 –

0

인 - 메모리 캐시는 일반적으로 데이터베이스 레코드, HTTP 요청, 또는 파일의 내용처럼, 외부에 저장되는 물건을 저장하는 데 사용됩니다. 일반적으로 LRU 객체 목록을 유지 관리합니다. 이는 관리하기가 매우 쉽습니다. 개체를 요청할 때 목록의 머리글로 개체를 이동하고 새 개체를 추가해야하는 경우 목록에서 마지막 개체를 제거하기 만하면됩니다. 물론,이 동작을 조정하기 위해 많은 복잡성을 추가 할 수 있지만 기본 알고리즘입니다.

"리드 스루"캐시가 필요할 것입니다. 즉, 프로그램은 항상 캐시에 필요한 객체를 묻습니다. 캐시에 없으면 캐시로 가져옵니다. 이렇게하면 응용 프로그램이 객체를 가져 오기 위해 두 개의 다른 위치로 갈 필요가 없으므로 프로그래밍이 간단 해집니다. 또한 이미 객체를 읽을 책임이있는 기존 모듈 (예 : DAO)을 수정할 수 있다면 캐싱을 눈에 보이지 않게 추가 할 수 있습니다.

0

memcachedC++ API을 가지고 있으며 사용자의 요구에 부합하는 경우를 살펴 볼 가치가있을 수 있습니다 :

무료 & 오픈 소스, 고성능, 분산 메모리 오브젝트 캐싱 시스템, 자연에서 일반적인, 그러나위한 것 데이터베이스 부하를 줄임으로써 동적 인 웹 애플리케이션 속도를 높이십시오.

Memcached가 데이터베이스 호출 API 호출 또는 페이지 렌더링 결과 에서 임의 데이터 (캐릭터 오브젝트)의 작은 덩어리하는 메모리 키 값 저장소이다.