Rumah  >  Artikel  >  pangkalan data  >  Cara menggunakan strategi padam berganda tertunda redis

Cara menggunakan strategi padam berganda tertunda redis

WBOY
WBOYke hadapan
2023-06-02 20:32:141538semak imbas

Biasanya, kami akan memberi keutamaan untuk menggunakan cache Redis untuk mengurangkan beban akses pangkalan data. Walau bagaimanapun, kami juga akan menghadapi situasi berikut: apabila sebilangan besar pengguna mengakses sistem kami, mereka akan menanyakan cache terlebih dahulu Jika tiada data dalam cache, mereka akan menanyakan pangkalan data, dan kemudian mengemas kini data ke cache , dan jika data dalam pangkalan data telah berubah Ia perlu disegerakkan kepada redis Semasa proses penyegerakan, ketekalan data antara MySQL dan redis perlu dipastikan Ia adalah perkara biasa untuk kelewatan data yang singkat berlaku semasa proses penyegerakan ini. tetapi pada akhirnya adalah perlu untuk memastikan konsistensi antara mysql dan cache.

//我们通常使用redis的逻辑
    //通常我们是先查询reids
    String value = RedisUtils.get(key);
    if (!StringUtils.isEmpty(value)){
        return value;
    }
//从数据库中获取数据
    value = getValueForDb(key);
    if (!StringUtils.isEmpty(value)){
           RedisUtils.set(key,value);
        return value;
     }

1. Apakah pemadaman berganda yang tertunda?

Strategi pemadaman berganda tertunda ialah strategi biasa untuk penyimpanan pangkalan data dan data cache untuk mengekalkan konsistensi dalam sistem teragih, tetapi ia tidak begitu konsisten. Malah, tidak kira penyelesaian yang digunakan, masalah data kotor dalam Redis tidak dapat dielakkan Ia hanya boleh mengurangkan masalah ini untuk menyelesaikannya sepenuhnya, kunci penyegerakan dan tahap logik perniagaan yang sepadan mesti digunakan untuk menyelesaikannya.

2. Mengapakah pemadaman berganda tertunda perlu dilakukan?

Secara amnya apabila kami mengemas kini data pangkalan data, kami perlu menyegerakkan data yang dicache dalam redis, jadi kami biasanya memberikan dua penyelesaian:

  • Penyelesaian pertama: laksanakan operasi kemas kini pertama , dan kemudian lakukan pembersihan cache.

  • Pilihan kedua: lakukan pembersihan cache dahulu, dan kemudian lakukan operasi kemas kini.

Walau bagaimanapun, kedua-dua penyelesaian ini terdedah kepada masalah berikut dalam permintaan serentak

Cara menggunakan strategi padam berganda tertunda redis

Kelemahan penyelesaian pertama: apabila permintaan 1 pergi Selepas operasi kemas kini pangkalan data dilakukan, sebelum pembersihan cache dilakukan, permintaan 2 masuk untuk menanyakan cache Pada masa ini, data dalam cache masih merupakan data lama, dan ia belum dipadamkan sebelum ia boleh dipadamkan. , menyebabkan masalah data. Walau bagaimanapun, selepas t1 menjalankan operasi pemadaman cache, Permintaan seterusnya tidak boleh menanyakan cache, kemudian menanyakan data, dan kemudian mengemas kininya kepada cache Impak ini agak kecil

  1. benang t1 mengemas kini db terlebih dahulu; utas telah mengemas kini db, dianggarkan kunci cache akan dipadamkan dalam masa 5 milisaat dan utas lain akan membuat pertanyaan dalam masa 5 milisaat Hasil cache masih merupakan data lama, tetapi hasil cache pertanyaan kosong selepas 5 milisaat dan. keputusan db terkini disegerakkan ke Redis sekali lagi.

  2. Adalah perkara biasa berlaku kelewatan dalam sesuatu projek, jadi kesan kelewatan tersebut terhadap perniagaan sebenarnya sangat terhad. Tetapi bagaimana jika ia berlaku dan pemadaman cache gagal?

  3. 1 Teruskan mencuba----jika ia berada dalam antara muka protokol http, tindak balas antara muka akan menjadi perlahan dan tamat masa tindak balas akan berlaku apabila memanggil antara muka ini 2. Atau segerakan melalui borang tak segerak mq

  4. Kelemahan penyelesaian kedua: apabila permintaan 1 mengosongkan cache tetapi belum melakukan operasi kemas kini data, permintaan 2 masuk untuk menanyakan data lama pangkalan data dan menulis Selepas memasukkan redis, ini membawa kepada masalah ketidakkonsistenan antara pangkalan data dan data redis.

Benang t1 memadamkan cache terlebih dahulu; 🎜>

Cara menggunakan strategi padam berganda tertunda redis

Urutan t1 mengemas kini data dalam db; >

3 , terdapat kelemahan dalam pemprosesan penyelesaian, jadi kita perlu menggunakan strategi padam berganda tertunda
  • untuk mengosongkan cache sebelum melakukan operasi kemas kini, dan menangguhkan N saat untuk mengosongkan cache sekali lagi selepas kemas kini selesai. Dua pemadaman dilakukan dan tempoh kelewatan diperlukan di antara

        RedisUtils.del(key);// 先删除缓存    updateDB(user);// 更新db中的数据    Thread.sleep(N);// 延迟一段时间,在删除该缓存key    RedisUtils.del(key);// 先删除缓存

    4. Perkara yang perlu diberi perhatian
  • Masa di atas (kelewatan N saat) lebih besar daripada masa menulis operasi. Jika masa menulis untuk redis lebih awal daripada masa kelewatan, permintaan 1 akan mengosongkan cache, tetapi cache permintaan 2 masih belum ditulis, mengakibatkan situasi yang memalukan. . .

    5. Bagaimana untuk menentukan masa kelewatan?
  • Anggaran berdasarkan masa operasi pelaksanaan logik perniagaan membaca data dan menulis cache, apabila program perniagaan dijalankan. "Pemadaman berganda tertunda" adalah kerana penyelesaian ini akan memadamkan nilai cache sekali lagi selepas kelewatan tempoh masa selepas memadamkannya buat kali pertama.

Atas ialah kandungan terperinci Cara menggunakan strategi padam berganda tertunda redis. 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