Heim >Backend-Entwicklung >PHP-Problem >Was soll ich tun, wenn PHP Redis verwendet und nicht genügend Speicher vorhanden ist?

Was soll ich tun, wenn PHP Redis verwendet und nicht genügend Speicher vorhanden ist?

藏色散人
藏色散人Original
2022-11-06 09:48:251689Durchsuche

Lösung für unzureichenden Speicher, wenn PHP Redis verwendet: 1. Stellen Sie die maximale Speichergröße von Redis über die Konfigurationsdatei oder den Befehl ein. 2. Rufen Sie die aktuelle Speichereliminierungsstrategie ab. 3. Ändern Sie sie über „config set maxmemory-policy“. Befehl „allkeys-lru“ Beseitigen Sie einfach die Strategie.

Was soll ich tun, wenn PHP Redis verwendet und nicht genügend Speicher vorhanden ist?

Redis占用内存大小

我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有

1、通过配置文件配置

通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小//设置Redis最大占用内存大小为100M maxmemory 100mb

redis的配置文件不一定使用的是安装目录下面的redis.conf文件, 启动redis服务的时候是可以传一个参数指定redis的配置文件的

2、通过命令修改

Redis支持运行时通过命令动态修改内存大小 //设置Redis最大占用内存大小为100M 127.0.0.1:6379> config set maxmemory 100mb //获取设置的Redis能使用的最大内存大小 127.0.0.1:6379> config get maxmemory存大小,在32位操作系统下最多使用3GB内存

Redis的内存淘汰

既然可以设置Redis最大占用内存大小,那么配置的内存就有用完的时候.那在内存用完的时候,还继续往Redis里面添加数据不就没内存可用了吗?实际上Redis定义了几种策略默认策略:分特殊请求除外)
allkeys-lru

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

allkeys-random

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

获取当前内存淘汰策略:127.0.0.1:6379> config get maxmemory-policy: maxmemory-policy allkeys-lru改淘汰策略:127.0.0.1:6379> config set maxmemory-policy allkeys-lru完了, 是可以使用LRU算法进行内存淘汰的, 那么什么是LRU算法呢?
LRU (Least Recent Used), der am wenigsten kürzlich verwendete Algorithmus, ist ein Cache-Ersetzungsalgorithmus. Bei der Verwendung von Speicher als Cache ist die Größe des Caches im Allgemeinen festgelegt. Wenn der Cache voll ist und Sie weiterhin Daten zum Cache hinzufügen, müssen Sie einige alte Daten löschen und Speicherplatz für die Speicherung neuer Daten freigeben. Zu diesem Zeitpunkt kann der LRU-Algorithmus verwendet werden. Die Kernidee ist: Wenn ein Datenelement in der letzten Zeit nicht verwendet wurde, ist die Möglichkeit einer zukünftigen Verwendung sehr gering, sodass es eliminiert werden kann.

Implementierung von LRU in Redis

Annähernder LRU-Algorithmus

Redis verwendet den ungefähren LRU-Algorithmus, der nicht mit dem herkömmlichen LRU-Algorithmus identisch ist. Der ungefähre LRU-Algorithmus eliminiert Daten durch Zufallsstichproben, wählt jedes Mal zufällig 5 (Standard-)Schlüssel aus und eliminiert die am längsten verwendeten Schlüssel.

Sie können die Anzahl der Samples über den Parameter „maxmemory-samples“ ändern: Beispiel: maxmemory-samples 10 Je größer die Konfiguration „maxmenory-samples“, desto näher liegt das Eliminierungsergebnis am strengen LRU-Algorithmus

Um die ungefähre LRU zu implementieren Algorithmus: Redis fügt jedem Schlüssel eine Erhöhung hinzu. Es wird ein zusätzliches 24-Bit-Feld hinzugefügt, um den Zeitpunkt des letzten Zugriffs auf den Schlüssel zu speichern.

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn PHP Redis verwendet und nicht genügend Speicher vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn