1. Seorang jurutera pembangunan kanan SF Express melaksanakan perintah Redis yang berbahaya dalam talian, menyebabkan sebuah syarikat kehilangan 4 juta
Satu arahan mengakibatkan kerugian berjuta-juta. Adakah ini memerlukan pampasan?
Kod ini tidak diseragamkan dan rakan sekerja saya menangis.
Sebab ingin tahu, biar saya mengujinya.
2. Uji prestasi 10 juta data
1. Tulis fail skrip
untuk menulis 10 juta data.
for((i=1;i<=10000000;i++)); do echo "set k$i 哪吒编程$i" >> /tmp/test1.txt;done;
Salin selepas log masuk
Semak sama ada penulisan berjaya melalui /tmp/test1.txt
.
2 Tulis 10 juta data ke Redis
cat /tmp/test1.txt | redis-cli -a 111111 --pipe
Salin selepas log masuk
3 >
4 Larang penggunaan kekunci * melalui fail konfigurasi
Konfigurasikan keselamatan dalam fail redis.conf:
rename- command keys ""
rename- command flushdb ""
rename- command flushall ""
Salin selepas log masuk
3. Gunakan imbas dan bukannya kekunci *
Arahan Redis Scan digunakan untuk mengulangi kekunci pangkalan data dalam pangkalan data.
Perintah SCAN ialah iterator berasaskan kursor Setiap kali ia dipanggil, kursor baharu akan dikembalikan kepada pengguna Pengguna perlu menggunakan kursor baharu ini sebagai parameter kursor bagi perintah SCAN lelaran seterusnya. Dengan cara ini untuk meneruskan proses lelaran sebelumnya.
SCAN mengembalikan tatasusunan yang mengandungi dua elemen Elemen pertama ialah kursor baharu untuk lelaran seterusnya, dan elemen kedua ialah tatasusunan yang mengandungi semua elemen lelaran. Jika kursor baharu mengembalikan 0 ia menunjukkan bahawa lelaran telah tamat.
sintaks imbasan:
SCAN cursor [MATCH pattern] [COUNT count]
Salin selepas log masuk
4 Tolak kunci besar
1. Spesifikasi Pembangunan Alibaba Cloud Redis
Awan Alibaba Spesifikasi pembangunan Redis dengan jelas menetapkan
. “拒绝bigkey(防止网卡流量、慢查询)”
Jenis rentetan dikawal dalam 10KB dan bilangan elemen cincang, senarai, set dan zset tidak boleh melebihi 5000.
2. Bagaimana hendak memadamkan kunci besar apabila ia muncul?
- Jenis rentetan dipadamkan dengan del.
- Jenis lain dipadamkan secara berperingkat menggunakan kaedah hscan, sscan, dan zscan Pada masa yang sama, masalah pemadaman automatik masa tamat bigkey mesti dielakkan, kerana ia akan menyebabkan masalah utama. benang untuk disekat.
Hash Delete: hscan+hdel
public void delBigHash(String host, int port, String password, String bigHashKey) {
Jedis jedis = new Jedis(host, port);
if (password != null && !"".equals(password)) {
jedis.auth(password);
}
ScanParams scanParams = new ScanParams().count(100);
String cursor = "0";
do {
ScanResult<Entry<String, String>> scanResult = jedis.hscan(bigHashKey, cursor, scanParams);
List<Entry<String, String>> entryList = scanResult.getResult();
if (entryList != null && !entryList.isEmpty()) {
for (Entry<String, String> entry : entryList) {
jedis.hdel(bigHashKey, entry.getKey());
}
}
cursor = scanResult.getStringCursor();
} while (!"0".equals(cursor));
//删除 bigkey
jedis.del(bigHashKey);
}
Salin selepas log masuk
3. Apakah masalah yang akan ditimbulkan oleh bigkey?
- Memori yang tidak sekata menjadikan penghijrahan kelompok sukar; lalu lintas disekat;
- 4. Bagaimana untuk menemui kunci besar? (1) Cari melalui
.
(2) Kira bilangan bait setiap nilai kunci dan cari
redis-cli --bigkeys
mengikut kekunci penggunaan memori
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah yang akan disekat oleh arahan Redis bigkeys. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!