Heim > Datenbank > Redis > Hauptteil

Lassen Sie uns über die Eliminierungsstrategie des Redis-Cache sprechen

青灯夜游
Freigeben: 2021-10-27 10:25:30
nach vorne
1733 Leute haben es durchsucht

Redis Welche Strategien zur Cache-Beseitigung gibt es? Dieser Artikel wird mit Ihnen über die Redis-Cache-Eliminierungsstrategie sprechen und die Vorschläge zur Cache-Strategie-Einstellung vorstellen. Ich hoffe, er wird Ihnen hilfreich sein!

Lassen Sie uns über die Eliminierungsstrategie des Redis-Cache sprechen

Redis (Remote Dictionary Server), der Remote-Wörterbuchdienst, ist eine Open-Source-Protokolltyp-Schlüsselwertdatenbank, die in ANSI C-Sprache geschrieben ist, das Netzwerk unterstützt, auf dem Speicher basieren und beibehalten werden kann Bietet eine Vielzahl von Sprach-APIs. [Verwandte Empfehlungen: Redis-Video-Tutorial]

Es hat die folgenden Eigenschaften:

  • Basiert auf Speicherbetrieb und hoher Leistung
  • Unterstützt die Verteilung und kann theoretisch unendlich erweitert werden
  • Schlüsselwert-Speicherstruktur, Abfrage effizient
  • Bietet mehrere Entwicklungssprachen-APIs und lässt sich leicht in bestehende Geschäftssysteme integrieren.

Wird normalerweise in Geschäftssystemen für verteilten Cache, zentralen Sitzungsspeicher, verteilte Sperren und andere Anwendungsszenarien verwendet.

Ob es sich um einen lokalen Cache oder einen verteilten Cache handelt, um eine höhere Leistung zu gewährleisten, wird Speicher zum Speichern von Daten verwendet. Wenn die gespeicherten Daten die Cache-Kapazität überschreiten, müssen die zwischengespeicherten Daten gelöscht werden . Zu den gängigen Eliminierungsstrategien gehören FIFO zur Eliminierung der ältesten Daten, LRU zur Eliminierung der am längsten verwendeten Daten und LFU zur Eliminierung der am längsten verwendeten Daten.

Redis-Cache-Räumungsrichtlinie löst aus

In der Produktionsumgebung erlauben wir kein Swap-Verhalten in Redis. Daher ist die maximale Speichernutzung im Allgemeinen begrenzt. Redis stellt den Konfigurationsparameter maxmemory zur Verfügung, um die maximale Speichernutzung anzugeben.

Die folgenden Konfigurationen sind zulässig:

maxmemory 1000KB 
maxmemory 100MB 
maxmemory 1GB 
maxmemory 0  # 表示不做限制,一般不会用
Nach dem Login kopieren

redis.conf Die Konfigurationsdatei lautet wie folgt

Lassen Sie uns über die Eliminierungsstrategie des Redis-Cache sprechen

8 Redis-Cache-Strategien

  • volatile-lru Unter den Daten mit einem festgelegten Timeout-Zeitraum löschen Sie am wenigsten häufig verwendete Daten;

  • allkeys-lru fragt die am seltensten verwendeten Daten unter allen Schlüsseln zum Löschen ab, was die am weitesten verbreitete Strategie ist;

  • volatile-random löscht zufällig Daten, für die ein Timeout festgelegt wurde; fragt zufällig alle Schlüssel ab und löscht sie dann nach dem Zufallsprinzip.
  • volatile-ttl fragt alle Daten mit einem festgelegten Zeitlimit ab, sortiert sie sofort nach der Verfolgung und löscht Daten, die bald ablaufen. Es wird kein Löschvorgang durchgeführt und es wird ein Fehler zurückgegeben, wenn der Speicher überläuft.
  • volatile-lfu entfernt die am wenigsten häufig verwendeten Schlüssel von allen mit Ablaufzeit konfigurierten Schlüsseln.
  • allkeys-lfu entfernt alle Schlüssel von The least häufig verwendeter Schlüssel;

  • LRU- und LFU-Algorithmen in Redis

LRU-Algorithmus

Der Redis LRU-Algorithmus ist keine exakte Implementierung. Das bedeutet, dass Redis nicht den bestenKandidaten für die Räumung

auswählen kann, d. h. denjenigen mit den meisten Besuchen in der Vergangenheit. Stattdessen wird versucht, eine Annäherung an den LRU-Algorithmus auszuführen, indem eine kleine Anzahl von Schlüsseln abgetastet und dann der beste (mit der frühesten Zugriffszeit) der abgetasteten Schlüssel entfernt wird.

Ab Redis 3.0 wurde der Algorithmus jedoch verbessert und kann auch einige gute Kandidaten für die Räumung auswählen. Dadurch wird die Leistung des Algorithmus verbessert, sodass er dem Verhalten des echten LRU-Algorithmus ähnlicher wird. Das Wichtigste am Redis LRU-Algorithmus ist, dass Sie die Genauigkeit des Algorithmus optimieren können, indem Sie die Anzahl der Stichproben ändern, die bei jeder Räumung überprüft werden sollen. Dieser Parameter wird durch die folgende Konfigurationsanweisung gesteuert:

maxmemory-samples 5
Nach dem Login kopieren

