Rumah  >  Artikel  >  pangkalan data  >  Ringkasan 30 soalan lazim tentang Redis!

Ringkasan 30 soalan lazim tentang Redis!

藏色散人
藏色散人ke hadapan
2021-09-25 16:22:353507semak imbas

1. Bagaimanakah Redis melakukan pengoptimuman memori?

Gunakan jadual cincang (cincang) sebanyak mungkin jadual Cincang (bermaksud nombor yang disimpan dalam jadual cincang adalah kecil) menggunakan memori yang sangat kecil, jadi anda harus mengabstrak model data anda sebanyak mungkin. mungkin Di dalam jadual cincang.

Sebagai contoh, jika anda mempunyai objek pengguna dalam sistem web anda, jangan tetapkan kunci berasingan untuk nama pengguna, nama keluarga, e-mel dan kata laluan, sebaliknya, anda harus menyimpan semua maklumat pengguna dalam cincang meja .

2. Apakah kegunaan saluran paip di Redis?

Pelayan permintaan/tindak balas boleh mengendalikan permintaan baharu walaupun permintaan lama masih belum dibalas. Ini memungkinkan untuk menghantar berbilang arahan ke pelayan tanpa menunggu balasan, dan akhirnya membaca balasan dalam satu langkah.

Ini adalah paip, teknik yang telah digunakan secara meluas selama beberapa dekad. Sebagai contoh, banyak protokol POP3 telah melaksanakan sokongan untuk ciri ini, yang sangat mempercepatkan proses memuat turun e-mel baharu daripada pelayan.

3. Apakah hubungan antara Redis dan Redisson?

Redisson ialah klien Redis penyelarasan teragih lanjutan yang boleh membantu pengguna melaksanakan beberapa objek Java dengan mudah (penapis Bloom, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map) dalam persekitaran yang diedarkan , ConcurrentMap, List , ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog).

4. Apakah senario yang sesuai untuk Redis?

(1) Cache Sesi

Salah satu senario yang paling biasa digunakan untuk menggunakan Redis ialah cache sesi. Kelebihan menggunakan Redis untuk cache sesi berbanding storan lain (seperti Memcached) ialah Redis menyediakan ketekunan. Apabila mengekalkan cache yang tidak memerlukan konsistensi, kebanyakan orang akan tidak berpuas hati jika semua maklumat troli beli-belah pengguna hilang Sekarang, adakah mereka masih?

Nasib baik, kerana Redis telah bertambah baik selama ini, adalah mudah untuk mengetahui cara menggunakan Redis dengan betul untuk menyimpan dokumen sesi. Malah platform komersil yang terkenal Magento menyediakan pemalam Redis.

(2) Cache Halaman Penuh (FPC)

Selain token sesi asas, Redis juga menyediakan platform FPC yang sangat mudah. Kembali kepada isu konsistensi, walaupun contoh Redis dimulakan semula, kerana ketekunan cakera, pengguna tidak akan melihat penurunan dalam kelajuan memuatkan halaman Ini adalah peningkatan yang hebat, serupa dengan FPC tempatan PHP.

Mengambil Magento sebagai contoh sekali lagi, Magento menyediakan pemalam untuk menggunakan Redis sebagai hujung belakang cache halaman penuh.

Selain itu, untuk pengguna WordPress, Pantheon mempunyai pemalam wp-redis yang sangat baik, yang boleh membantu anda memuatkan halaman yang telah anda semak imbas secepat mungkin.

(3) Queue

Salah satu kelebihan hebat Redis dalam bidang enjin storan memori ialah ia menyediakan operasi senarai dan set, yang membolehkan Redis digunakan sebagai baris gilir mesej yang baik platform. Operasi yang digunakan oleh Redis sebagai baris gilir adalah serupa dengan operasi tolak/pop senarai dalam bahasa pengaturcaraan tempatan (seperti Python).

Jika anda mencari "Baris gilir Redis" dengan cepat di Google, anda akan segera menemui sejumlah besar projek sumber terbuka Tujuan projek ini adalah untuk menggunakan Redis untuk mencipta alatan bahagian belakang yang sangat baik untuk memenuhi pelbagai baris gilir keperluan. Sebagai contoh, Celery mempunyai bahagian belakang yang menggunakan Redis sebagai broker Anda boleh melihatnya dari sini.

(4) Senarai kedudukan/kaunter

Redis melaksanakan operasi penambahan atau pengurangan nombor dalam ingatan dengan sangat baik. Set dan Set Isih juga menjadikannya sangat mudah untuk kami melaksanakan operasi ini Redis hanya menyediakan dua struktur data ini.

Jadi, kami ingin mendapatkan 10 pengguna teratas daripada set yang diisih – mari panggil mereka "user_scores", dan kami hanya perlu melakukannya seperti ini: Sudah tentu, ini mengandaikan anda Susun dalam tertib menaik berdasarkan markah pengguna anda. Jika anda ingin mengembalikan skor pengguna dan pengguna, anda perlu melaksanakannya seperti ini:

ZRANGE user_scores 0 10 WITHSCORES

Agora Games ialah contoh yang baik, dilaksanakan dalam Ruby, dengan senarai kedudukan Ia menggunakan Redis untuk menyimpan data, anda boleh melihatnya di sini.

(5) Terbit/Langgan

Terakhir (tetapi pastinya paling tidak) ialah fungsi terbitkan/langgan Redis. Memang banyak use case untuk publish/subscribe. Saya telah melihat orang menggunakannya dalam sambungan rangkaian sosial, sebagai pencetus untuk skrip berasaskan penerbitan/langganan, dan juga untuk membina sistem sembang menggunakan fungsi terbitan/langganan Redis!

5 Terdapat 20 juta data dalam MySQL, tetapi hanya 20 juta data disimpan dalam redis. Bagaimana untuk memastikan bahawa data dalam redis adalah data panas?

Apabila saiz set data memori redis meningkat kepada saiz tertentu, strategi penyingkiran data akan dilaksanakan.

Malah, selain memeriksa Redis semasa temu duga, banyak syarikat sangat mementingkan teknologi berkesesuaian tinggi dan ketersediaan tinggi, terutamanya syarikat Internet barisan pertama, yang diedarkan,

JVM, musim bunga analisis kod sumber, perkhidmatan mikro dan pengetahuan lain Point sudah menjadi soalan mesti dijawab dalam temu bual.

6. Dalam keadaan apakah penyelesaian kluster Redis menyebabkan keseluruhan kluster tidak tersedia?

Dalam kluster dengan tiga nod A, B dan C, tanpa model replikasi, jika nod B gagal, keseluruhan kluster akan berfikir bahawa ia tidak mempunyai slot dalam julat 5501-11000 dan menjadi tidak tersedia.

7. Apakah yang perlu dilakukan dengan penyelesaian kelompok Redis? Apakah rancangannya?

codis

Penyelesaian kelompok yang paling biasa digunakan pada masa ini, ia pada asasnya mempunyai kesan yang sama seperti twemproxy, tetapi ia menyokong pemulihan data nod lama kepada nod cincang baharu apabila nombor nod berubah.

kelompok redis

3.0 didatangkan dengan gugusan Ciri-cirinya ialah algoritma yang diedarkannya bukan pencincangan yang konsisten, tetapi konsep slot cincang, dan ia menyokong nod hamba tetapan nod. Lihat dokumentasi rasmi untuk butiran. Dilaksanakan pada lapisan kod perniagaan, beberapa contoh redis yang tidak berkaitan dibuat Pada lapisan kod, pengiraan cincang dilakukan pada kunci, dan kemudian contoh redis yang sepadan digunakan untuk mengendalikan data. Kaedah ini mempunyai keperluan yang agak tinggi untuk kod lapisan cincang Pertimbangan termasuk penyelesaian algoritma alternatif selepas kegagalan nod, pemulihan skrip automatik selepas kejutan data, pemantauan contoh, dsb.

8. Apakah pengekodan dalaman Redis String?

int, embstr, mentah

Integer di bawah 10000 akan menggunakan pemalar int dalam cache.

Panjang kurang daripada atau sama dengan 44 bait: pengekodan embstr

Panjang lebih daripada 44 bait: pengekodan mentah

9. Cara menggunakan Redis sebagai baris gilir kelewatan ?

boleh dilaksanakan menggunakan Zset. Ahli ialah perihalan tugasan, skor ialah masa pelaksanaan, dan kemudian gunakan pemasa untuk mengimbas secara kerap Sebaik sahaja terdapat tugasan yang masa pelaksanaannya kurang daripada atau sama dengan masa semasa, ia akan dilaksanakan serta-merta.

10. Bagaimanakah Redis mengesan nod tertentu apabila mencari kunci dalam kelompok?

Gunakan algoritma crc16 untuk mencincang kunci, ambil nilai cincang modulo 16384, dan dapatkan slot khusus berdasarkan maklumat pemetaan nod dan slot (selepas mewujudkan sambungan dengan kelompok, pelanggan boleh mendapatkan maklumat Pemetaan slot), cari alamat nod tertentu dan pergi ke nod khusus untuk mencari kunci Jika kunci tidak ada pada nod ini, kluster redis akan mengembalikan arahan yang dialihkan dan menambah alamat nod baharu klien. Pada masa yang sama, klien akan menyegarkan semula perhubungan pemetaan bit Jika slot sedang dipindahkan, gugusan redis akan mengembalikan perintah bertanya kepada klien. Ini adalah pembetulan sementara hubungan pemetaan slot nod tempatan

11.Redis Pernahkah anda memahami kegigihan?

Kegigihan Redis mempunyai dua kaedah: RDB dan AOF.

RDB: Simpan petikan pangkalan data ke cakera dalam bentuk binari.

AOF: Rekod semua arahan dan parameter yang ditulis ke pangkalan data ke fail AOF dalam bentuk teks protokol, dengan itu merekodkan status pangkalan data.

12. Dalam keadaan apakah Redis akan mencetuskan kitar semula kunci?

Dua situasi: 1. Pembersihan biasa (persampelan); 2. Apabila melaksanakan arahan, tentukan sama ada memori melebihi maksimum memori.

13. Apakah strategi penyingkiran untuk kunci Redis?

8 jenis: noeviction, volatile-lru, volatile-lfu, volatile-ttl, volatile-random, allkeylru, allkeys-lfu, allkeys-random

14. Adakah anda memahami mekanisme transaksi Redis?

Konsep transaksi Redis:

Intipati transaksi Redis ialah satu set arahan. Urus niaga menyokong pelaksanaan berbilang arahan pada satu masa, dan semua arahan dalam urus niaga akan bersiri. Semasa proses pelaksanaan transaksi, arahan dalam baris gilir akan dilaksanakan secara bersiri mengikut tertib, dan permintaan arahan yang dikemukakan oleh pelanggan lain tidak akan dimasukkan ke dalam urutan perintah pelaksanaan transaksi.

Transaksi Redis ialah pelaksanaan satu kali, berurutan dan eksklusif bagi siri perintah dalam baris gilir.

Transaksi Redis tidak mempunyai konsep tahap pengasingan:

Operasi kelompok dimasukkan ke dalam cache baris gilir sebelum menghantar arahan EXEC dan tidak akan benar-benar dilaksanakan, jadi tiada pertanyaan dalam transaksi kepada lihat. Kemas kini dalam transaksi tidak dapat dilihat oleh pertanyaan di luar transaksi.

Redis tidak menjamin atomicity:

Dalam Redis, satu perintah dilaksanakan secara atom, tetapi transaksi tidak menjamin atomicity dan tiada rollback. Jika mana-mana arahan dalam urus niaga gagal dilaksanakan, perintah yang selebihnya masih akan dilaksanakan.

Tiga peringkat transaksi Redis:

Mulakan urus niaga

Baris gilir perintah

Laksanakan transaksi

Arahan berkaitan transaksi Redis:

watch key1 key2 ...: Pantau satu atau lebih kunci Jika kunci yang dipantau ditukar oleh arahan lain sebelum urus niaga dilaksanakan, transaksi akan terganggu (serupa dengan penguncian optimistik)

berbilang: menandakan permulaan blok urus niaga (berbaris gilir)

eksekusi: melaksanakan arahan semua blok urus niaga (sebaik sahaja pelaksana dilaksanakan, kunci pemantauan yang ditambahkan sebelum ini akan dibatalkan)

buang: batalkan Transaksi , tinggalkan semua arahan dalam blok transaksi

nyah tonton: Batalkan pemantauan jam tangan terhadap semua kekunci

15. Bagaimana cara menggunakan Redis untuk mengira UV tapak web?

UV berbeza dengan PV, UV perlu dinyahduplikasi. Secara umumnya terdapat dua penyelesaian:

