Rumah pangkalan data Redis Cara menggunakan Redis untuk fungsi caching inventori berjadual

Cara menggunakan Redis untuk fungsi caching inventori berjadual

May 28, 2023 am 10:12 AM
redis

1. Latar belakang perniagaan

Saya memutuskan untuk membandingkan soalan ini dengan soalan pada kertas peperiksaan untuk mengelak daripada memperkenalkan latar belakang projek syarikat kami. Mengenai butiran perniagaan, anda tidak perlu memberi perhatian kepadanya ~ lihat sahaja tajuk:

Katakan anda adalah pengumpul terbaik di negara tertentu, dan anda mempunyai pelbagai khazanah yang bernilai berturut-turut. di tangan anda. Suatu hari anda mungkin merasakan koleksi anda semakin membosankan dan memutuskan untuk menjual barangan berharga ini secara tunai.

Tetapi adalah terlalu rendah untuk menjual khazanah berharga ini di pasaran sayur-sayuran. Dalam era "Internet +", sudah tentu kita perlu menggunakan beberapa kaedah jualan yang berbeza: terdapat bangunan 300 bilik (bernombor 001 hingga 300) dalam nama anda, dan terdapat peti keselamatan berkunci kata laluan di setiap bilik (dari 1 Disember hingga 31 Disember), anda akan memilih 300 daripada "khazanah teratas" terbaik (juga dipanggil khazanah Kelas A) dan meletakkannya di dalam peti besi 300 bilik ini . Sesiapa yang ingin membeli harta karun mesti membuat tempahan dalam talian sekurang-kurangnya sehari lebih awal, dan kemudian menggunakan kod tempahan untuk membuka peti besi dan mengambil barang. Harta karun yang tidak disimpan akan diambil semula oleh anda dan tidak akan dijual lagi.

Untuk membina sistem tempahan dalam talian sedemikian, antara muka bahagian hadapannya mungkin kelihatan seperti ini:

Cara menggunakan Redis untuk fungsi caching inventori berjadual

Klik pada tiga kawalan untuk diisi dalam gambar di atas Kotak pilihan akan muncul. Masalahnya sekarang ialah hanya ada satu harta di dalam bilik dan ia tidak boleh ditempah dua kali. Selepas pembeli memilih jenis harta karun dan nombor bilik, adalah disyorkan untuk memberikan beberapa maklumat segera dalam kotak pemilihan tarikh apabila mereka memilih tarikh tempahan. Sebagai contoh, bilik No. 051 telah ditempah pada 3 Disember, dan kini pengguna lain telah memilih bilik No. 051. Kemudian apabila kotak pemilihan tarikh muncul, 3 Disember mesti ditetapkan sebagai tidak boleh dipilih. Seperti yang ditunjukkan di bawah (3hb Disember dipaparkan sebagai "hilang"):

Cara menggunakan Redis untuk fungsi caching inventori berjadual

Jadi, bagaimanakah sistem inventori mudah seperti ini boleh disimpan dalam redis?

2. Penyelesaian pengurusan inventori (Redis)

Idea awal kami ialah inventori kami boleh dilihat sebagai tatasusunan tiga dimensi yang besar, di mana dimensi pertama mewakili jenis harta, dan yang kedua Dimensi pertama mewakili nombor bilik, dan dimensi ketiga mewakili tarikh tempahan. Redis menyediakan lima jenis storan: String, Hash, Senarai, Set dan Set Isih. Kami boleh menggunakan jenis Hash untuk menyimpan data dalam senario semasa kerana ia boleh memenuhi keperluan kami, dan jenis Set juga merupakan pilihan yang boleh dilaksanakan.

Kunci Redis ditetapkan kepada jenis harta + nombor bilik (contohnya, A:205, A mewakili harta terbaik, 205 ialah nombor bilik), nilai Redis ialah jenis cincang dan kunci cincang ialah tarikh (contohnya, 2016-12- 05), nilai cincang adalah benar atau salah, menunjukkan bahawa ia telah ditempah atau tidak. Diwakili dalam rajah sebagai:

Cara menggunakan Redis untuk fungsi caching inventori berjadual

Jika Bilik 158, Harta Kelas A, telah ditempah pada 8 Disember, ia akan disimpan sebagai

1

2

3

Redis Key —— A:158

 

