Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menyelesaikan masalah yang akan disekat oleh arahan Redis bigkeys

Bagaimana untuk menyelesaikan masalah yang akan disekat oleh arahan Redis bigkeys

WBOY
WBOYke hadapan
2023-05-28 13:22:061562semak imbas

1. Seorang jurutera pembangunan kanan SF Express melaksanakan perintah Redis yang berbahaya dalam talian, menyebabkan sebuah syarikat kehilangan 4 juta

Bagaimana untuk menyelesaikan masalah yang akan disekat oleh arahan Redis bigkeys

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;

Semak sama ada penulisan berjaya melalui /tmp/test1.txt.

Bagaimana untuk menyelesaikan masalah yang akan disekat oleh arahan Redis bigkeys

2 Tulis 10 juta data ke Redis

cat /tmp/test1.txt | redis-cli -a 111111 --pipe

Bagaimana untuk menyelesaikan masalah yang akan disekat oleh arahan Redis bigkeys

3 >

Bagaimana untuk menyelesaikan masalah yang akan disekat oleh arahan Redis bigkeys

4 Larang penggunaan kekunci * melalui fail konfigurasi

Konfigurasikan keselamatan dalam fail redis.conf:

  rename- command keys ""
  rename- command flushdb ""
  rename- command flushall ""

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]

Bagaimana untuk menyelesaikan masalah yang akan disekat oleh arahan Redis bigkeys

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?

  1. Jenis rentetan dipadamkan dengan del.

  2. 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);
}

3. Apakah masalah yang akan ditimbulkan oleh bigkey?

  1. Memori yang tidak sekata menjadikan penghijrahan kelompok sukar; lalu lintas disekat;

  2. 4. Bagaimana untuk menemui kunci besar?

    (1) Cari melalui
  3. .
(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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam