Maison > Article > base de données > Comment résoudre le problème de mémoire insuffisante lors de l'utilisation de Redis en php
Solution à la mémoire insuffisante de PHP à l'aide de redis : 1. Définissez la taille maximale de la mémoire de Redis à 100 Mo via le fichier de configuration ou la commande ; 2. Obtenez la stratégie d'élimination de mémoire actuelle 3. Via "config set maxmemory-policy ; allkeys-lru" Il suffit de commander pour modifier la stratégie d'élimination.
Nous savons que Redis est une base de données clé-valeur basée sur la mémoire. La taille de la mémoire du système étant limitée, nous pouvons configurer la taille de mémoire maximale que Redis peut utiliser lors de l'utilisation de Redis. .
Définissez la taille de la mémoire en ajoutant la configuration suivante dans le fichier de configuration redis.conf sous le répertoire d'installation de Redis
//Définissez la taille de mémoire maximale occupée par Redis sur 100 Mo maxmemory 100 Mo.
Configuration redis Le fichier n'utilise pas nécessairement le fichier redis.conf sous le répertoire d'installation Lors du démarrage du service redis, vous pouvez passer un paramètre pour spécifier le fichier de configuration redis
Redis prend en charge. modification dynamique via des commandes pendant l'exécution Taille de la mémoire
//Définissez la taille de mémoire maximale occupée par Redis à 100 Mo 127.0.0.1:6379> config set maxmemory 100mb //Obtenez la taille de mémoire maximale que Redis peut utiliser 127.0.0.1:6379> get maxmemory
Si vous ne définissez pas la taille maximale de la mémoire ou définissez la taille maximale de la mémoire sur 0. Il n'y a pas de limite à la taille de la mémoire sous un système d'exploitation 64 bits. Un maximum de 3 Go de mémoire peut être utilisé sous un système d'exploitation 32 bits. système.
Maintenant que vous pouvez définir la taille maximale de la mémoire occupée par Redis, la mémoire configurée sera utilisée. Ensuite, lorsque la mémoire sera épuisée, n'y aura-t-il pas de mémoire disponible si nous continuons à ajouter des données à Redis ? En fait, Redis définit plusieurs stratégies pour gérer cette situation : noeviction (stratégie par défaut) : Ne fournit plus de services pour les requêtes d'écriture et renvoie directement une erreur (sauf pour les requêtes DEL et certaines requêtes spéciales) allkeys-lru : From Use l'algorithme LRU pour éliminer de toutes les clés volatile-lru : utiliser l'algorithme LRU pour éliminer les clés avec un délai d'expiration défini allkeys-random : éliminer de manière aléatoire les données de toutes les clés volatile-random : éliminer des clés avec un délai d'expiration défini Élimination aléatoire parmi les clés temporelles volatile-ttl : Parmi les clés avec un délai d'expiration défini, elles seront éliminées en fonction du délai d'expiration de la clé. Plus la date d'expiration est précoce, plus la priorité sera éliminée
Lors de l'utilisation de . volatile-lru, volatile- Lors de l'utilisation des trois stratégies random et volatile-ttl, si aucune clé ne peut être éliminée, la même erreur sera renvoyée que noeviction
Obtenez la stratégie d'élimination de mémoire actuelle :
127.0.0.1:6379> config get maxmemory-policy
Définissez la politique d'élimination via le fichier de configuration (modifiez le fichier redis.conf) :
maxmemory-policy allkeys -lru
Modifiez la politique d'élimination via la commande :
127.0.0.1:6379> ; config set maxmemory-policy allkeys-lru
Il est mentionné ci-dessus que le La mémoire maximale disponible pour Redis est épuisée et l'algorithme LRU peut être utilisé pour éliminer la mémoire, alors qu'est-ce que LRU ? Et les algorithmes ?
LRU (Least Récemment Utilisé), qui est le moins récemment utilisé, est un algorithme de remplacement de cache. Lors de l'utilisation de la mémoire comme cache, la taille du cache est généralement fixe. Lorsque le cache est plein et que vous continuez à ajouter des données au cache, vous devez éliminer certaines anciennes données et libérer de l'espace mémoire pour stocker de nouvelles données. A ce stade, vous pouvez utiliser l'algorithme LRU. L'idée centrale est la suivante : si une donnée n'a pas été utilisée au cours de la période récente, la possibilité d'être utilisée à l'avenir est très faible, elle peut donc être éliminée.
Redis utilise l'algorithme LRU approximatif, qui n'est pas le même que l'algorithme LRU conventionnel. L'algorithme LRU approximatif élimine les données par échantillonnage aléatoire, en sélectionnant au hasard 5 clés (par défaut) à chaque fois et en éliminant les clés les moins récemment utilisées.
Vous pouvez modifier le nombre d'échantillons via le paramètre maxmemory-samples : Exemple : maxmemory-samples 10 Plus la configuration maxmenory-samples est grande, plus le résultat de l'élimination est proche de l'algorithme LRU strict
Afin d'implémenter le LRU approximatif algorithme, Redis ajoute une augmentation à chaque clé. Un champ supplémentaire de 24 bits est ajouté pour stocker la dernière fois que la clé a été accédée.
1. phpStudy est l'environnement de développement le plus couramment utilisé pour les débutants.
Deuxièmement, WampServer, WampServer est également aussi simple à utiliser que phpStudy et plus convivial pour les novices.
3. XAMPP, XAMPP (Apache+MySQL+PHP+PERL) est un puissant logiciel de création de sites Web intégré
4 MAMP, MAMP est divisé en deux types : MAMP et MAMP Pro pour Mac.
5. Pagoda Panel, Pagoda Panel est un logiciel de gestion de serveur qui prend en charge les systèmes Windows et Linux.
6. UPUPW, UPUPW est actuellement la suite PHP de serveur Web la plus distinctive sous la plate-forme Windows.
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!