Cashe aside

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Cashe aside — шаблон проєктування для оптимізації використання кешу.

Проблема[ред. | ред. код]

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

Вирішення[ред. | ред. код]

Поміщаємо дані в кеш на вимогу. Протягом певного періоду часу очищаємо кеш.

Переваги та недоліки[ред. | ред. код]

Переваги[ред. | ред. код]

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

Недоліки[ред. | ред. код]

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

Опис[ред. | ред. код]

Робота патерну cashe aside
  1. Читаємо дані з кешу.
  2. Якщо даних немає в кеші, читаємо їх зі сховища.
  3. Поміщаємо прочитані дані в кеш.
  4. Очищаємо дані із кешу за певний період часу.
public Data GetData()
{
	LoadDataFromDatabaseIfNeed();

	return _cache.GetData();
}

private void LoadDataFromDatabaseIfNeed()
{
	if (!_cashe.HasRequiredData())
	{
		var data = _database.GetData();
		_cache.SaveData(data, expire: TimeSpan.FromMinutes(5));
	}
}

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]