Найти Π² Π”Π·Π΅Π½Π΅
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

πŸ’Ύ Как Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ: Ρ€Π°Π·Π±ΠΎΡ€ 7 популярных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²

ОглавлСниС

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ вытСснСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠ΅ элСмСнты Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ· кэша ΠΏΡ€ΠΈ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ΅ мСста, обСспСчивая баланс ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ использования рСсурсов. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим 7 популярных стратСгий вытСснСния кэша, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹, достоинства ΠΈ нСдостатки.

ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, которая ускоряСт Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, сниТаСт Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠΏΡ‹Ρ‚. Однако ΠΏΠ°ΠΌΡΡ‚ΡŒ кэша ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°, ΠΈ Π² Π½Π΅ΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС. Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ вытСснСния кэша ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠ΅ элСмСнты Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ· кэша, ΠΊΠΎΠ³Π΄Π° мСсто заканчиваСтся. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ рассмотрим 7 основных стратСгий.

ВытСснСниС Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… элСмСнтов (LRU)

Алгоритм вытСснСния LRU (Least Recently Used) удаляСт элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дольшС всСго Π½Π΅ использовался. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ссли ΠΊ элСмСнту Π΄Π°Π²Π½ΠΎ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ, Ρ‚ΠΎ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ использования Π² блиТайшСС врСмя ΠΌΠ°Π»Π°.

   ВытСснСниС Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… элСмСнтов (LRU)
ВытСснСниС Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… элСмСнтов (LRU)

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ LRU

1. ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ доступа:

LRU Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт кэша Π±Ρ‹Π» использован послСдний Ρ€Π°Π·. Для этого часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚:

  • Двусвязный список – для управлСния порядком элСмСнтов.
  • Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ – для быстрого поиска элСмСнтов.

2. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ Π² кэшС

Если элСмСнт Π½Π°ΠΉΠ΄Π΅Π½ Π² кэшС, ΠΎΠ½ становится Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ. Π’ двусвязном спискС ΠΎΠ½ пСрСмСщаСтся Π² Π½Π°Ρ‡Π°Π»ΠΎ.

3. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ отсутствуСт Π² кэшС

  • Если Π² кэшС Π΅ΡΡ‚ΡŒ свободноС мСсто – Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт просто добавляСтся.
  • Если кэш ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½, удаляСтся элСмСнт ΠΈΠ· ΠΊΠΎΠ½Ρ†Π° списка, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ являСтся Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ вострСбованным.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ LRU с кэшСм Π½Π° 3 элСмСнта

  • ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС: кэш пустой.
  • ДобавляСм A: [A].
  • ДобавляСм B: [A, B].
  • ДобавляСм C: [A, B, C] (кэш Π·Π°ΠΏΠΎΠ»Π½Π΅Π½).
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ A: [B, C, A] (A становится Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ).
  • ДобавляСм D: [C, A, D] – B вытСснСн ΠΊΠ°ΠΊ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ вострСбованный.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° LRU:

  • ΠŸΡ€ΠΎΡΡ‚ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСтся.
  • Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ для частых запросов – часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² кэшС.
  • ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π²Π΅Π±-страниц ΠΈ API-запросов.

НСдостатки LRU:

  • НуТно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ порядкС использования.
  • ΠŸΡ€ΠΈ большом кэшС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ порядком ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ рСсурсозатратным.
  • ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π² соотвСтствии с ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ.

🧩 ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python: Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ LRU

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ LRU-ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python, достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ всСго Π΄Π²Π΅ строчки – ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈ объявлСниС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @lru_cache. ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΊΠ°ΠΊ ΠΈ Π·Π°Ρ‡Π΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

ВытСснСниС Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтов (LFU)

Алгоритм LFU (Least Frequently Used) удаляСт ΠΈΠ· кэша элСмСнт с наимСньшСй частотой доступа, прСдполагая, Ρ‡Ρ‚ΠΎ Ссли элСмСнт Ρ€Π΅Π΄ΠΊΠΎ использовался Ρ€Π°Π½Π΅Π΅, Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ использования Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½ΠΈΠ·ΠΊΠ°.

   ВытСснСниС Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтов (LFU)
ВытСснСниС Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтов (LFU)

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ LFU

1. ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ частоты доступа

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² кэшС сохраняСтся счСтчик ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ увСличиваСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ доступС.

2. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ Π² кэшС

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнту Π΅Π³ΠΎ частота увСличиваСтся Π½Π° 1.

3. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ отсутствуСт Π² кэшС

  • Если Π΅ΡΡ‚ΡŒ свободноС мСсто – Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт с частотой 1.
  • Если мСста Π½Π΅Ρ‚ – ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт с наимСньшСй частотой доступа.
  • Если нСсколько элСмСнтов ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π½ΠΈΠ·ΠΊΡƒΡŽ частоту использования, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ самый старый ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ использования ΠΈΠ»ΠΈ самый ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ LFU (кэш Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 3)

  • ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС: кэш пустой.
  • ДобавляСм A: [A (freq=1)].
  • ДобавляСм B: [A (freq=1), B (freq=1)].
  • ДобавляСм C: [A (freq=1), B (freq=1), C (freq=1)].
  • Доступ ΠΊ A: ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ частоту A, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ [A (freq=2), B (freq=1), C (freq=1)].
  • ДобавляСм D: кэш ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½. УдаляСм элСмСнт с минимальной частотой. Π£ B ΠΈ C одинаковая частота – 1, поэтому удаляСм B ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ LRU ΠΈΠ»ΠΈ FIFO: [A (freq=2), C (freq=1), D (freq=1)].
  • Доступ ΠΊ C: ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ частоту C, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ [A (freq=2), C (freq=2), D (freq=1)].

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° LFU:

  • Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ для прСдсказуСмых ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ².
  • Π₯ΠΎΡ€ΠΎΡˆΠΎ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ самыС вострСбованныС элСмСнты.

НСдостатки LFU:

  • ВысокиС Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ (Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ счСтчики частоты для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта).
  • Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ счСтчиков ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ доступС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.
  • ΠŸΠ»ΠΎΡ…Π°Ρ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ – сохраняСт элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ популярны Π΄Π°Π²Π½ΠΎ, Π½ΠΎ сСйчас ΡƒΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.

Π₯ΠΎΡ‡Π΅ΡˆΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ ΡΠ΅Π½ΡŒΠΎΡ€, Π° Π½Π΅ ΠΊΠ°ΠΊ Π΄ΠΆΡƒΠ½?

Π˜Π½Ρ‚Π΅Π½ΡΠΈΠ² «АрхитСктура ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования» даст Ρ‚Π΅Π±Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ³Ρ€Ρ‹ Β«Π—Π²Π΅Π·Π΄Π½Ρ‹Π΅ Π²ΠΎΠΉΠ½Ρ‹Β» ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, которая Π½Π΅ прСвратится Π² Ρ‚Ρ‹ΠΊΠ²Ρƒ Ρ‡Π΅Ρ€Π΅Π· мСсяц. Никакой Π²ΠΎΠ΄Ρ‹ β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Π’Ρ‹ Π½Π΅ просто ΡƒΠ·Π½Π°Π΅ΡˆΡŒ ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°Ρ…, Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡˆΡŒ ΠΈΡ… Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΡƒΠ²ΠΈΠ΄ΠΈΡˆΡŒ, Π³Π΄Π΅ ΠΎΠ½ΠΈ рулят, Π° Π³Π΄Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· Π½ΠΈΡ….

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ

(function () { let link = document .getElementById ("523d276b-8bb0-4f7f-ac40-4b1dd101e0ce-https://futurio.ru/architectures_and_design_patterns?utm_source=proglib&utm_medium=article&utm_content=Kak-vybrat-strategiyu-keshirovaniya-razbor-7-populyarnykh-algoritmov-37"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST", body: data }) .then (function (res) {}) .catch (function (err) { console .error (err); }); }) })();

Β«ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π», ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΡƒΡˆΠ΅Π»Β» (FIFO)

Β«ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π», ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΡƒΡˆΠ΅Π»Β» FIFO (First In, First Out) – стратСгия управлСния кэшСм, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ удаляСтся элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ€Π°Π½ΡŒΡˆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ…, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько часто ΠΎΠ½ использовался. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ самыС старыС элСмСнты Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠ΅Π½Π΅Π΅ вострСбованы, ΠΊΠΎΠ³Π΄Π° кэш заполнится.

   Β«ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π», ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΡƒΡˆΠ΅Π»Β» (FIFO)
Β«ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π», ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΡƒΡˆΠ΅Π»Β» (FIFO)

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ FIFO

1. Новый элСмСнт добавляСтся Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

2. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ Π² кэшС

Если Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ элСмСнт Π½Π°ΠΉΠ΄Π΅Π½ Π² кэшС, порядок ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… стратСгий, FIFO Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ врСмя ΠΈΠ»ΠΈ количСство ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ.

3. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ отсутствуСт Π² кэшС

  • Если Π² кэшС Π΅ΡΡ‚ΡŒ мСсто, Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт добавляСтся Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.
  • Если кэш ΠΏΠΎΠ»ΠΎΠ½, удаляСтся самый старый элСмСнт (ΠΈΠ· Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ мСсто.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ FIFO с кэшСм Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ 3

  • ДобавляСм A: [A]
  • ДобавляСм B: [A, B]
  • ДобавляСм C: [A, B, C]
  • ДобавляСм D: [B, C, D] (A ΡƒΠ΄Π°Π»Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ)
  • ΠžΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌΡΡ ΠΊ B: [B, C, D] (порядок Π½Π΅ мСняСтся)
  • ДобавляСм E: [C, D, E] (B ΡƒΠ΄Π°Π»Π΅Π½ ΠΊΠ°ΠΊ самый старый ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ элСмСнт)

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° FIFO:

  • Алгоритм Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· структуру Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.
  • НСт нСобходимости ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ частоту ΠΈΠ»ΠΈ Π΄Π°Π²Π½ΠΎΡΡ‚ΡŒ использования элСмСнтов.
  • Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ происходит всСгда ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ – ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ самый старый элСмСнт.

НСдостатки FIFO:

  • Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ частоту использования (вострСбованныС элСмСнты ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ сниТаСт ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ кэша).
  • ΠΠ΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° сцСнариСв – Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… систСмах ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Π°ΠΆΠ½Π΅Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ послСдниС обращСния (LRU) ΠΈΠ»ΠΈ частоту (LFU).

Π‘Π»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠ΅ вытСснСниС (RR)

Π‘Π»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠ΅ вытСснСниС RR (Random Replacement) – это самая простая стратСгия управлСния кэшСм, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ кэша для освобоТдСния мСста удаляСтся случайный элСмСнт, нСзависимо ΠΎΡ‚ частоты использования ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ добавлСния.

   Π‘Π»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠ΅ вытСснСниС (RR)
Π‘Π»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠ΅ вытСснСниС (RR)

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ RR

1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта

Если Π² кэшС Π΅ΡΡ‚ΡŒ мСсто, Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт просто добавляСтся.

2. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ Π² кэшС

Если Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ элСмСнт Π½Π°ΠΉΠ΄Π΅Π½ Π² кэшС, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ порядка ΠΈΠ»ΠΈ состава кэша.

3. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ отсутствуСт Π² кэшС

Если элСмСнт отсутствуСт, Π° кэш ΠΏΠΎΠ»ΠΎΠ½:

  • УдаляСтся случайный элСмСнт.
  • Новый элСмСнт Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ освободившССся мСсто.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ RR с кэшСм Π½Π° 3 элСмСнта

  • ДобавляСм A: [A].
  • ДобавляСм B: [A, B].
  • ДобавляСм C: [A, B, C].
  • ДобавляСм D: [B, C, D] (A ΡƒΠ΄Π°Π»Π΅Π½ случайно).
  • ДобавляСм E: [C, E, D] (B ΡƒΠ΄Π°Π»Π΅Π½ случайно).

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° RR:

  • ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ – Π½Π΅Ρ‚ нСобходимости ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ частоту ΠΈΠ»ΠΈ врСмя обращСния.
  • Минимальная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°.
  • ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠ»ΠΈ нСпрСдсказуСмых ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² доступа.

НСдостатки RR:

  • Π’Π°ΠΆΠ½Ρ‹Π΅ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ элСмСнты ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ случайно ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.
  • ΠΠ΅ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°Ρ… доступа – Ссли ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ рСгулярно, ΠΈΡ… случайноС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ сниТаСт ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ кэша.
  • Из-Π·Π° случайного ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ кэш ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ элСмСнты.

πŸ’» Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста»

ВытСснСниС самого послСднСго использованного элСмСнта (MRU)

«ПослСдним использован, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Β» – это стратСгия управлСния кэшСм, противополоТная LRU: ΠΏΡ€ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ кэша ΠΈ нСобходимости ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ мСсто, MRU (Most Recently Used) удаляСт элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» использован самым послСдним. Π›ΠΎΠ³ΠΈΠΊΠ° здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ элСмСнт, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±Ρ‹Π» Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π½Π΅ понадобится Π² блиТайшСС врСмя.

   ВытСснСниС самого послСднСго использованного элСмСнта (MRU)
ВытСснСниС самого послСднСго использованного элСмСнта (MRU)

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ MRU

1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта

Новый элСмСнт добавляСтся Π² кэш ΠΈ помСчаСтся ΠΊΠ°ΠΊ послСдний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ (MRU).

2. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ Π² кэшС

Если Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ элСмСнт Π½Π°ΠΉΠ΄Π΅Π½, ΠΎΠ½ становится послСдним ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ (MRU).

3. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ отсутствуСт Π² кэшС

  • Если Π΅ΡΡ‚ΡŒ свободноС мСсто – Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт просто добавляСтся.
  • Если кэш ΠΏΠΎΠ»ΠΎΠ½ – удаляСтся послСдний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ (MRU) элСмСнт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ мСсто для Π½ΠΎΠ²ΠΎΠ³ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ MRU с кэшСм Π½Π° 3 элСмСнта

  • ДобавляСм A: [A]
  • ДобавляСм B: [A, B]
  • ДобавляСм C: [A, B, C]
  • ΠžΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌΡΡ ΠΊ C: [A, B, C] (C – самый Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ)
  • ДобавляСм D: [A, B, D] (C ΡƒΠ΄Π°Π»Π΅Π½, Ρ‚. ΠΊ. ΠΎΠ½ Π±Ρ‹Π» MRU)
  • ΠžΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌΡΡ ΠΊ B: [A, B, D] (B – Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ MRU)
  • ДобавляСм E: [A, D, E] (B ΡƒΠ΄Π°Π»Π΅Π½, Ρ‚. ΠΊ. ΠΎΠ½ Π±Ρ‹Π» MRU)

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° MRU:

  • Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½, ΠΊΠΎΠ³Π΄Π° Ρ†Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ – это Π±ΠΎΠ»Π΅Π΅ старыС записи, Π° Π½Π΅Π΄Π°Π²Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ – Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ минимального отслСТивания порядка использования.
  • Π›Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стСка.

НСдостатки MRU:

  • НС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° сцСнариСв – Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… систСмах Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ вострСбованными.
  • Если ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ доступа ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ, кэш Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅Ρ€ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ элСмСнты.
  • УступаСт ΠΏΠΎ эффСктивности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ LRU ΠΈ LFU.

ВрСмя ΠΆΠΈΠ·Π½ΠΈ элСмСнта Π² кэшС (TTL)

Time to Live (TTL) – стратСгия управлСния кэшСм, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту назначаСтся срок ΠΆΠΈΠ·Π½ΠΈ. ПослС окончания этого срока элСмСнт автоматичСски удаляСтся ΠΈΠ· кэша, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, использовался ΠΎΠ½ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. TTL Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² систСмах ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π² Redis ΠΈ Memcached.

   ВрСмя ΠΆΠΈΠ·Π½ΠΈ элСмСнта Π² кэшС (TTL)
ВрСмя ΠΆΠΈΠ·Π½ΠΈ элСмСнта Π² кэшС (TTL)

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ TTL

1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнта Π΅ΠΌΡƒ назначаСтся TTL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 5 сСкунд). ВрСмя истСчСния срока ΠΆΠΈΠ·Π½ΠΈ рассчитываСтся ΠΊΠ°ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя + TTL.

2. Доступ ΠΊ элСмСнту

  • Если элСмСнт Π½Π°ΠΉΠ΄Π΅Π½, Π½ΠΎ TTL истСк – элСмСнт удаляСтся ΠΈΠ· кэша.
  • Если TTL Π΅Ρ‰Π΅ дСйствуСт – элСмСнт возвращаСтся.

3. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ:

  • ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ (лСнивая очистка кэша) – Ссли срок истСк Π²ΠΎ врСмя запроса.
  • ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ (запланированная очистка) – с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ TTL с кэшСм (TTL = 5 сСкунд):

  • ДобавляСм A (TTL = 5s): [A (5s)]
  • ДобавляСм B (TTL = 10s): [A (5s), B (10s)]
  • Π§Π΅Ρ€Π΅Π· 6 сСкунд: [B (ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ 4s)] (A ΡƒΠ΄Π°Π»Π΅Π½, Ρ‚. ΠΊ. TTL истСк)
  • ДобавляСм C (TTL = 5s): [B (4s), C (5s)]
  • ΠžΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌΡΡ ΠΊ A: элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ A ΡƒΠΆΠ΅ ΡƒΠ΄Π°Π»Π΅Π½.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° TTL:

  • ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… – удаляСт ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ элСмСнты автоматичСски.
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° настройки – TTL Π»Π΅Π³ΠΊΠΎ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
  • НС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ слоТных ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ доступа ΠΈΠ»ΠΈ частоты использования.
  • ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для систСм, Π³Π΄Π΅ Π²Π°ΠΆΠ½Π° ΡΠ²Π΅ΠΆΠ΅ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π΅Π½, Π΄Π°Π½Π½Ρ‹Ρ… API).

НСдостатки TTL:

  • Ѐиксированный срок ΠΆΠΈΠ·Π½ΠΈ – элСмСнты ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ вострСбованными.
  • Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ с большим TTL Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.
  • НС ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈΠ»ΠΈ частоту использования.

Π”Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π”Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ TTC (Two-Tiered Caching) сочСтаСт Π΄Π²Π° уровня кэша – Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ (Π² памяти) ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ (распрСдСлСнный ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ):

  • Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш – ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ («горячий» кэш), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт свСрхбыстрый доступ ΠΊ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ.
  • Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ кэш – Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ (Β«Ρ…ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΉΒ» кэш), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² локальном кэшС, Π½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ быстрСС, Ρ‡Π΅ΠΌ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….
   Π”Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (TTC)
Π”Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (TTC)

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ кэш

1. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ):

  • РасполагаСтся Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ сСрвСрС, Π³Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Ρ‡Π°Ρ‰Π΅ всСго – Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти).
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ максимально быстрый доступ ΠΊ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ сниТСниС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° сСрвСр.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² памяти – Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, LRU-кэш.
  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ – Guava Cache (Java).

