Maison> base de données> Redis> le corps du texte

Une brève analyse de 8 stratégies d'élimination dans le cache Redis

青灯夜游
Libérer: 2021-11-08 10:04:53
avant
9523 Les gens l'ont consulté

Cet article vous permettra de parler des 8 stratégies d'élimination dans le cacheRediset de voir comment les utiliser. J'espère qu'il sera utile à tout le monde !

Une brève analyse de 8 stratégies d'élimination dans le cache Redis

Nous savons que le cacheRedisutilise de la mémoire pour enregistrer les données, mais la taille de la mémoire est après tout limitée. À mesure que la quantité de données à mettre en cache devient de plus en plus grande, l'espace de cache limité le sera. sera inévitablement écrit Full. À ce stade, la stratégie d'élimination du cache est nécessaire pour supprimer les données. [Recommandations associées :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 后新增)三种。

Une brève analyse de 8 stratégies délimination dans le cache Redis

在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 NTutoriel vidéo Redis

]

Stratégie d'élimination du cache Redis

Stratégie d'élimination Redis, elles peuvent être divisées en deux catégories :

  • La seule stratégie qui n'élimine pas les données est la non-expulsion.
  • 7 autres stratégies qui mèneraient à l'élimination.
Il existe 7 stratégies d'élimination. Nous pouvons les diviser en deux catégories en fonction de la portée de l'ensemble de données candidates à l'élimination :
  • Dans les données avec un délai d'expiration. set Élimine quatre types, dont volatile-random, volatile-ttl, volatile-lru, volatile-lfu (nouveau après Redis 4.0).
  • Éliminer dans toutes les plages de données, y compris allkeys-lru, allkeys-random, allkeys-lfu (nouveau après Redis 4.0).
1 .pngAvant redis3.0, la stratégie par défaut était volatile-lru; après redis3.0 (y compris 3.0), la stratégie d'élimination par défaut était noevictionstratégie de noevictionnoeviction signifie ne pas éliminer les données lorsque les données du cache sont pleines et que de nouvelles demandes d'écriture arrivent, Redis ne fournira plus de services, mais renverra directement une erreur. .

Stratégie d'élimination basée sur le délai d'expirationvolatile-random, volatile-ttl, volatile-lru, volatile-lfu Les quatre stratégies concernent les clés avec une paire de valeurs définies pour le délai d'expiration . Lorsque le délai d'expiration de la paire clé-valeur est atteint ou que l'utilisation de la mémoire Redis atteint le seuilmaxmemory, Redis éliminera la paire clé-valeur selon ces stratégies
  • volatile ; -ttl filtre À ce moment, les paires clé-valeur avec le délai d'expiration défini seront supprimées selon l'ordre du délai d'expiration. Plus le délai d'expiration est précoce, plus il sera supprimé tôt.
  • volatile-random, tout comme son nom, supprime de manière aléatoire les paires clé-valeur avec un délai d'expiration défini.
  • volatile-lru utilisera l'algorithme LRU pour filtrer les paires clé-valeur avec un délai d'expiration défini.
  • volatile-lfu utilisera l'algorithme LFU pour sélectionner des paires clé-valeur avec un délai d'expiration défini.

Stratégies d'élimination dans toutes les plages de donnéesplages de données éliminées par allkeys-lru, allkeys-random, allkeys-lfu Étendu à toutes les clés. paires clé-valeur, que ces paires clé-valeur aient ou non un délai d'expiration défini, les règles de filtrage des données pour élimination sont :
  • stratégie allkeys-random, sélection et suppression aléatoires de toutes les paires clé-valeur Données ;
  • stratégie allkeys-lru, utilisant l'algorithme LRU pour filtrer toutes les données.
  • La stratégie allkeys-lfu utilise l'algorithme LFU pour filtrer toutes les données.

À propos de l'algorithme LRUL'algorithme LRU est l'algorithme le plus couramment utilisé récemment, car LRU utilise une liste chaînée pour maintenir l'algorithme utilisé data list , lorsque plus de données sont utilisées, plus le déplacement des éléments prendra du temps, ce qui affectera inévitablement le thread principal Redis. Pour cette raison, Redis a apporté quelques simplifications à l’algorithme lru. L'idée centrale de la stratégie LRU : si une donnée vient d'être consultée, alors les données doivent être des données chaudes et seront à nouveau accessibles. Selon cette idée principale, la stratégie LRU dans Redis définira un champ lru dans la structure RedisObject correspondant à chaque donnée pour enregistrer l'horodatage d'accès aux données. Lors de l'élimination des données, la stratégie LRU éliminera les données avec la plus petite valeur de champ lru (c'est-à-dire les données avec le temps d'accès le plus long) dans l'ensemble de données candidats. Ainsi, dans des scénarios commerciaux où les données sont fréquemment consultées, la stratégie LRU peut effectivement conserver efficacement les données avec le dernier temps d'accès. De plus, étant donné que les données conservées seront à nouveau accessibles, la vitesse d'accès des applications métier peut être améliorée. La méthode spécifique est que lors de l'accès à une paire clé-valeur, redis enregistrera l'horodatage de l'accès le plus récent. Lorsque Redis décide d'éliminer des données, il sélectionne au hasard N données, les utilise comme ensemble candidat et filtre le plus petit horodatage. Lorsque les données seront éliminées la prochaine fois, les données dont la valeur d'horodatage est inférieure à celle de l'ensemble candidat sélectionné pour la première fois seront sélectionnées et saisies dans un nouvel ensemble candidat. Lorsque les données atteignent maxmemory-samples, la plus petite valeur est éliminée. Vous pouvez définir le nombre d'ensembles candidats sélectionnés via cette commandeCONFIG SET maxmemory-samples NSuggestions d'utilisationEn fonction des caractéristiques de la stratégie, vous pouvez choisir différentes stratégies à éliminer données pour différents scénarios.
  • Lorsque les données mises en cache ne sont manifestement ni chaudes ni froides, c'est-à-dire que la fréquence d'accès aux données n'est pas très différente, il est recommandé d'utiliser la stratégie aléatoireallkeys-randompour éliminer les données ;allkeys-random随机策略淘汰数据;
  • 当数据有明显的冷热之分,建议使用allkeys-lru或者volatile-lru算法,将最近最常访问的数据留在缓存数据中;
  • 当业务中存在置顶需求,即不会过期的数据,这类一般不会设置过期时间,可以采用volatile-lru
  • Lorsque les données sont évidemment chaudes ou froides, il est recommandé d'utiliser l'algorithme allkeys-lruou volatile-lrupour conserver les données les plus récemment consultées dans les données du cache. ;

Lorsqu'il est nécessaire de surpasser l'entreprise, c'est-à-dire non Pour les données qui expireront, ce type de données n'a généralement pas de délai d'expiration défini, et la stratégievolatile-lrupeut être utilisé. De cette manière, ce type de données ne sera pas éliminé, mais d'autres données pourront être éliminées selon les règles LRU.

Pour plus de connaissances sur la programmation, veuillez visiter : Introduction à la programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!