Немає перевірених версій цієї сторінки; ймовірно, її ще не перевіряли на відповідність правилам проекту.

Read-Through Cacheшаблон проєктування для оптимізації використання кешу.

Проблема

ред.

Аплікація застосовує кеш для оптимізації повторного доступу до даних. Однак дані час від часу оновлюються. Необхідно забезпечити спосіб підтримувати максимально актуальні дані в кеші.

Вирішення

ред.

Створюємо сервіс обов'язком якого буде кешування. Він знає про розташування даних та оновлює кеш при потребі.

Переваги та недоліки

ред.

Переваги

ред.
  • забезпечує часткову консистенцію даних при оптимізованому доступі
  • забезпечує непередбачувану потребу в ресурсах. Дані поміщаються в кеш на вимогу
  • система може працювати при несправності кешу. В такому випадку дані беруться зі сховища
  • забезпечує збереження статичних даних. Кеш-сервіс реалізовує стратегії кешування в залежності від вимоги

Недоліки

ред.
  • не забезпечує повну консистенцію даних. Дані можуть бути оновлені, стороннім сервісом в той час як кеш міститиме застарілу інформацію
  • нормалізовані дані. Аплікації потрібно провести додаткові операції над даними, щоб привести їх до потрібного формату

Опис

ред.
 
Робота патерну read-through сache
  1. Аплікація читаємо дані лише з кешу.
  2. Кеш-провайдер забезпечує дані та їх валідність.
public Data GetUserData()
{
	return _cache.GetData(DataType.Users);
}

class MyCache
{
    public List<RequestedData> _cachedData;    

    public GetData(DataType dataType)
    {
        if (_cachedData.HasCache(dataType))
        {
            _cachedData.AddMissingKey(dataType);          

            return null;
        }
   
        return _cachedData.GetData(dataType);
    }

    private LoadMissingCache()
    {
        new Thread(() => {
               _cachedData.Where(d => d.IsMissing).ForEach(d => _dataBase.Load(d));
        });
    }
}

Див. також

ред.

Джерела

ред.