Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah yang perlu saya lakukan jika PHP menggunakan redis dan memori tidak mencukupi?

Apakah yang perlu saya lakukan jika PHP menggunakan redis dan memori tidak mencukupi?

藏色散人
藏色散人asal
2022-11-06 09:48:251634semak imbas

Penyelesaian kepada memori PHP yang tidak mencukupi menggunakan redis: 1. Tetapkan saiz memori maksimum Redis kepada 100M melalui fail konfigurasi atau arahan 2. Dapatkan strategi penghapusan memori semasa 3. Melalui "config set maxmemory-; policy allkeys- lru" arahan untuk mengubah suai strategi penghapusan.

Apakah yang perlu saya lakukan jika PHP menggunakan redis dan memori tidak mencukupi?

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

Redis占用内存大小

我们知道Redis是基占用内存大小

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

1、通罇酿置🎜>

通过在Redis安装目录下面的redis. conf配置文件中添加以下配置设置内存大小

//设置Redis最大占用内存占用内存大小>redis的配置文件不一定使用的是安装目录下面的redis.conf文件,启动redis服务的时候是可以传一个参数指定redis的配置文件的

仇>Redis支持运行时通过命令动态修改内存大小

//设置Redis最大占用内存大小为100M 127.0.0.1:6379> set konfigurasi maxmemory 100mb //获取设置的Redis能使用的最大内存大小 127.0.0.1:6379> config get maxmemory

如果不设置最大内存大小或者设置最大内存大小为0,在64位糍位内存大小,在32位操作系统下最多使用3GB内存

Redis的内存淘汰

既然可以设置Redis最大占用内存大小,那么配置的内大占用内存大小,那么配置的小家那在内存用完的时候,还继续往Redis里面添加数据不就没内存可用了吗?实际上Redis定义了几种策略用来处理这种情况:定箚义了几种策略用来处理这种情况:

不情况:

不就没内存于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)allkeys-lru:从所有key中使用LRU算法进行淘汰从所有key中使用LRU算法进行淘汰从佮lru时间的key中使用LRU算法进行淘汰 allkeys-random:从所有key中随机淘汰数据volatile-random:从设置了过期时:间的key中随朰中随朰中随朰在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰当使ru用 🎜 meruap 🎜 🎜>、

Volatile-ttl
这三种策略时, 如果没有 Key 可以被淘汰, 则和 noeviction 一样返回错误 如何获取及设置内存淘汰策略 获取当前内存淘汰策略:

127.0.0.1:6379> config get maxmemory-policy通过配置文件设置淘汰策略(修改redis.conf文件):

allmaxmemory-policy命令修改淘汰策略:

127.0.0.1:6379> config set maxmemory-policy allkeys-lru

LRU算法

什么是LRU?

上尼佢诜>上尢䯆识最大内存使用完了,是可以使用LRU算法进行内存淘汰的,那么什么是LRU算法LRU (Paling Kurang Digunakan), yang paling kurang digunakan baru-baru ini, ialah algoritma penggantian cache. Apabila menggunakan memori sebagai cache, saiz cache biasanya ditetapkan. Apabila cache penuh dan anda terus menambah data pada cache, anda perlu menghapuskan beberapa data lama dan mengosongkan ruang memori untuk menyimpan data baharu. Pada masa ini, algoritma LRU boleh digunakan. Idea teras ialah: jika sekeping data tidak digunakan dalam tempoh baru-baru ini, kemungkinan untuk digunakan pada masa hadapan adalah sangat kecil, jadi ia boleh dihapuskan.

Pelaksanaan LRU dalam Redis

Algoritma LRU Anggaran

Redis menggunakan algoritma LRU anggaran, yang serupa dengan konvensional Algoritma LRU tidaklah sama. Algoritma LRU anggaran menghapuskan data melalui pensampelan rawak, memilih 5 kekunci (lalai) secara rawak setiap kali, dan menghapuskan kekunci yang paling kurang digunakan baru-baru ini.

Anda boleh mengubah suai bilangan sampel melalui parameter maxmemory-samples: Contoh: maxmemory-samples 10 Semakin besar konfigurasi sampel maxmenory, semakin hampir hasil penyingkiran dengan algoritma LRU yang ketat

Redis untuk mencapai anggaran Algoritma LRU menambah medan 24-bit tambahan pada setiap kunci untuk menyimpan kali terakhir kunci itu diakses.

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika PHP menggunakan redis dan memori tidak mencukupi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn