Rumah > Java > javaTutorial > analisis contoh web java

analisis contoh web java

WBOY
Lepaskan: 2023-04-17 21:55:01
ke hadapan
1258 orang telah melayarinya

Teks

Dalam projek kerja sebenar, cache telah menjadi komponen utama seni bina berkonkurensi tinggi dan berprestasi tinggi Jadi mengapa Redis boleh digunakan sebagai cache? Pertama sekali, terdapat dua ciri utama caching:

  • berada dalam sistem hierarki dengan prestasi capaian memori/CPU yang baik,

  • caching data Tepu, dengan mekanisme penghapusan data yang baik

Oleh kerana Redis secara semula jadi mempunyai dua ciri ini, Redis adalah berdasarkan operasi memori, dan ia mempunyai mekanisme penghapusan data yang lengkap, yang sangat sesuai sebagai komponen cache.

Antaranya, berdasarkan operasi memori, kapasiti boleh menjadi 32-96GB, dan masa operasi adalah 100ns secara purata, dan kecekapan operasi adalah tinggi. Selain itu, terdapat banyak mekanisme penghapusan data, dan terdapat 8 daripadanya selepas Redis 4.0, yang menjadikan Redis boleh digunakan pada banyak senario sebagai cache.

Jadi mengapa cache Redis memerlukan mekanisme penghapusan data? Apakah 8 mekanisme penghapusan data?

Mekanisme penyingkiran data

Cache Redis adalah berdasarkan memori, jadi kapasiti cachenya terhad Apabila cache penuh, bagaimanakah Redis harus mengendalikannya?

Apabila cache penuh, Redis memerlukan mekanisme penghapusan data cache untuk memilih dan memadam beberapa data melalui peraturan penghapusan tertentu supaya perkhidmatan cache boleh digunakan semula. Jadi apakah strategi penghapusan yang Redis gunakan untuk memadam data?

Selepas Redis 4.0, terdapat 6+2 strategi penghapusan cache Redis, termasuk tiga kategori utama:

  • Tiada penyingkiran data

    • noeviction, tiada penghapusan data dilakukan Apabila cache penuh, Redis tidak menyediakan perkhidmatan dan mengembalikan ralat secara langsung.

  • Dalam pasangan nilai kunci yang menetapkan masa tamat tempoh,

    • rawak meruap, dalam kunci yang menetapkan masa tamat secara rawak Padamkan

    • tidak menentu-ttl daripada pasangan nilai Kunci-nilai yang menetapkan masa tamat akan dipadamkan berdasarkan masa tamat tempoh , lebih awal ia akan dipadamkan.

    • lru meruap, berdasarkan algoritma LRU (Paling Kurang Digunakan) untuk menapis pasangan nilai kunci dengan masa tamat tempoh, menapis data berdasarkan prinsip yang paling kurang digunakan baru-baru ini

    • volatile-lfu menggunakan algoritma LFU (Kurang Kerap Digunakan) untuk memilih pasangan nilai kunci dengan masa tamat tempoh ditetapkan dan menapis data menggunakan pasangan nilai kunci dengan kekerapan paling sedikit.

  • antara semua pasangan nilai kunci,

    • semua kunci-rawak, dipilih secara rawak daripada semua pasangan nilai kunci Dan padamkan data

    • allkeys-lru, gunakan algoritma LRU untuk menapis semua data

    • allkeys-lfu, gunakan algoritma LFU dalam semua data Penapis dalam

analisis contoh web java

Nota: algoritma LRU (Paling Kurang Digunakan), LRU mengekalkan dua hala senarai terpaut Kepala dan ekor senarai terpaut masing-masing mewakili penghujung MRU dan penghujung LRU, masing-masing mewakili data yang paling terkini digunakan dan data paling terkini yang paling jarang digunakan.

Dalam pelaksanaan sebenar, algoritma LRU perlu menggunakan senarai terpaut untuk mengurus semua data cache, yang akan membawa ruang tambahan di atas kepala. Selain itu, apabila data diakses, data perlu dialihkan ke MRU pada senarai terpaut Jika sejumlah besar data diakses, banyak operasi pemindahan senarai terpaut akan berlaku, yang akan memakan masa yang lama dan mengurangkan prestasi cache Redis. .

Antaranya, LRU dan LFU dilaksanakan berdasarkan atribut lru dan refcount redisObject, struktur objek Redis:

typedef struct redisObject {
    unsigned type:4;
    unsigned encoding:4;
    // 对象最后一次被访问的时间
    unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or
                            * LFU data (least significant 8 bits frequency
    // 引用计数                        * and most significant 16 bits access time). */
    int refcount;
    void *ptr;
} robj;
Salin selepas log masuk

LRU Redis akan menggunakan lru daripada redisObject untuk merekodkan akses terakhir Pada masa itu, nombor yang dikonfigurasikan dengan parameter maxmemory-samples dipilih secara rawak sebagai set calon, dan data dengan nilai atribut lru terkecil dipilih dan dihapuskan.

Dalam projek sebenar, bagaimana untuk memilih mekanisme penghapusan data?

  • Pilih algoritma allkeys-lru untuk menyimpan data yang paling terkini diakses dalam cache untuk meningkatkan prestasi capaian aplikasi.

  • Data teratas menggunakan algoritma volatile-lru. Data teratas tidak menetapkan masa tamat tempoh cache dan ditapis berdasarkan peraturan LRU.

Setelah memahami mekanisme penghapusan cache Redis, mari lihat berapa banyak mod yang ada pada Redis sebagai cache?

Mod cache Redis

Mod cache redis boleh dibahagikan kepada cache baca sahaja dan cache baca tulis berdasarkan sama ada untuk menerima permintaan tulis:

Cache baca sahaja: hanya mengendalikan operasi baca, semua Semua operasi kemas kini dilakukan dalam pangkalan data, jadi tiada risiko kehilangan data.

  • Mod Cache Aside

analisis contoh web java

Baca dan tulis operasi cache, baca dan tulis dilakukan dalam cache , muncul Kegagalan Masa Henti akan membawa kepada kehilangan data. Data tulis balik cache ke pangkalan data dibahagikan kepada dua jenis: segerak dan tak segerak:

  • Segerak: prestasi capaian rendah dan ia lebih memfokuskan pada memastikan kebolehpercayaan data

    • Mod Baca Melalui

    • Mod Tulis Melalui

  • Asynchronous: Terdapat risiko kehilangan data, tumpuannya Untuk menyediakan akses kependaman rendah

    • Mod Tulis-Belakang

analisis contoh web java

Mod Tepi Cache

Pertanyaan Data dibaca terlebih dahulu daripada cache. Jika ia tidak wujud dalam cache, data akan dibaca daripada pangkalan data Selepas data diperolehi, ia dikemas kini ke dalam cache dalam pangkalan data akan dikemas kini terlebih dahulu. Kemudian membatalkan data cache.

Selain itu, terdapat risiko serentak dalam mod Cache Aside: operasi baca terlepas cache, dan kemudian pangkalan data ditanya untuk mengambil data Data telah disoal tetapi belum diletakkan ke dalam cache Pada masa yang sama, operasi tulis kemas kini membatalkan cache , dan kemudian operasi baca memuatkan data pertanyaan ke dalam cache, mengakibatkan data kotor yang dicache.

Mod Baca/Tulis Melalui

Kedua-dua data pertanyaan dan data kemas kini mengakses terus perkhidmatan cache,

perkhidmatan cache mengemas kini data ke pangkalan data secara serentak . Kebarangkalian data kotor adalah rendah, tetapi ia sangat bergantung pada cache dan mempunyai keperluan yang lebih besar untuk kestabilan perkhidmatan cache Walau bagaimanapun, kemas kini segerak akan membawa kepada prestasi yang lemah.

Mod Tulis Di Belakang

Kedua-dua data pertanyaan dan mengemas kini data terus mengakses perkhidmatan cache,

tetapi perkhidmatan cache menggunakan cara tak segerak untuk mengemas kini data ke pangkalan data (melalui tugas tak segerak) Kelajuan Ia pantas dan kecekapan akan menjadi sangat tinggi, tetapi konsistensi data agak lemah, mungkin terdapat kehilangan data, dan logik pelaksanaan juga agak kompleks.

Dalam pembangunan projek sebenar, mod cache dipilih mengikut keperluan senario perniagaan sebenar. Selepas memahami perkara di atas, mengapa kita perlu menggunakan cache redis dalam aplikasi kita?

Menggunakan cache Redis dalam aplikasi boleh meningkatkan prestasi sistem dan keselarasan, terutamanya ditunjukkan dalam

  • Prestasi tinggi: berdasarkan pertanyaan memori, struktur KV, operasi logik mudah

  • Konkurensi tinggi: Mysql hanya boleh menyokong kira-kira 2000 permintaan sesaat, manakala Redis dengan mudah boleh melebihi 1W sesaat. Biarkan lebih daripada 80% pertanyaan melalui cache dan kurang daripada 20% pertanyaan melalui pangkalan data, yang boleh meningkatkan daya pemprosesan sistem dengan ketara

Walaupun menggunakan cache Redis boleh meningkatkan dengan ketara prestasi sistem, menggunakan Tanpa caching, beberapa masalah akan timbul, seperti ketidakkonsistenan dua hala antara cache dan pangkalan data, runtuhan cache, dll. Bagaimana untuk menyelesaikan masalah ini?

Masalah biasa menggunakan cache

Apabila menggunakan cache, akan terdapat beberapa masalah, terutamanya ditunjukkan dalam:

  • Cache tidak konsisten dengan double tulis pangkalan data

  • Cache avalanche: Redis cache tidak boleh mengendalikan sejumlah besar permintaan aplikasi, dan pemindahan ke lapisan pangkalan data menyebabkan lonjakan tekanan pada lapisan pangkalan data;

  • Penembusan cache: akses Data tidak wujud dalam cache Redis dan pangkalan data, menyebabkan sejumlah besar akses menembusi cache dan dipindahkan terus ke pangkalan data, menyebabkan lonjakan tekanan pada lapisan pangkalan data;

  • Pecahan cache: cache tidak boleh mengendalikan bintik panas frekuensi tinggi Data, mengakibatkan akses terus frekuensi tinggi ke pangkalan data, mengakibatkan lonjakan tekanan pada lapisan pangkalan data ;

Cache tidak konsisten dengan data pangkalan data

Cache baca sahaja (mod Cache Aside)

Untuk

cache baca sahaja (mod Cache Aside), operasi baca semua berlaku dalam cache, dan ketidakkonsistenan data hanya berlaku dalam operasi pemadaman (baru Operasi tidak akan berlaku, kerana penambahan baharu hanya akan diproses dalam pangkalan data). Apabila operasi pemadaman berlaku, cache akan menandakan data sebagai tidak sah dan mengemas kini pangkalan data. Oleh itu, dalam proses mengemas kini pangkalan data dan memadamkan nilai cache, tanpa mengira susunan pelaksanaan kedua-dua operasi, selagi satu operasi gagal, ketidakkonsistenan data akan berlaku.

Atas ialah kandungan terperinci analisis contoh web java. 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