1 Gunakan BitMap. Apa yang disimpan ialah uid pengguna Apabila mengira UV, hanya lakukan kiraan bit.

2. Gunakan penapis Bloom. Masukkan uid pengguna setiap lawatan ke dalam penapis mekar. Kelebihannya ialah ia menjimatkan memori, tetapi kelemahannya ialah UV yang tepat tidak boleh diperolehi. Tetapi ia adalah pilihan yang baik untuk adegan yang tidak perlu mengetahui UV tertentu dengan tepat, tetapi hanya memerlukan susunan magnitud yang kasar.

16. Bagaimana untuk berurusan dengan kunci besar dalam Redis?

Kunci besar merujuk kepada kunci dengan nilai yang sangat besar. Contohnya, rentetan yang sangat panjang, atau set besar, dsb. Kekunci besar akan menyebabkan dua masalah:

1 Data condong, contohnya, penggunaan memori bagi sesetengah nod adalah terlalu tinggi.

2. Apabila kunci besar dipadamkan atau kunci besar tamat tempoh secara automatik, ia akan menyebabkan penurunan mendadak dalam QPS kerana Redis adalah satu benang.

Penyelesaian: Kunci besar boleh dipecahkan, contohnya, set besar boleh dibahagikan kepada beberapa set kecil.

17. Bagaimana untuk menangani kekunci panas dalam Redis?

1. Contohnya: tambahkan akhiran yang berbeza pada kunci, cache berbilang kunci, supaya setiap kunci diedarkan kepada nod yang berbeza.

2. Gunakan caching berbilang peringkat.

18 Cache tidak sah? Penembusan cache? Cache avalanche? Cache concurrency?

Ketaksahihan cache Ketaksahihan cache bermakna sejumlah besar cache gagal pada masa yang sama, dan tekanan serta-merta pada DB melonjak. Sebab untuk fenomena ini ialah masa tamat tempoh kunci ditetapkan kepada nilai yang sama. Penyelesaiannya adalah dengan memasukkan faktor rawak ke dalam masa tamat tempoh kunci, seperti 5 minit dan saat rawak.

Penembusan cache Penembusan cache merujuk kepada pertanyaan sekeping data yang tiada dalam pangkalan data mahupun dalam cache Pangkalan data akan sentiasa ditanya, dan tekanan akses pada pangkalan data akan meningkat adalah seperti berikut Jenis 2: Cache objek kosong: Penyelenggaraan kod lebih mudah, tetapi kesannya tidak baik. Penapis Bloom: penyelenggaraan kod yang kompleks, tetapi sangat berkesan.

Cache avalanche Cache avalanche merujuk kepada tamat tempoh terpusat cache dalam tempoh masa tertentu. Pada masa ini, banyak permintaan terus memintas cache dan terus meminta pangkalan data. Terdapat dua sebab untuk runtuhan cache: reids downtime. Kebanyakan data tidak sah.

Terdapat dua penyelesaian untuk cache avalanche:

Bina kluster ketersediaan tinggi untuk menghalang redis satu mesin daripada masa henti.

Tetapkan masa tamat tempoh yang berbeza untuk mengelakkan sejumlah besar kunci daripada terbatal dalam tempoh perjanjian.

Cache concurrency Kadangkala jika tapak web mempunyai akses serentak yang tinggi, jika cache gagal, berbilang proses boleh menanyakan DB pada masa yang sama dan menyediakan cache pada masa yang sama Jika concurrency benar-benar besar, ini juga boleh menyebabkan tekanan yang berlebihan pada DB , dan terdapat juga masalah kemas kini cache yang kerap. Penyelesaian umum ialah mengunci apabila menyemak DB Jika KEY tidak wujud, kuncinya, kemudian semak DB dan masukkan ke dalam cache, dan kemudian buka kuncinya jika proses lain mendapati terdapat kunci, tunggu, dan kemudian tunggu sehingga ia dibuka kunci sebelum menyemak cache atau memasuki DB.

19. Bagaimana untuk memilih pangkalan data untuk kelompok Redis?

Kluster Redis pada masa ini tidak boleh memilih pangkalan data dan lalai kepada pangkalan data 0.

20. Bagaimana untuk menetapkan kata laluan dan mengesahkan kata laluan dalam Redis?

Tetapkan kata laluan: set konfigurasi requirepass 123456

Kata laluan kebenaran: auth 123456

