Avant de commencer l'article, laissez-moi vous poser une question : Lorsque nous utilisons la commande : expire key second
给一个key设置过期时间,过期时间一到,这个key对应的过期数据
Est-elle vraiment supprimée immédiatement par le serveur ? La réponse est qu’il ne sera pas supprimé immédiatement. Connaissant cette réponse, examinons comment les données expirées sont traitées dans Redis.
Redis est une base de données au niveau de la mémoire. Toutes les données sont stockées dans la mémoire. Les données dans la mémoire peuvent obtenir leur statut via des instructions TTL :
Statut | |||
---|---|---|---|
Données temporelles | |||
Données valides en permanence | |||
Données expirées ou données supprimées ou données non définies |
2. Suppression paresseuse |
Les données atteignent le délai d'expiration et ne seront pas traitées. Lors du prochain accès aux données, la fonction expireIfNeeded() sera appelée pour déterminer si les données ont expiré : si elles n'ont pas expiré, renvoyez les données, trouvez qu'elles ont expiré, supprimez-les et le retour n'existe pas |
||
---|---|---|---|
Inconvénients :Pression élevée de la mémoire, données qui prend de la mémoire pendant longtemps apparaît | |||
Analyse du processus : | Lorsque le serveur Redis démarre et initialise, lisez la valeur de la configuration server.hz, la valeur par défaut est 10 | Ensuite, la méthode |
serverCron()
appellera à son tour la méthode databasesCron()
, cette méthode est utilisée pour parcourir la base de données Redis a 16 bases de données par défaut, à partir de la. la première méthode database🎜🎜🎜🎜databasesCron()
appellera la méthode activeExpireCycle(), cette méthode détectera chaque expire[*]
un par un , exécutant 250ms/server.hz à chaque fois ; pendant un certain expire[* ]
Pendant la détection, sélectionnez au hasard les clés W pour la détection🎜🎜🎜🎜Si le délai d'expiration de la clé est détecté, supprimez la clé ; si le nombre de clés supprimées en un tour > W25%, bouclez le processus ; si en un tour le nombre de clés supprimées est Résumé :
Interrogez périodiquement les données opportunes dans la bibliothèque Redis, adoptez une stratégie d'extraction aléatoire et utilisez la proportion des données expirées pour contrôler la fréquence de suppression 🎜🎜🎜🎜La pression mémoire n'est pas très élevée, les données froides qui occupent la mémoire depuis longtemps seront nettoyées en continu 🎜🎜🎜🎜 5. Comparaison des stratégies de suppression 🎜🎜🎜🎜🎜Suppression régulière 🎜🎜 économise de la mémoire, aucune occupation 🎜🎜 peu importe Les périodes occupent les ressources du processeur, haute fréquence🎜🎜Temps d'échange contre de l'espace🎜🎜🎜🎜Suppression paresseuse🎜🎜Utilisation importante de la mémoire🎜🎜Exécution retardée, utilisation élevée du processeur🎜🎜Echange d'espace contre du temps🎜🎜 🎜🎜Suppression régulière🎜🎜Mémoire Nettoyage aléatoire régulier🎜🎜dépense des ressources CPU fixes par seconde pour maintenir la mémoire🎜🎜vérifications ponctuelles aléatoires et ciblées🎜🎜🎜🎜Que faire si la mémoire est insuffisante lorsque de nouvelles données entrent dans Redis ? Redis utilise la mémoire pour stocker les données. Avant d'exécuter chaque commande, freeMemoryIfNeeded()
sera appelé pour vérifier si la mémoire est suffisante. Si la mémoire ne répond pas aux exigences minimales de stockage pour les données nouvellement ajoutées, redis supprimera temporairement certaines données pour libérer de l'espace de stockage pour l'instruction en cours. La stratégie de nettoyage des données s’appelle l’algorithme d’expulsion. freeMemoryIfNeeded()
检测内存是否充足。如果内存不满足新加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理存储空间。清理数据的策略称为逐出算法。
注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间,如果不成功则反复执行。当对所有数据尝试完毕后,如果不能达到内存清理的要求,将出现错误信息。
检测易失数据(可能会过期的数据集server.db[i].expires
)
volatile-lru | 挑选最近最少使用的数据淘汰 |
---|---|
volatile-lfu | 挑选最近使用次数最少的数据淘汰 |
volatile-ttl | 挑选将要过期的数据淘汰 |
volatile-random | 任意选择数据淘汰 |
检测全库数据(所有数据集server.db[i].dict
2. Huit configurations | |
---|---|
volatile-lru | |
volatile-lfu |
volatile-ttl
volatile-random | Choisissez les données à éliminer |
---|
tous les ensembles de données server.db[i].dict
)🎜🎜🎜🎜🎜allkeys-lru🎜🎜Sélectionner les données les moins récemment utilisées à éliminer🎜🎜🎜🎜allkeys- lfu 🎜🎜Choisissez les données les moins récemment utilisées pour l'élimination🎜🎜🎜🎜allkeys-random🎜🎜Toute sélection de données pour l'élimination🎜🎜🎜🎜🎜🎜abandonner l'expulsion des données : 🎜🎜🎜🎜🎜🎜no-enviction🎜 🎜 interdire l'expulsion des données (stratégie par défaut redis4 .0)🎜🎜🎜🎜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!