Read-Through Cache

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));
        });
    }
}

Див. також

Джерела