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!
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 种策略,我们可以再进一步根据淘汰候选数据集的范围把它们分成两类:
在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 N
Redis-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). 🎜
🎜
🎜🎜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!