Inhaltsverzeichnis
Redis缓存的淘汰策略
noeviction 策略
根据过期时间的淘汰策略
所有数据范围内的淘汰策略
关于LRU算法
Redis-Cache-Eliminierungsstrategie" >

Redis-Cache-Eliminierungsstrategie

Heim Datenbank Redis Eine kurze Analyse von 8 Eliminierungsstrategien im Redis-Cache

Eine kurze Analyse von 8 Eliminierungsstrategien im Redis-Cache

Nov 08, 2021 am 10:04 AM
redis 淘汰策略 缓存

In diesem Artikel können Sie über die 8 Eliminierungsstrategien im Rediscache sprechen und sehen, wie man sie verwendet. Ich hoffe, dass er für alle hilfreich ist!

Eine kurze Analyse von 8 Eliminierungsstrategien im Redis-Cache

Wir wissen, dass der Redis-Cache Speicher zum Speichern von Daten verwendet, aber die Speichergröße ist schließlich begrenzt. Da die Menge der zwischenzuspeichernden Daten immer größer wird, wird auch der Cache-Speicherplatz begrenzt zwangsläufig vollständig geschrieben werden. Zu diesem Zeitpunkt ist die Cache-Eliminierungsstrategie erforderlich, um die Daten zu löschen. [Verwandte Empfehlungen: Redis缓存使用内存来保存数据,但内存大小毕竟有限,随着要缓存的数据量越来越大,有限的缓存空间不可避免地会被写满。这时候就需要缓存的淘汰策略去删除数据。【相关推荐:Redis视频教程

Redis缓存的淘汰策略

Redis的淘汰策略,根据是否会进行数据淘汰可以把它们分成两类:

  • 不进行数据淘汰的策略,只有 noeviction 这一种。
  • 会进行淘汰的 7 种其他策略。

会进行淘汰的 7 种策略,我们可以再进一步根据淘汰候选数据集的范围把它们分成两类:

  • 在设置了过期时间的数据中进行淘汰,包括 volatile-random、volatile-ttl、volatile-lru、volatile-lfu(Redis 4.0 后新增)四种。

  • 在所有数据范围内进行淘汰,包括 allkeys-lru、allkeys-random、allkeys-lfu(Redis 4.0 后新增)三种。

Eine kurze Analyse von 8 Eliminierungsstrategien im Redis-Cache

在redis3.0之前,默认是volatile-lru;在redis3.0之后(包括3.0),默认淘汰策略则是noeviction

noeviction 策略

noeviction表示不淘汰数据,当缓存数据满了,有新的写请求进来,Redis不再提供服务,而是直接返回错误。

根据过期时间的淘汰策略

volatile-random、volatile-ttl、volatile-lru、volatile-lfu 四种策略是针对已经设置了过期时间的键值对。到键值对的到期时间到了或者Redis内存使用量达到了maxmemory阈值,Redis会根据这些策略对键值对进行淘汰;

  • volatile-ttl 在筛选时,会针对设置了过期时间的键值对,根据过期时间的先后进行删除,越早过期的越先被删除。
  • volatile-random 就像它的名称一样,在设置了过期时间的键值对中,进行随机删除。
  • volatile-lru 会使用 LRU 算法筛选设置了过期时间的键值对。
  • volatile-lfu 会使用 LFU 算法选择设置了过期时间的键值对。

所有数据范围内的淘汰策略

allkeys-lru、allkeys-random、allkeys-lfu 这三种策略淘汰的数据范围扩大到所有的键值对,无论这些键值对是否设置了过期时间,筛选数据进行淘汰的规则是:

  • allkeys-random 策略,从所有键值对中随机选择并删除数据;

  • allkeys-lru 策略,使用 LRU 算法在所有数据中进行筛选。

  • allkeys-lfu 策略,使用 LFU 算法在所有数据中进行筛选。

关于LRU算法

LRU算法即是最近最常使用算法,由于LRU会使用一个链表去维护使用的数据列表,当使用的数据越多,其移动元素时就会越耗时,这不可避免地会影响到Redis主线程。为此Redis对lru算法做了些简化。

LRU 策略的核心思想:如果一个数据刚刚被访问,那么这个数据肯定是热数据,还会被再次访问。

按照这个核心思想,Redis 中的 LRU 策略,会在每个数据对应的 RedisObject 结构体中设置一个 lru 字段,用来记录数据的访问时间戳。在进行数据淘汰时,LRU 策略会在候选数据集中淘汰掉 lru 字段值最小的数据(也就是访问时间最久的数据)。

所以,在数据被频繁访问的业务场景中,LRU 策略的确能有效留存访问时间最近的数据。而且,因为留存的这些数据还会被再次访问,所以又可以提升业务应用的访问速度。

具体做法是,在访问键值对时,redis会记录最近一次访问的时间戳。在redis决定淘汰数据时,会随机挑选N个数据,把它们作为一个候选集合,把最小的时间戳给筛选出去。当下一次要淘汰数据时,会挑选比第一次挑选的候选集合时间戳值要小的数据进入新的候选集合。当数据达到maxmemory-samples 时,将最小的值给淘汰掉。

通过该命令可以设置挑选的候选集合数CONFIG SET maxmemory-samples NRedis-Video-Tutorial

]