Π£Π΄Π°Π»eΠ½Π½Ρ‹ΠΉ кэш (Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ):

  1. РасполагаСтся Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ сСрвСрС ΠΈΠ»ΠΈ кластСрС сСрвСров.
  2. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ собой ΠΎΠ±Ρ‰ΠΈΠΉ кэш для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
  3. Доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Ρƒ локального кэша.
  4. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ большиС ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ – распрСдСлСнныС систСмы ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ (Redis, Memcached).

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ кэша

1. Запрос ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° β†’ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° локального кэша:

  • Если Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ.
  • Если Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ – ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ.

2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ кэша:

  • Если Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² локальном кэшС для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… запросов.
  • Если Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ – ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ.

3. Запрос ΠΊ основной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…:

  • ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.
  • ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² локальном ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΡΡˆΠ°Ρ….

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Π΄Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ:

  • Быстрый доступ – Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш обСспСчиваСт ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ для часто Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….
  • ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ – ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ кэш позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ большС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΈΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрами.
  • Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… – Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ запросов обслуТиваСтся ΠΈΠ· кэша, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ число ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π‘Π”.
  • ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ – Ссли Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΠ· строя, Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ кэша.

НСдостатки Π΄Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ:

  • Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ управлСния – трСбуСтся синхронизация ΠΌΠ΅ΠΆΠ΄Ρƒ двумя уровнями кэша.
  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… – Ссли Π΄Π°Π½Π½Ρ‹Π΅ обновились Π² ΠΎΠ΄Π½ΠΎΠΌ кэшС, Π½ΠΎ Π½Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ.
  • Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ кэшСм – запросы ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΈΠ·-Π·Π° сСтСвых Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ.

ПодвСдСм ΠΈΡ‚ΠΎΠ³ΠΈ

Π’Ρ‹Π±ΠΎΡ€ стратСгии вытСснСния кэша зависит ΠΎΡ‚ особСнностСй прилоТСния, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ: LRU ΠΈ LFU подходят для сцСнариСв с прСдсказуСмыми запросами, FIFO ΠΈ RR пригодятся Π² простых систСмах, TTL эффСктивно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π΄Π²ΡƒΡ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ обСспСчиваСт баланс скорости ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΈΠ»ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ эффСктивного использования памяти ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠΏΡ‹Ρ‚.

ВзглянитС Π½Π° эти Ρ‚Π΅ΠΌΡ‹