Sebelum artikel bermula, izinkan saya bertanyakan soalan kepada anda: Apabila kita menggunakan arahan: expire key second
Tetapkan masa tamat tempoh untuk kunci Setelah tamat tempoh, yang sepadan kunci 过期数据
Adakah ia benar-benar dipadamkan serta-merta oleh pelayan? Jawapannya ialah ia tidak akan dipadam serta merta. Mengetahui jawapan ini, mari kita lihat cara data yang telah tamat tempoh dikendalikan dalam Redis.
Redis ialah pangkalan data peringkat memori Semua data disimpan dalam ingatan boleh mendapatkan statusnya melalui arahan TTL Terdapat tiga negeri:
Apabila kami menggunakan arahan untuk menetapkan data tamat tempoh, alamat yang sepadan dengan data akan diletakkan dalam ruang tamat tempoh, dan kaedah penyimpanan ialah hash , nilai yang disimpan ialah masa tamat tempoh.
数据删除策略目标:
Cari keseimbangan antara penggunaan memori dan penggunaan CPU Kegagalan untuk mempertimbangkan satu atau yang lain akan mengakibatkan penurunan dalam prestasi redis keseluruhan masa mati pelayan atau kebocoran memori tugas pemasa akan segera melaksanakan pemadaman kekunci
Simpan memori, padamkannya apabila tiba masanya dan lepaskan penggunaan memori yang tidak perlu dengan cepat
Kelemahan: CPU berada di bawah tekanan yang hebat Tidak kira berapa tinggi beban CPU pada masa ini, ia akan menduduki CPU, yang akan menjejaskan tindak balas pelayan redis. masa dan penghantaran arahan
2 pemadaman malas
Data tidak akan diproses apabila ia sampai. masa tamat tempoh. Pada kali berikutnya data diakses, fungsi akan dipanggil untuk menentukan sama ada data telah tamat tempoh: Jika ia belum tamat tempoh, pulangkan data, cari ia telah tamat tempoh, padamkannya, kembalikan tidak wujud
Simpan prestasi CPU, hanya padam apabila anda mendapati perlu untuk memadam expireIfNeeded()
Kelemahan: Tekanan memori adalah sangat tinggi, dan data yang menduduki memori untuk masa yang lama muncul
Pemadaman biasa
dan kemudian laksanakannya 10 kali sesaat
, yang digunakan untuk melintasi pangkalan data Redis mempunyai 16 pangkalan data secara lalai, bermula dari Apabila pangkalan data bermula, kaedah serverCron()
akan memanggil. kaedah serverCron()
, yang akan mengesan setiap databasesCron()
satu demi satu, setiap kali melaksanakan 250ms/server.hz Apabila mengesan
Jika masa kunci tamat, padamkan kekunci jika bilangan kekunci dipadamkan dalam satu pusingan > W25% , gelungkan proses jika bilangan kekunci yang dipadam dalam satu pusingan ialah ≤W25%, semak seterusnya databasesCron()
, gelung 0-15. Antaranya, nilai W = ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP nilai atribut activeExpireCycle()
expires[*]
expires[*]
parameter current_db digunakan untuk merekod yang tamat tempoh [*] activeExpireCycle() masuk untuk melaksanakan expires[*]
Tekanan memori tidak terlalu tinggi, dan data sejuk yang telah menduduki memori untuk masa yang lama akan Pembersihan berterusan
5 Perbandingan strategi pemadaman总结:
Apabila data baharu memasuki redis, apakah yang perlu saya lakukan jika memori tidak mencukupi? Redis menggunakan memori untuk menyimpan data Sebelum melaksanakan setiap arahan, ia akan memanggil freeMemoryIfNeeded()
untuk menyemak sama ada memori mencukupi. Jika memori tidak memenuhi keperluan storan minimum untuk data yang baru ditambah, redis akan memadam sementara beberapa data untuk mengosongkan ruang storan untuk arahan semasa. Strategi untuk membersihkan data dipanggil algoritma pengusiran.
Nota: Proses membuang data tidak 100% dapat mengosongkan ruang memori yang boleh digunakan jika tidak berjaya, ia akan dilaksanakan berulang kali. Selepas mencuba semua data, jika keperluan pembersihan memori tidak dapat dipenuhi, mesej ralat akan muncul.
Kesan data yang tidak menentu (可能会过期的数据集server.db[i].expires
)
volatile-lru | 挑选最近最少使用的数据淘汰 |
---|---|
volatile-lfu | 挑选最近使用次数最少的数据淘汰 |
volatile-ttl | 挑选将要过期的数据淘汰 |
volatile-random | 任意选择数据淘汰 |
Kesan data pangkalan data penuh (所有数据集server.db[i].dict
)
allkeys-lru | 挑选最近最少使用的数据淘汰 |
---|---|
allkeys-lfu | 挑选最近使用次数最少的数据淘汰 |
allkeys-random | 任意选择数据淘汰 |
Tinggalkan pembuangan data:
no-enviction | 禁止驱逐数据(redis4.0中默认策略) |
---|
Atas ialah kandungan terperinci Tiga kaedah strategi pemadaman Redis dan analisis contoh algoritma pengusiran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!