Maison  >  Article  >  développement back-end  >  Que dois-je faire si PHP utilise Redis et que la mémoire est insuffisante ?

Que dois-je faire si PHP utilise Redis et que la mémoire est insuffisante ?

藏色散人
藏色散人original
2022-11-06 09:48:251574parcourir

Solution à la mémoire insuffisante lorsque PHP utilise 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. Modifiez-la via le "config set maxmemory-policy ; allkeys-lru" commande Éliminez simplement la stratégie.

Que dois-je faire si PHP utilise Redis et que la mémoire est insuffisante ?

本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。

Redis占用内存大小

我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。

1、Redis.大小

//设置Redis最大占用内存大小为100M maxmemory 100mb

redis的配置文件不一定Les versions redis.conf sont également disponibles.

2.
//设置Redis最大占用内存大小为100M 127.0.0.1:6379> config set maxmemory 100 Mo //获取设置的Redis能使用的最大内存大小 127.0.0.1:6379> config get maxmemory大小,在32位操作系统下最多使用3GB内存

Redis的内存淘汰

Le système Redis est doté d'un système de gestion de réseau. L'application Redis est-elle disponible ?用来处理这种情况:

noeviction(默认策略)

:对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)
allkeys-lru
:从所有key中使用LRU算法进行淘汰

volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰allkeys-random

:从所有key中随机淘汰数据

volatile-random:从设置了过期时间的key中随机淘汰volatile -ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰当使用 volatile-lruvolatile-randomvolatile-ttl这三种策略时,如果没有key可以被淘汰,则和 noeviction

一样返回错误
如何获取及设置内存淘汰策略获取当前内存淘汰策略:127.0.0.1:6379> config get maxmemory-policy改淘汰策略:
127.0.0.1:6379> config set maxmemory-policy allkeys-lru完了,是可以使用LRU算法进行内存淘汰的,那么什么是LRU算法

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.

Implémentation de LRU dans Redis

Algorithme LRU approximatif

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 valeur supplémentaire à 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.

Apprentissage recommandé : "Tutoriel vidéo PHP"

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!

Déclaration:
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