Redis Value —— hash table ['2016-12-08' => 1]

123
Redis Key —&mdash ; A: 158 Nilai Semula —— <code> => 1

3. Senario Lanjutan & Penyelesaian Pengurusan Inventori

Pelancaran khazanah teratas Kelas A telah dialu-alukan, dan sejumlah besar pesanan telah dibuat tidak lama selepas pelancarannya. Ramai orang kelas pertengahan berminat untuk mengumpul, tetapi harga yang tinggi sering melambatkan mereka. Jadi, anda memilih khazanah Kategori B daripada koleksi anda Ia lebih rendah sedikit daripada khazanah Kategori A, tetapi harganya lebih berpatutan, dan ia juga dipanggil "harta karun yang sangat baik".

Memandangkan terdapat lebih banyak harta dalam jenis B daripada jenis A, anda bercadang untuk menukar cara bermain Dalam 300 bilik ini, letakkan peti besi di setiap bilik harta karun ke dalam setiap 300 kotak bilik. Selepas pembeli membuat tempahan, dia akan mengambil harta karun mengikut waktu yang dijadualkan. Untuk khazanah Kategori B, sistem tempahan anda akan mempunyai pilihan tambahan, iaitu masa pengambilan. Seperti yang ditunjukkan di bawah:

Cara menggunakan Redis untuk fungsi caching inventori berjadual

Sekarang terdapat syarat tambahan yang telah ditetapkan (masa pengambilan), apabila melakukan penyimpanan inventori, fikirkannya secara kasar sebenarnya tatasusunan empat dimensi. Ayat ini boleh ditulis semula sebagai: Maklumat empat dimensi termasuk jenis harta karun, nombor bilik, tarikh tempahan dan masa pengambilan. Bagaimana untuk menyimpan harta jenis ini di Redis?

Malah, jika anda memikirkannya dengan teliti, apabila menyimpan khazanah kelas A yang berkualiti tinggi, storan kami dalam Redis adalah satu pembaziran dimensi

Malah, hanya satu storan hashValue digunakan pada masa itu Status yang telah ditetapkan tercapai, menyebabkan maklumat dalam dimensi ini menjadi sia-sia. Memandangkan masa pengambilan semuanya mengikut jam iaitu 0 hingga 1, 1 hingga 2,..., 23 hingga 24, sebanyak 24 situasi sepanjang hari, jadi kita boleh menggunakan integer binari sepenuhnya untuk mewakili masa item simpanan. Contohnya, 1 bermakna 0 hingga 1 mata, 2 bermakna 1 hingga 2 mata, 4 bermakna 2 hingga 3 mata,...,

23 hingga 24 mata boleh diwakili oleh 2 hingga kuasa ke-23 (8388608) . Untuk menempah beberapa tempoh masa, anda hanya perlu melakukan operasi OR logik pada nilai.

Dengan cara ini, struktur Redis kami menjadi seperti ini:

Cara menggunakan Redis untuk fungsi caching inventori berjadual

Contohnya, Bilik 103 harta karun Kelas B, pagi 5 dan 6 Disember Ditempah dari 8:00 hingga 12:00, disimpan dalam redis sebagai

1

2

3

Redis Key  —— B:103

 

Redis Value —— hash table ['2016-12-05' => 3840, '2016-12-06' => 3840]

12 3
Kunci Redis —— B:103 Nilai Redis —&mdash ; jadual cincang ['2016-12-05' => >=> 3840]

Untuk khazanah Kelas B, apabila membuat tempahan baharu, anda perlu mengeluarkan nilai cincang asal terlebih dahulu, melakukan operasi ATAU logik dengan masa pengambilan yang dijadualkan baharu, dan kemudian tulis hasilnya semula kepada Redis, bukannya melakukan perkara yang sama perkara seperti khazanah Kelas A, hSet dipanggil terus untuk menetapkan nilai cincangan apabila membatalkan tempahan, berhati-hati untuk mengeluarkan nilai cincang asal dahulu, tolak tempoh masa untuk dibatalkan daripada nilai cincang (XOR + logik DAN operasi; ), dan kemudian semula- Baki masa pengambilan yang ditempah ditulis kembali kepada Redis, dan hDel tidak boleh dipanggil terus untuk memadam.

4. Pelan Pengurusan Lanjutan & Inventori

Sejak pelancaran khazanah Kelas B, perniagaan anda telah menjadi lebih popular berbanding sebelum ini. Jadi permintaan baru datang lagi Sekarang terdapat sejumlah besar pelancong, pelajar dan orang lain tanpa simpanan yang besar yang sangat berminat dengan khazanah anda. Walaupun harga khazanah jenis B lebih rendah sedikit daripada jenis A, ia masih agak mahal untuk mereka ini. Jadi, anda memutuskan untuk menjual khazanah anda yang paling berpatutan (khazanah Kategori C).

Di antara 300 bilik ini, khazanah Jenis C menyimpan jumlah terbesar, jadi anda menambah 100 peti harta karun khusus untuk menyimpan khazanah Jenis C di setiap bilik. 100 kotak harta karun ini bernombor No 1, No 2,..., No 100. Begitu juga, setiap jam dalam sehari, anda akan meletakkan khazanah jenis C ke dalam 100 kotak harta karun dalam setiap 300 bilik ini (yang bermaksud bahawa keseluruhan bangunan akan mengemas kini 30,000 khazanah jenis C setiap jam). Jika tiada sesiapa yang membuat tempahan, harta itu akan diganti pada jam berikutnya. Akhirnya, keperluan setiap orang dapat dipenuhi.

Untuk khazanah jenis C, antara muka tempahan anda akan kelihatan seperti ini:

Cara menggunakan Redis untuk fungsi caching inventori berjadual

Kami telah menambah satu lagi syarat tempahan. Pada masa ini, kita berhadapan dengan masalah penyimpanan inventori. Seperti biasa, inventori ini sebenarnya adalah tatasusunan lima dimensi yang besar. Jenis harta karun, nombor bilik, tarikh tempahan, masa pengambilan dan nombor kotak harta karun masing-masing menduduki satu dimensi. Kami telah menggunakan semua kapasiti Redis sebelum ini. Apakah yang perlu kami lakukan sekarang untuk menyimpan data?

Kali ini storan inventori Redis mesti digabungkan dengan ciri perniagaan. Pertama sekali, dua dimensi nombor peti harta karun dan masa pengambilan tidak mempunyai julat nilai yang terlalu banyak. Hanya terdapat 100 nombor peti harta karun sahaja kepada tatasusunan dengan panjang 100, dan setiap kedudukan tatasusunan mengandungi INT Masa pengambilan yang ditunjukkan oleh jenis sudah mencukupi. Walau bagaimanapun, nilai cincang hanya boleh menjadi rentetan... Jadi, kita perlu melakukan operasi bersiri tatasusunan, dan kemudian menyahsirikannya semula apabila membaca. Nasib baik, panjangnya hanya 100, jadi kecekapan bersiri tidak akan menjadi hambatan sistem.

Kaedah penyimpanan ialah: pada 23 dan 24 Disember, antara khazanah jenis C di Bilik 258, peti harta karun bernombor 97 dan 99 telah ditempah antara 11 pagi dan 1 petang

1

2

3

Redis Key —— C:258

 

Redis Value —— hash table ['2016-12-23' => '[97 => 6144, 99 => 6144]''2016-12-24' => '[97 => 6144, 99 => 6144]' ]

123 Redis Key &mdash ;— C:258 Nilai Semula —— kod> <kod>=> </kod><kod>'[97 => 24'</kod> => '[97 => 6144, 99 => 6144]' ]

Antaranya, 6144 dinyatakan dalam binari sebagai "110000000000", dan nilai cincang ialah rentetan selepas siri tatasusunan Format json boleh digunakan dalam projek sebenar. Okay, kini Redis mempunyai storan untuk tiga jenis khazanah.

Cara menggunakan Redis untuk fungsi caching inventori berjadual

Untuk khazanah Kategori C, apabila pengguna membatalkan tempahan atau menambah tempahan baharu, anda juga tidak boleh memanggil hSet dan hDel untuk menulis ganti tetapan dan memadam situasi yang telah dikhaskan mesti dikeluarkan , dan lakukan operasi bitwise dengan masa pengambilan yang dijadualkan.

5. Pengoptimuman Storan

Secara teori, inventori ialah tatasusunan berbilang dimensi Tugas utama yang kami lakukan ialah cara menyimpan setiap dimensi secara munasabah dan memudahkan untuk menambah, memadam dan membuat pertanyaan. beroperasi. Dari perspektif penjimatan ingatan, apabila tiada siapa yang membuat tempahan pada mulanya, Redis boleh menjadi kosong sepenuhnya Untuk khazanah Kelas A, nilai cincang adalah sama dengan palsu dan tiada kunci redis atau kunci cincang yang sepadan sama sekali, dsb. Berkesan.

Selain itu, menggabungkan jenis harta karun dan nombor bilik untuk membuat kunci redis akan menghasilkan bilangan kunci yang lebih besar yang berkaitan dengan inventori harta dalam redis Untuk memudahkan pengurusan bersatu kunci ini, kami boleh tambah satu lagi cache redis Ia digunakan khas untuk menyimpan semua nilai kunci redis yang berkaitan dengan inventori harta, seperti yang ditunjukkan dalam rajah di bawah. Perlu diingatkan bahawa dalam kes ini, menggunakan jenis data yang ditetapkan boleh memenuhi keperluan, bukannya menggunakan jenis data hash, kerana kerumitan penambahan, pemadaman, pengubahsuaian dan pertanyaan jenis data yang ditetapkan ialah O(1). Ia menyimpan semua nilai kunci inventori yang sudah wujud dalam redis.

Cara menggunakan Redis untuk fungsi caching inventori berjadual

Satu kelebihan melakukan ini ialah jika kami menghadapi beberapa keadaan istimewa suatu hari nanti dan perlu mengosongkan semua cache berkaitan inventori, kami boleh mengalih keluar semua kunci Inventori dan memadamkannya dengan mudah . Manfaat lain ialah ia memberikan kita idea untuk pengembangan berterusan... Bayangkan situasi paling rumit sekarang ialah khazanah jenis C, dengan jumlah 5 dimensi. Katakan pada masa hadapan, anda tidak lagi menggunakan 300 bilik dalam satu bangunan untuk menjual khazanah, tetapi berbilang bangunan, maka pengguna perlu menambah dimensi lain apabila membuat pesanan - nombor bangunan. Apabila menghadapi situasi ini, kami boleh mengurangkan sepenuhnya set Kunci inventori tambahan untuk membina nombor untuk digunakan, memastikan kebolehskalaan dalam situasi yang lebih kompleks yang mungkin timbul.

Selepas pengembangan ini, setiap kali anda menambah rekod tempahan baharu, anda perlu menyemak sama ada nilai kunci redis yang sepadan sudah wujud dalam set kunci inventori Jika ia tidak wujud, anda perlu menambah kunci redis nilai kepada set tengah inventori. Operasi pemadaman adalah serupa.

Atas ialah kandungan terperinci Cara menggunakan Redis untuk fungsi caching inventori berjadual. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Membina Mod Kluster Redis Cara Membina Mod Kluster Redis Apr 10, 2025 pm 10:15 PM

Mod Redis cluster menyebarkan contoh Redis ke pelbagai pelayan melalui sharding, meningkatkan skalabilitas dan ketersediaan. Langkah -langkah pembinaan adalah seperti berikut: Buat contoh Redis ganjil dengan pelabuhan yang berbeza; Buat 3 contoh sentinel, memantau contoh redis dan failover; Konfigurasi fail konfigurasi sentinel, tambahkan pemantauan maklumat contoh dan tetapan failover; Konfigurasi fail konfigurasi contoh Redis, aktifkan mod kluster dan tentukan laluan fail maklumat kluster; Buat fail nodes.conf, yang mengandungi maklumat setiap contoh Redis; Mulakan kluster, laksanakan perintah Buat untuk membuat kluster dan tentukan bilangan replika; Log masuk ke kluster untuk melaksanakan perintah maklumat kluster untuk mengesahkan status kluster; buat

Cara membersihkan data redis Cara membersihkan data redis Apr 10, 2025 pm 10:06 PM

Cara Mengosongkan Data Redis: Gunakan perintah Flushall untuk membersihkan semua nilai utama. Gunakan perintah flushdb untuk membersihkan nilai utama pangkalan data yang dipilih sekarang. Gunakan Pilih untuk menukar pangkalan data, dan kemudian gunakan FlushDB untuk membersihkan pelbagai pangkalan data. Gunakan perintah DEL untuk memadam kunci tertentu. Gunakan alat REDIS-CLI untuk membersihkan data.

Cara Membaca Gilir Redis Cara Membaca Gilir Redis Apr 10, 2025 pm 10:12 PM

Untuk membaca giliran dari Redis, anda perlu mendapatkan nama giliran, membaca unsur -unsur menggunakan arahan LPOP, dan memproses barisan kosong. Langkah-langkah khusus adalah seperti berikut: Dapatkan nama giliran: Namakannya dengan awalan "giliran:" seperti "giliran: my-queue". Gunakan arahan LPOP: Keluarkan elemen dari kepala barisan dan kembalikan nilainya, seperti LPOP Queue: My-Queue. Memproses Baris kosong: Jika barisan kosong, LPOP mengembalikan nihil, dan anda boleh menyemak sama ada barisan wujud sebelum membaca elemen.

Cara menggunakan perintah redis Cara menggunakan perintah redis Apr 10, 2025 pm 08:45 PM

Menggunakan Arahan Redis memerlukan langkah -langkah berikut: Buka klien Redis. Masukkan arahan (nilai kunci kata kerja). Menyediakan parameter yang diperlukan (berbeza dari arahan ke arahan). Tekan Enter untuk melaksanakan arahan. Redis mengembalikan tindak balas yang menunjukkan hasil operasi (biasanya OK atau -r).

Cara menggunakan kunci redis Cara menggunakan kunci redis Apr 10, 2025 pm 08:39 PM

Menggunakan REDIS untuk mengunci operasi memerlukan mendapatkan kunci melalui arahan SETNX, dan kemudian menggunakan perintah luput untuk menetapkan masa tamat tempoh. Langkah-langkah khusus adalah: (1) Gunakan arahan SETNX untuk cuba menetapkan pasangan nilai utama; (2) Gunakan perintah luput untuk menetapkan masa tamat tempoh untuk kunci; (3) Gunakan perintah DEL untuk memadam kunci apabila kunci tidak lagi diperlukan.

Cara membaca kod sumber redis Cara membaca kod sumber redis Apr 10, 2025 pm 08:27 PM

Cara terbaik untuk memahami kod sumber REDIS adalah dengan langkah demi langkah: Dapatkan akrab dengan asas -asas Redis. Pilih modul atau fungsi tertentu sebagai titik permulaan. Mulakan dengan titik masuk modul atau fungsi dan lihat baris kod mengikut baris. Lihat kod melalui rantaian panggilan fungsi. Berhati -hati dengan struktur data asas yang digunakan oleh REDIS. Kenal pasti algoritma yang digunakan oleh Redis.

Cara Mengkonfigurasi Masa Pelaksanaan Skrip Lua di Centos Redis Cara Mengkonfigurasi Masa Pelaksanaan Skrip Lua di Centos Redis Apr 14, 2025 pm 02:12 PM

Pada sistem CentOS, anda boleh mengehadkan masa pelaksanaan skrip LUA dengan mengubah fail konfigurasi REDIS atau menggunakan arahan REDIS untuk mengelakkan skrip jahat daripada memakan terlalu banyak sumber. Kaedah 1: Ubah suai fail konfigurasi Redis dan cari fail konfigurasi Redis: Fail konfigurasi Redis biasanya terletak di /etc/redis/redis.conf. Edit Fail Konfigurasi: Buka fail konfigurasi menggunakan editor teks (seperti Vi atau nano): sudovi/etc/redis/redis.conf Tetapkan had masa pelaksanaan skrip lua: Tambah atau ubah suai baris berikut dalam fail konfigurasi untuk menetapkan masa pelaksanaan maksimum skrip lua (unit: milidor)

Cara menggunakan baris arahan redis Cara menggunakan baris arahan redis Apr 10, 2025 pm 10:18 PM

Gunakan alat baris perintah redis (redis-cli) untuk mengurus dan mengendalikan redis melalui langkah-langkah berikut: Sambungkan ke pelayan, tentukan alamat dan port. Hantar arahan ke pelayan menggunakan nama arahan dan parameter. Gunakan arahan bantuan untuk melihat maklumat bantuan untuk arahan tertentu. Gunakan perintah berhenti untuk keluar dari alat baris arahan.

See all articles