Der Grund, warum Redis keine echte LRU-Implementierung verwendet, liegt darin, dass es mehr Speicher benötigt. Für Anwendungen, die Redis verwenden, ist die Näherung jedoch tatsächlich gleichwertig. Das Folgende ist eine Vergleichstabelle zwischen der von Redis verwendeten LRU-Näherung und der realen LRU.

Der Test, der das obige Diagramm generierte, füllte einen Redis-Server mit der angegebenen Anzahl von Schlüsseln. Auf Schlüssel wird vom ersten bis zum letzten zugegriffen, daher ist der erste Schlüssel der beste Kandidat für die Entfernung mithilfe des LRU-Algorithmus. Später wurden weitere 50 % der Schlüssel hinzugefügt, um die Räumung der Hälfte der alten Schlüssel zu erzwingen. Auf dem Bild sind drei Arten von Punkten zu sehen, die drei verschiedene Bänder bilden.

Das hellgraue Band ist das vertriebene Objekt.

Lassen Sie uns über die Eliminierungsstrategie des Redis-Cache sprechenDas graue Band sind die Objekte, die nicht geräumt wurden.

Das grüne Band ist das hinzugefügte Objekt.

  • Bei einer theoretischen LRU-Implementierung gehen wir davon aus, dass im alten Schlüssel die erste Hälfte abläuft. Der Redis LRU-Algorithmus lässt alte Schlüssel nur mit
  • Wahrscheinlichkeit
  • ablaufen.
LRU ist lediglich ein Modell, das die Wahrscheinlichkeit vorhersagt, dass in Zukunft auf einen bestimmten Schlüssel zugegriffen wird. Wenn Ihr Datenzugriffsmuster außerdem stark einem Potenzgesetz ähnelt, erfolgen die meisten Zugriffe in Schlüsselsätzen, die der LRU-Approximationsalgorithmus gut verarbeiten kann.
  • Nachteile: Innerhalb eines bestimmten Zeitraums kann auf eine große Menge kalter Daten zugegriffen werden, um eine große Menge heißer Daten zu generieren

LFU 算法

从 Redis 4.0 开始,可以使用新的最不常用驱逐模式。这种模式在某些情况下可能会更好(提供更好的命中率/未命中率),因为使用 LFU Redis 会尝试跟踪项目的访问频率,因此很少使用的项目会被驱逐,而经常使用的项目有更高的机会留在记忆中。

如果您认为在 LRU,最近访问过但实际上几乎从未被请求过的项目不会过期,因此风险是驱逐将来有更高机会被请求的密钥。LFU 没有这个问题,一般应该更好地适应不同的访问模式。

配置LFU模式,可以使用以下策略:

  • volatile-lfu 在具有过期集的键中使用近似 LFU 驱逐。
  • allkeys-lfu 使用近似 LFU 驱逐任何密钥。

LFU 类似于 LRU:它使用一个概率计数器,称为莫里斯计数器,以便仅使用每个对象的几位来估计对象访问频率,并结合衰减周期,以便计数器随着时间的推移而减少:在某些时候,我们不再希望将密钥视为经常访问的密钥,即使它们过去是这样,以便算法可以适应访问模式的转变。

这些信息的采样与 LRU 发生的情况类似(如本文档的前一部分所述),以便选择驱逐的候选人。

然而,与 LRU 不同的是,LFU 具有某些可调参数:例如,如果不再访问频繁项,它的排名应该以多快的速度降低?还可以调整 Morris 计数器范围,以便更好地使算法适应特定用例。

默认情况下,Redis 4.0 配置为:

  • 在大约一百万个请求时使计数器饱和。
  • 每一分钟衰减一次计数器。

这些应该是合理的值并经过实验测试,但用户可能希望使用这些配置设置以选择最佳值。

有关如何调整这些参数的说明可以redis.conf在源代码分发的示例文件中找到,但简单地说,它们是:

lfu-log-factor 10 
lfu-decay-time 1
Nach dem Login kopieren

衰减时间是显而易见的,它是计数器应该衰减的分钟数,当采样并发现它比该值更旧时。一个特殊值0意味着:每次扫描时总是衰减计数器,很少有用。

计数器对数因子会改变需要多少次命中才能使频率计数器饱和,这恰好在 0-255 的范围内。系数越高,需要越多的访问以达到最大值。根据下表,系数越低,低访问计数器的分辨率越好:

+--------+------------+------------+------------+------------+------------+
| factor | 100 hits   | 1000 hits  | 100K hits  | 1M hits    | 10M hits   |
+--------+------------+------------+------------+------------+------------+
| 0      | 104        | 255        | 255        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 1      | 18         | 49         | 255        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 10     | 10         | 18         | 142        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 100    | 8          | 11         | 49         | 143        | 255        |
+--------+------------+------------+------------+------------+------------+
Nach dem Login kopieren

淘汰最近一段时间被访问次数最少的数据,以次数作为参考。

缺点:

1. 最近加入的数据常常容易被剔除,因为其起始方法次数比较少,

2. 如果频率时间度量为 1 个小时,则平均一天每个小时内访问频率 1000 的热点数据可能会被 2个小时的一段时间访问的频率为 1001 的数据剔除掉。可能会出现一些临界值的数据。

缓存策略设置建议

建议:了解Redis 的淘汰策略之后,在平时使用尽量主动设置/更新 key 的 expire 时间主动剔除不活跃的旧数据, 有助于提升查询性能

更多编程相关知识,请访问:编程入门!!

Das obige ist der detaillierte Inhalt vonLassen Sie uns über die Eliminierungsstrategie des Redis-Cache sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage