메모리 내 캐시 란 무엇입니까? 웹에서 많은 정보를 찾을 수 없었습니다.OO 개념을 사용하는 메모리 내 캐시 설계
실제로 C++을 사용하여 OO 개념을 기반으로 메모리 내 캐시를 설계하라는 요청을 받았지만 시작하는 방법을 모르겠습니다. 모든 제안을 부탁드립니다.
메모리 내 캐시 란 무엇입니까? 웹에서 많은 정보를 찾을 수 없었습니다.OO 개념을 사용하는 메모리 내 캐시 설계
실제로 C++을 사용하여 OO 개념을 기반으로 메모리 내 캐시를 설계하라는 요청을 받았지만 시작하는 방법을 모르겠습니다. 모든 제안을 부탁드립니다.
이것은 컨텍스트에 따라 다르지만 일반적으로 메모리 내 캐시는 새 개체를 만드는 대신 나중에 검색 할 수 있도록 일부 값을 저장합니다. 이것은 데이터베이스와 함께 또는 객체의 생성/검색이 비싼 인 실제 응용 프로그램과 함께 사용됩니다. 간단한 메모리 캐시에 대한
(모범 사례의 톤을 위반하는, 그래서 복사하지 마십시오!) 다음 더미 클래스를 상상 :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.
return i-> second; 이것은 무엇을 의미합니까? –
나는 그것을 얻는다. 고맙습니다 –
인 - 메모리 캐시는 일반적으로 데이터베이스 레코드, HTTP 요청, 또는 파일의 내용처럼, 외부에 저장되는 물건을 저장하는 데 사용됩니다. 일반적으로 LRU 객체 목록을 유지 관리합니다. 이는 관리하기가 매우 쉽습니다. 개체를 요청할 때 목록의 머리글로 개체를 이동하고 새 개체를 추가해야하는 경우 목록에서 마지막 개체를 제거하기 만하면됩니다. 물론,이 동작을 조정하기 위해 많은 복잡성을 추가 할 수 있지만 기본 알고리즘입니다.
"리드 스루"캐시가 필요할 것입니다. 즉, 프로그램은 항상 캐시에 필요한 객체를 묻습니다. 캐시에 없으면 캐시로 가져옵니다. 이렇게하면 응용 프로그램이 객체를 가져 오기 위해 두 개의 다른 위치로 갈 필요가 없으므로 프로그래밍이 간단 해집니다. 또한 이미 객체를 읽을 책임이있는 기존 모듈 (예 : DAO)을 수정할 수 있다면 캐싱을 눈에 보이지 않게 추가 할 수 있습니다.
자세한 내용이 없으면 오늘은 불가능합니다. 그들은 아마도 memoizing, 또는 아마도 디스크 캐시에 대해 이야기하고있을 수도 있습니다. 또는 –