Penyelewengan dalam penggunaan Redis
Set data operasi: Gunakan senarai Redis, set, set diisih untuk memudahkan pengiraan data, seperti persilangan, kesatuan, set perbezaan, dll.; struktur redis untuk melaksanakan perkhidmatan yang berkaitan dengan log masuk; >-
Kunci teragih: Gunakan fungsi setnx Redis untuk menulis kunci teragih, komponen sumber terbuka biasa seperti redisson;
Boleh dikatakan bahawa apabila ia berkaitan dengan pengoptimuman prestasi redis dalam talian, reka bentuk kunci yang tidak munasabah sering menjadi punca masalah Pada dasarnya, dari apa yang saya lihat secara peribadi, kebanyakan Apabila pelajar menggunakan redis, mereka hampir tiada konsep reka bentuk kunci, kerana senario yang kebanyakan pelajar gunakan ialah kunci/val, dan struktur data yang sepadan ialah kunci rentetan/rentetan val
- Pelajar yang mempunyai pemahaman yang lebih mendalam tentang redis mungkin tahu bahawa reka bentuk kunci harus seperti; sesingkat mungkin semasa menyimpan, dan yang terbaik adalah mempunyai rasa hierarki di tengah. Sebaiknya bahagikannya dengan:...Jadi bagaimana kita boleh mereka bentuk kunci yang lebih elegan? Mari kita bincangkan secara terperinci berdasarkan pengalaman sebenar editor dan masalahnya; :[Nama Data]:[id];
-
Panjang kekunci tidak boleh melebihi 44 bait;
-
Berkenaan dengan cadangan di atas, ini mempunyai kelebihan berikut:
-
Kebolehbacaan tinggi, seperti apabila kami Mereka bentuk struktur utama, tertib: pengguna:10 Sekali imbas, anda boleh tahu bahawa ini adalah kunci yang berkaitan dengan pesanan pengguna; mudah untuk mencari dan mencari kunci dalam alat klien visual atau baris perintah; >
Gunakan jenis rentetan sebagai kunci dan pengekodan asas termasuk int, embstr dan mentah, yang boleh mengurangkan penggunaan memori dengan berkesan. Menggunakan embstr boleh memproses rentetan yang lebih kecil daripada 44 bait dengan jejak memori yang lebih kecil kerana ia menggunakan ruang memori berterusan
-
Nilai yang disyorkan:
Nilai kunci tunggal adalah kurang daripada 10KB;
2. Cuba elakkan bigkey
1 Apakah bigkey?
BigKey biasanya dinilai berdasarkan saiz Kunci dan nombor. daripada ahli dalam Kunci, contohnya : Jumlah data Key itu sendiri terlalu besar: Kunci jenis String, nilainya ialah 5 MB Ahli dalam Kunci Terlalu ramai: Kunci jenis ZSET, bilangan ahlinya ialah 10,000 Jumlah data ahli dalam Kunci terlalu besar: Hash; taip Key, bilangan ahlinya walaupun Terdapat hanya 1,000 tetapi jumlah saiz nilai ahli ini ialah 100 MB
- Kemudaratan BigKey
- Menyekat Rangkaian
Apabila melaksanakan permintaan baca pada BigKey, sejumlah kecil QPS boleh menyebabkan penggunaan lebar jalur menjadi penuh, menyebabkan Redis instance dan juga mesin fizikal di mana ia berada untuk memperlahankan; tika Redis di mana BigKey terletak jauh lebih tinggi daripada kejadian lain, dan sumber memori serpihan data tidak dapat dicapai
-
Menyekat Redis
<.>Operasi pada cincang, senarai, zset, dsb. dengan banyak elemen akan mengambil masa yang lama dan menyebabkan utas utama disekat; >Tekanan CPU
Siri data dan penyahserikan BigKey akan menyebabkan penggunaan CPU melonjak, menjejaskan kejadian Redis dan aplikasi tempatan yang lain; >3. Bagaimana untuk menemui BigKey
Menggunakan parameter --bigkeys yang disediakan oleh redis-cli, anda boleh melintasi dan menganalisis semua kunci, dan mengembalikan maklumat statistik keseluruhan Kunci dan kunci besar Top1 setiap data
Tulis program melalui imbasan
-
, gunakan imbasan untuk mengimbas semua kekunci dalam Redis dan gunakan strlen, hlen dan arahan lain untuk menentukan panjang kekunci (MEMORY PENGGUNAAN tidak disyorkan di sini) );
Gunakan alatan pihak ketiga
-
Gunakan alatan pihak ketiga seperti Redis-Rdb-Tools untuk menganalisis fail snapshot RDB untuk menganalisis penggunaan memori secara menyeluruh; alat untuk memantau rangkaian masuk dan keluar dari Redis Data akan memberi amaran secara proaktif apabila ia melebihi nilai amaran; pelajar yang menggunakan redis buat kali pertama mempunyai banyak senario perniagaan , semuanya dilakukan dengan struktur kunci/val yang mudah, tanpa memikirkan sama ada munasabah untuk berbuat demikian, atau sama ada ia akan menyebabkan masalah prestasi yang berkaitan pada masa hadapan. ;
Untuk masalah ini, dari segi asasnya, kita perlu memahami dan menguasai jenis data yang biasa digunakan atas dasar ini, kita boleh mereka bentuk data struktur storan untuk senario perniagaan yang berbeza; 🎜>Mari kita fikirkan cara untuk cache Bagaimana pula dengan data seperti senarai objek pengguna?
Pilihan 1: kunci ialah usrId, nilai ialah rentetan bersiri objek, struktur data adalah serupa dengan yang berikut; 🎜>- Kelebihan: Akses mudah, ringkas dan kasar, anda hanya perlu menukar json dan objek apabila mengakses;Kelemahan: Gandingan data, tidak cukup fleksibel, sebaik sahaja objek menambah medan Atau medan dipadamkan, dan kos pembinaan semula cache adalah sangat tinggi;
Kelebihan: penggunaan memori yang kecil dan operasi yang cekap;- Kelemahan: selepas mendapatkan val, semakan pangkalan data lanjut diperlukan untuk mendapatkan objek lengkap;
Pilihan 3: Gunakan struktur cincang untuk cache objek, data adalah seperti berikut; dan boleh mengakses mana-mana medan objek secara fleksibel ;
Kelemahan: Pengekodan yang agak kompleks;Pengesyoran untuk menggunakan cache Redis dalam aplikasi praktikal
[ Disyorkan] Panaskan cache. Sebelum mengakses data, cache perlu dipanaskan untuk mengelakkan sebilangan besar permintaan terus memasuki lapisan penyimpanan data data panas dan sejuk yang sesuai harus dibahagikan mengikut keadaan perniagaan, dan data panas harus dipanaskan. Seperti maklumat pelesenan, apikey, dsb.;
- [Disyorkan] Gunakan cache setempat bersama-sama. Dalam seni bina yang diedarkan, walaupun caching tempatan boleh meningkatkan kestabilan dan kelajuan akses data, ia perlu digunakan dengan berhati-hati untuk mengelak daripada memperkenalkan nod pelayan stateful. Elakkan cache tempatan daripada menduduki sumber pelayan aplikasi secara berlebihan, menyebabkan ranap nod aplikasi
[Disyorkan] Strategi perubahan cache, pangkalan data harus dikemas kini dahulu, dan kemudian cache; > [Cadangan] Satu panggilan perniagaan memerlukan akses kepada berbilang pelayan redis, dan saluran paip atau kaedah operasi kelompok lain boleh digunakan; , Hash, storan Kuantitinya banyak. Apabila mengambil sejumlah besar elemen, kelewatan yang besar akan berlaku, menyekat pelaksanaan arahan lain. Adalah disyorkan untuk membahagikannya kepada beberapa senarai kecil, set atau jadual cincang
Gunakan spesifikasi perniagaan
Sama ada redis atau perantaraan lain yang digunakan dalam pembangunan Apabila membangun dan menggunakan perisian, adalah yang terbaik untuk merumuskan satu set spesifikasi yang munasabah terlebih dahulu Spesifikasi ini harus diiktiraf oleh kebanyakan pembangun dan diuji dalam amalan, dan dengan berkesan boleh mengelakkan beberapa masalah Setelah ditetapkan sebagai spesifikasi, Ia harus menjadi peraturan harian untuk membimbing dalaman pembangun. Berikut ialah perkara berikut: Redis harus diletakkan sebagai data cache dan tidak boleh digunakan untuk menyimpan data berskala besar (tidak boleh menggantikan pangkalan data); >
Redis sesuai untuk senario yang lebih banyak membaca dan kurang menulis Jika terdapat senario pertanyaan berfrekuensi tinggi dan berfrekuensi rendah, ia tidak disyorkan
Apabila kunci tidak pasti Apabila tiba masa kelangsungan hidup, sebaiknya tetapkan masa tamat tempoh untuk mengawal kitaran hayat kunci;Anda harus mempertimbangkan pemisahan data panas dan sejuk Untuk pertanyaan, gunakan Redis untuk pertanyaan perniagaan frekuensi tinggi dan pertimbangkan untuk menggunakan pangkalan data untuk pertanyaan frekuensi rendah
Apabila program memproses data, Perlu dipertimbangkan bahawa Redis mempunyai risiko kehilangan data, jadi perlu untuk memuatkan secara automatik dan menyimpan data yang hilang dari pangkalan data ke Redis
Gunakan arahan O(N) dengan berhati-hati, seperti senarai, set, data cincang Semasa menjalankan operasi struktur, hgetall, lrange, smembers, zrange, dsb. tidak boleh digunakan Keutamaan diberikan kepada penggunaan hscan, sscan dan zscan .
Atas ialah kandungan terperinci Apakah kaedah yang digunakan dalam reka bentuk nilai kunci Redis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!