21. Mengapakah Redis perlu meletakkan semua data dalam memori?

Untuk mencapai kelajuan membaca dan menulis terpantas, Redis membaca data ke dalam memori dan menulis data ke cakera secara tidak segerak.

Jadi redis mempunyai ciri-ciri kelajuan pantas dan ketekalan data Jika data tidak diletakkan dalam memori, kelajuan I/O cakera akan menjejaskan prestasi redis dengan serius.

Apabila memori menjadi lebih murah dan lebih murah hari ini, redis akan menjadi semakin popular Jika penggunaan memori maksimum ditetapkan, nilai baharu tidak boleh dimasukkan selepas bilangan rekod data sedia ada mencapai had memori.

22.Mengapa Redis tidak menyediakan versi Windows secara rasmi?

Oleh kerana versi Linux semasa agak stabil dan mempunyai bilangan pengguna yang ramai, tidak perlu membangunkan versi windows, yang akan menyebabkan keserasian dan masalah lain.

23 Adakah Redis benang tunggal atau berbilang benang?

Redis6.0 menggunakan IO berbilang benang, tetapi pelaksanaan arahan masih berbenang tunggal.

Sebelum Redis 6.0, utas IO dan utas pelaksanaan kedua-duanya adalah utas tunggal.

24. Mengapa Redis begitu pantas?

1. Operasi memori;

2 .

25. Apakah kapasiti maksimum yang boleh disimpan oleh nilai jenis rentetan?

512J

26.

Pelayan Kamus Jauh.

27. Apakah sumber fizikal yang digunakan terutamanya oleh Redis?

Memori.

28. Apakah struktur data yang ada pada Redis?

Redis mempunyai 5 struktur data asas, iaitu: rentetan (rentetan), senarai (senarai), cincang (kamus), set (set) dan zset (set tersusun).

5 jenis ini adalah bahagian paling asas dan penting dalam pengetahuan berkaitan Redis.

29. Apakah kelebihan Redis berbanding memcached?

(1) Semua nilai dalam memcached adalah rentetan mudah, dan redis, sebagai penggantinya, menyokong jenis data yang lebih kaya

(2) redis lebih cepat daripada memcached Jauh lebih cepat

(3) redis boleh mengekalkan datanya

30. Terangkan secara ringkas kelebihan dan kekurangannya?

Redis pada asasnya ialah pangkalan data dalam memori jenis Nilai Kunci, sama seperti memcached Keseluruhan pangkalan data dimuatkan dan dikendalikan dalam memori, dan data pangkalan data disalurkan ke cakera keras melalui operasi tak segerak. secara berkala untuk penyimpanan.

Oleh kerana ia adalah operasi memori tulen, Redis mempunyai prestasi cemerlang dan boleh mengendalikan lebih daripada 100,000 operasi baca dan tulis sesaat Ia adalah DB Nilai-Kekunci terpantas dengan prestasi yang diketahui.

Kecemerlangan Redis bukan sahaja prestasinya. Daya tarikan terbesar Redis ialah ia menyokong penjimatan pelbagai struktur data Selain itu, had maksimum satu nilai adalah 1GB, yang hanya boleh menjimatkan 1MB daripada data, Redis boleh digunakan untuk mencapai Banyak ciri berguna.

Contohnya, gunakan Senarainya untuk membuat senarai terpaut dua kali FIFO untuk melaksanakan perkhidmatan baris gilir mesej berprestasi tinggi yang ringan dan gunakan Setnya untuk membuat sistem teg berprestasi tinggi, dsb.

Selain itu, Redis juga boleh menetapkan masa tamat untuk Nilai-Kekunci yang disimpan, jadi ia juga boleh digunakan sebagai versi memcached yang dipertingkatkan. Kelemahan utama Redis ialah kapasiti pangkalan data dihadkan oleh memori fizikal dan tidak boleh digunakan untuk membaca dan menulis data besar-besaran berprestasi tinggi Oleh itu, senario yang sesuai untuk Redis terutamanya terhad kepada operasi berprestasi tinggi dan pengiraan jumlah yang lebih kecil. daripada data.

Pembelajaran yang disyorkan: "tutorial video redis"

Atas ialah kandungan terperinci Ringkasan 30 soalan lazim tentang Redis!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:码农有道. Jika ada pelanggaran, sila hubungi admin@php.cn Padam