дизайн кэша в памяти с использованием концепции ОО - PullRequest
3 голосов
/ 03 марта 2011

Что такое кэш в памяти? Я не смог найти много информации об этом из Интернета.

На самом деле, меня попросили спроектировать кэш в памяти на основе концепции ОО с использованием C ++, но я просто не знал, с чего начать. Любые предложения будут оценены.

Ответы [ 3 ]

5 голосов
/ 03 марта 2011

Это зависит от контекста, но, как правило, в кэш-памяти в памяти хранится некоторое значение, чтобы его можно было извлечь позже, вместо создания нового объекта.Чаще всего это используется в сочетании с базами данных - или действительно с любым приложением, в котором создание / извлечение объекта стоит дорого .

. Для простого кэша памяти представьте следующий фиктивный класс (которыйнарушает тонны лучших практик, так что не копируйте!):

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 голосов
/ 03 марта 2011

memcached имеет C ++ API и, возможно, стоит посмотреть, соответствует ли он вашим потребностям:

Бесплатный и открытый исходный код, высокийпроизводительность, система кэширования объектов с распределенной памятью, универсальная по своей природе, но предназначенная для использования при ускорении динамических веб-приложений за счет снижения нагрузки на базу данных.

Memcached - это хранилище значений ключей в памяти для небольших фрагментов произвольных данных (строки, объекты) из результатов вызовов базы данных, вызовов API или визуализации страницы.

0 голосов
/ 03 марта 2011

Кэш в памяти используется для хранения вещей, которые обычно хранятся извне, таких как запись в базе данных, HTTP-запрос или содержимое файла.Как правило, вы будете поддерживать список объектов LRU.Это довольно легко управлять, так как все, что вам нужно сделать, это переместить объект в начало списка, когда вы получите запрос на него, и удалить последний объект в списке, когда вам нужно добавить новый.Очевидно, что вы можете добавить много сложностей, чтобы настроить это поведение, но это основной алгоритм.

Возможно, вам понадобится кэш для чтения.Таким образом, программа всегда запрашивает кеш для нужного ему объекта, и если он не существует в кеше, то выбор за ним - кеш.Таким образом, это упрощает программирование, так как приложению не нужно идти в два разных места, чтобы получить объект.Это также может позволить незаметно добавить кеширование, если вы можете изменить существующий модуль (например, DAO), который уже отвечает за чтение объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...