Redis-Cache-Eliminierungsstrategie

Redis-Eliminierungsstrategie, sie können in zwei Kategorien unterteilt werden:

  • Die einzige Strategie, die Daten nicht eliminiert, ist Noeviction.
  • 7 andere Strategien, die zur Eliminierung führen würden.
Es gibt 7 Eliminierungsstrategien. Wir können sie basierend auf dem Umfang der Eliminierungskandidatendatensätze weiter in zwei Kategorien einteilen: 🎜
  • 🎜In Daten mit einer festgelegten Ablaufzeit vier Typen, darunter volatile-random, volatile-ttl, volatile-lru, volatile-lfu (neu nach Redis 4.0). 🎜
  • 🎜Eliminieren Sie in allen Datenbereichen, einschließlich allkeys-lru, allkeys-random, allkeys-lfu (neu nach Redis 4.0). 🎜
🎜1 .png🎜🎜Vor Redis3.0 war die Standardeinstellung volatile-lru; nach Redis3.0 (einschließlich 3.0) war die Standardeliminierungsstrategie noeviction🎜 🎜Noeviction-Strategie🎜🎜🎜Noeviction bedeutet, Daten nicht zu löschen, wenn die Cache-Daten voll sind und neue Schreibanforderungen eingehen. Redis stellt keine Dienste mehr bereit, sondern gibt direkt einen Fehler zurück . 🎜

🎜Eliminationsstrategie basierend auf der Ablaufzeit🎜🎜🎜volatile-random, volatile-ttl, volatile-lru, volatile-lfu Die vier Strategien gelten für Schlüssel mit festgelegtem Wertpaar für die Ablaufzeit . Wenn die Ablaufzeit des Schlüssel-Wert-Paares erreicht ist oder die Redis-Speichernutzung den Schwellenwert maxmemory erreicht, eliminiert Redis das Schlüssel-Wert-Paar gemäß diesen Strategien 🎜
  • volatile -ttl filtert. Zu diesem Zeitpunkt werden die Schlüssel-Wert-Paare mit festgelegter Ablaufzeit entsprechend der Reihenfolge der Ablaufzeit gelöscht. Je früher die Ablaufzeit liegt, desto früher wird sie gelöscht.
  • volatile-random löscht, genau wie der Name, zufällig Schlüssel-Wert-Paare mit festgelegter Ablaufzeit.
  • volatile-lru verwendet den LRU-Algorithmus, um Schlüssel-Wert-Paare mit einer festgelegten Ablaufzeit zu filtern.
  • volatile-lfu verwendet den LFU-Algorithmus, um Schlüssel-Wert-Paare mit einer festgelegten Ablaufzeit auszuwählen.

🎜Eliminierungsstrategien in allen Datenbereichen🎜🎜🎜Datenbereiche eliminiert durch allkeys-lru, allkeys-random, allkeys-lfu Erweitert auf alle Schlüssel -Wert-Paare, unabhängig davon, ob für diese Schlüssel-Wert-Paare eine Ablaufzeit festgelegt ist, lauten die Regeln zum Filtern von Daten zur Eliminierung: 🎜
  • 🎜allkeys-random-Strategie, zufällige Auswahl und Löschung aus allen Schlüssel-Wert-Paaren Daten; 🎜
  • 🎜allkeys-lru-Strategie, die den LRU-Algorithmus zum Filtern aller Daten verwendet. 🎜
  • 🎜allkeys-lfu-Strategie, nutzt den LFU-Algorithmus, um alle Daten zu filtern. 🎜

🎜Über den LRU-Algorithmus🎜🎜🎜Der LRU-Algorithmus ist in letzter Zeit der am häufigsten verwendete Algorithmus, da LRU eine verknüpfte Liste verwendet, um die verwendeten zu verwalten Datenliste: Je mehr Daten verwendet werden, desto zeitaufwändiger ist das Verschieben von Elementen, was sich unweigerlich auf den Redis-Hauptthread auswirkt. Aus diesem Grund hat Redis einige Vereinfachungen am LRU-Algorithmus vorgenommen. 🎜🎜Die Kernidee der LRU-Strategie: Wenn gerade auf ein Datenelement zugegriffen wurde, müssen die Daten Hot Data sein und es wird erneut darauf zugegriffen. 🎜🎜Gemäß dieser Kernidee legt die LRU-Strategie in Redis ein LRU-Feld in der RedisObject-Struktur fest, das allen Daten entspricht, um den Zugriffszeitstempel der Daten aufzuzeichnen. Bei der Dateneliminierung eliminiert die LRU-Strategie die Daten mit dem kleinsten LRU-Feldwert (d. h. die Daten mit der längsten Zugriffszeit) im Kandidatendatensatz. 🎜🎜In Geschäftsszenarien, in denen häufig auf Daten zugegriffen wird, kann die LRU-Strategie die Daten tatsächlich mit der neuesten Zugriffszeit effektiv speichern. Darüber hinaus kann die Zugriffsgeschwindigkeit von Geschäftsanwendungen verbessert werden, da auf die gespeicherten Daten erneut zugegriffen werden kann. 🎜🎜Die spezifische Methode besteht darin, dass Redis beim Zugriff auf ein Schlüssel-Wert-Paar den Zeitstempel des letzten Zugriffs aufzeichnet. Wenn Redis beschließt, Daten zu eliminieren, wählt es zufällig N Daten aus, verwendet sie als Kandidatensatz und filtert den kleinsten Zeitstempel heraus. Bei der nächsten Dateneliminierung werden Daten mit einem Zeitstempelwert, der kleiner als der des erstmals ausgewählten Kandidatensatzes ist, ausgewählt und in einen neuen Kandidatensatz eingegeben. Wenn die Daten maxmemory-samples erreichen, wird der kleinste Wert eliminiert. 🎜🎜Verwenden Sie diesen Befehl, um die Anzahl der ausgewählten Kandidatensätze festzulegen CONFIG SET maxmemory-samples N🎜🎜🎜Verwendungsvorschläge🎜🎜🎜Basierend auf den Merkmalen der Strategie können verschiedene Strategien zur Dateneliminierung ausgewählt werden für verschiedene Szenarien. 🎜
  • Wenn die zwischengespeicherten Daten nicht offensichtlich heiß oder kalt sind, d. h. die Zugriffshäufigkeit der Daten nicht sehr unterschiedlich ist, wird empfohlen, die Zufallsstrategie allkeys-random zu verwenden, um die Daten zu entfernen. allkeys-random 随机策略淘汰数据;
  • 当数据有明显的冷热之分,建议使用allkeys-lru 或者volatile-lru 算法,将最近最常访问的数据留在缓存数据中;
  • 当业务中存在置顶需求,即不会过期的数据,这类一般不会设置过期时间,可以采用volatile-lru
  • Wenn die Daten offensichtlich heiß oder kalt sind, wird empfohlen, den Algorithmus allkeys-lru oder volatile-lru zu verwenden, um die zuletzt aufgerufenen Daten in den Cache-Daten zu behalten ;

Wenn es notwendig ist, das Geschäft zu übertreffen, d verwendet werden. Auf diese Weise wird diese Art von Daten nicht gelöscht, andere Daten können jedoch gemäß den LRU-Regeln gelöscht werden.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Einführung in die Programmierung🎜! ! 🎜

Das obige ist der detaillierte Inhalt vonEine kurze Analyse von 8 Eliminierungsstrategien im Redis-Cache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So erstellen Sie den Redis -Clustermodus So erstellen Sie den Redis -Clustermodus Apr 10, 2025 pm 10:15 PM

Der Redis -Cluster -Modus bietet Redis -Instanzen durch Sharding, die Skalierbarkeit und Verfügbarkeit verbessert. Die Bauschritte sind wie folgt: Erstellen Sie ungerade Redis -Instanzen mit verschiedenen Ports; Erstellen Sie 3 Sentinel -Instanzen, Monitor -Redis -Instanzen und Failover; Konfigurieren von Sentinel -Konfigurationsdateien, Informationen zur Überwachung von Redis -Instanzinformationen und Failover -Einstellungen hinzufügen. Konfigurieren von Redis -Instanzkonfigurationsdateien, aktivieren Sie den Cluster -Modus und geben Sie den Cluster -Informationsdateipfad an. Erstellen Sie die Datei nodes.conf, die Informationen zu jeder Redis -Instanz enthält. Starten Sie den Cluster, führen Sie den Befehl erstellen aus, um einen Cluster zu erstellen und die Anzahl der Replikate anzugeben. Melden Sie sich im Cluster an, um den Befehl cluster info auszuführen, um den Clusterstatus zu überprüfen. machen

So löschen Sie Redis -Daten So löschen Sie Redis -Daten Apr 10, 2025 pm 10:06 PM

So löschen Sie Redis -Daten: Verwenden Sie den Befehl Flushall, um alle Schlüsselwerte zu löschen. Verwenden Sie den Befehl flushdb, um den Schlüsselwert der aktuell ausgewählten Datenbank zu löschen. Verwenden Sie SELECT, um Datenbanken zu wechseln, und löschen Sie dann FlushDB, um mehrere Datenbanken zu löschen. Verwenden Sie den Befehl del, um einen bestimmten Schlüssel zu löschen. Verwenden Sie das Redis-Cli-Tool, um die Daten zu löschen.

So verwenden Sie den Befehl Redis So verwenden Sie den Befehl Redis Apr 10, 2025 pm 08:45 PM

Die Verwendung der REDIS -Anweisung erfordert die folgenden Schritte: Öffnen Sie den Redis -Client. Geben Sie den Befehl ein (Verbschlüsselwert). Bietet die erforderlichen Parameter (variiert von der Anweisung bis zur Anweisung). Drücken Sie die Eingabetaste, um den Befehl auszuführen. Redis gibt eine Antwort zurück, die das Ergebnis der Operation anzeigt (normalerweise in Ordnung oder -err).

So verwenden Sie ein einzelnes Gewinde -Redis So verwenden Sie ein einzelnes Gewinde -Redis Apr 10, 2025 pm 07:12 PM

Redis verwendet eine einzelne Gewindearchitektur, um hohe Leistung, Einfachheit und Konsistenz zu bieten. Es wird E/A-Multiplexing, Ereignisschleifen, nicht blockierende E/A und gemeinsame Speicher verwendet, um die Parallelität zu verbessern, jedoch mit Einschränkungen von Gleichzeitbeschränkungen, einem einzelnen Ausfallpunkt und ungeeigneter Schreib-intensiver Workloads.

So lesen Sie den Quellcode von Redis So lesen Sie den Quellcode von Redis Apr 10, 2025 pm 08:27 PM

Der beste Weg, um Redis -Quellcode zu verstehen, besteht darin, Schritt für Schritt zu gehen: Machen Sie sich mit den Grundlagen von Redis vertraut. Wählen Sie ein bestimmtes Modul oder eine bestimmte Funktion als Ausgangspunkt. Beginnen Sie mit dem Einstiegspunkt des Moduls oder der Funktion und sehen Sie sich die Codezeile nach Zeile an. Zeigen Sie den Code über die Funktionsaufrufkette an. Kennen Sie die von Redis verwendeten Datenstrukturen. Identifizieren Sie den von Redis verwendeten Algorithmus.

So implementieren Sie die zugrunde liegenden Redis So implementieren Sie die zugrunde liegenden Redis Apr 10, 2025 pm 07:21 PM

Redis verwendet Hash -Tabellen, um Daten zu speichern und unterstützt Datenstrukturen wie Zeichenfolgen, Listen, Hash -Tabellen, Sammlungen und geordnete Sammlungen. Ernähren sich weiterhin über Daten über Snapshots (RDB) und appendiert Mechanismen nur Schreibmechanismen. Redis verwendet die Master-Slave-Replikation, um die Datenverfügbarkeit zu verbessern. Redis verwendet eine Ereignisschleife mit einer Thread, um Verbindungen und Befehle zu verarbeiten, um die Datenatomizität und Konsistenz zu gewährleisten. Redis legt die Ablaufzeit für den Schlüssel fest und verwendet den faulen Löschmechanismus, um den Ablaufschlüssel zu löschen.

So lesen Sie Redis -Warteschlange So lesen Sie Redis -Warteschlange Apr 10, 2025 pm 10:12 PM

Um eine Warteschlange aus Redis zu lesen, müssen Sie den Warteschlangenname erhalten, die Elemente mit dem Befehl LPOP lesen und die leere Warteschlange verarbeiten. Die spezifischen Schritte sind wie folgt: Holen Sie sich den Warteschlangenname: Nennen Sie ihn mit dem Präfix von "Warteschlange:" wie "Warteschlangen: My-Queue". Verwenden Sie den Befehl LPOP: Wischen Sie das Element aus dem Kopf der Warteschlange aus und geben Sie seinen Wert zurück, z. B. die LPOP-Warteschlange: my-queue. Verarbeitung leerer Warteschlangen: Wenn die Warteschlange leer ist, gibt LPOP NIL zurück, und Sie können überprüfen, ob die Warteschlange existiert, bevor Sie das Element lesen.

So verwenden Sie Redis Lock So verwenden Sie Redis Lock Apr 10, 2025 pm 08:39 PM

Um die Operationen zu sperren, muss die Sperre durch den Befehl setNX erfasst werden und dann den Befehl Ablauf verwenden, um die Ablaufzeit festzulegen. Die spezifischen Schritte sind: (1) Verwenden Sie den Befehl setNX, um zu versuchen, ein Schlüsselwertpaar festzulegen; (2) Verwenden Sie den Befehl Ablauf, um die Ablaufzeit für die Sperre festzulegen. (3) Verwenden Sie den Befehl Del, um die Sperre zu löschen, wenn die Sperre nicht mehr benötigt wird.

See all articles