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

Bagaimana untuk menyelesaikan masalah yang akan disekat oleh arahan Redis bigkeys

WBOY
Lepaskan: 2023-05-28 13:22:06
ke hadapan
1634 orang telah melayarinya

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;
Salin selepas log masuk

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
Salin selepas log masuk

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 ""
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

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);
}
Salin selepas log masuk
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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan