Rumah pangkalan data Redis Apakah reka bentuk nilai kunci biasa bagi pangkalan data Redis?

Apakah reka bentuk nilai kunci biasa bagi pangkalan data Redis?

May 29, 2023 am 11:50 AM
redis

Sistem log masuk pengguna

Sistem yang merekodkan maklumat log masuk pengguna Kami telah memudahkan perniagaan dan hanya meninggalkan satu jadual.

Reka bentuk pangkalan data hubungan

mysql>select*fromlogin;

+----------+---------- ------+-------------+---------------------+

 | user_id|name|login_times|last_login_time|

 +---------+----------------+-------- -----+---------------------+

 |1|kenthompson|5|2011-01-0100:00:00 |

|2|dennisritchie|1|2011-02-0100:00:00|

|3|JoeArmstrong|2|2011-03-0100:00:00|

 +---------+----------------+-------------+----- -----------------+

Kunci utama jadual user_id, nama mewakili nama pengguna, login_times mewakili bilangan log masuk pengguna, setiap kali pengguna log masuk, login_times akan meningkat secara automatik, dan last_login_time dikemas kini kepada masa semasa.

Reka bentuk REDIS

Tukar data hubungan ke dalam pangkalan data KV Kaedah saya adalah seperti berikut:

Nama jadual kunci: Nilai kunci utama: Nama lajur

. Nilai lajur nilai

biasanya menggunakan titik bertindih sebagai pemisah Ini adalah peraturan tidak bertulis. Sebagai contoh, dalam sistem php-adminforredis, kunci dipisahkan dengan titik bertindih secara lalai, jadi user:1user:2 dan kunci lain akan dibahagikan kepada satu kumpulan. Jadi data perhubungan di atas ditukar kepada data kv dan direkodkan seperti berikut:

Setlogin:1:login_times5

Setlogin:2:login_times1

Setlogin:3:login_times2

Setlogin:1:last_login_time2011-1-1

Setlogin:2:last_login_time2011-2-1

Setlogin:3:last_login_time2011-3-1

set :1 :name"kenthompson"

setlogin:2:name "dennisritchie"

setlogin:3:name"JoeArmstrong"

Jika kunci utama diketahui, anda boleh gunakan kaedah dapatkan dan tetapkan Dapatkan atau ubah suai nama pengguna, masa log masuk dan masa log masuk terakhir.

Pengguna umum tidak boleh tahu ID mereka sendiri, mereka hanya tahu nama pengguna mereka, jadi mesti ada hubungan pemetaan dari nama ke ID Reka bentuk di sini berbeza daripada di atas.

set"log masuk:kenthompson:id"1

set"log masuk:dennisritchie:id"2

set"log masuk:JoeArmstrong:id"3

Dengan cara ini, setiap kali pengguna log masuk, logik perniagaan adalah seperti berikut (versi python), r ialah objek redis, dan nama ialah nama pengguna yang diketahui.

 #Dapatkan id pengguna

uid=r.get("login:%s:id"%name)

 #Tingkatkan bilangan log masuk pengguna secara automatik

Berikut ialah ayat yang mungkin difrasa semula: ret = r.incr("login:%s:login_times" % uid)

 #Kemas kini masa log masuk terakhir pengguna

ret=r.set("login:%s:last_login_time " %uid,datetime.datetime.now())

Jika keperluan hanya untuk mengetahui ID, mengemas kini atau mendapatkan masa log masuk terakhir dan bilangan log masuk pengguna, tiada perbezaan antara pangkalan data hubungan dan pangkalan data kv. Satu melalui btreepk dan satu lagi melalui cincangan, kedua-duanya berfungsi dengan baik.

Katakan terdapat keperluan berikut untuk mencari pengguna N yang log masuk baru-baru ini. Pemaju mempunyai rupa dan ia agak mudah, ia boleh dilakukan dengan hanya satu sql.

Sila pilih semua lajur daripada jadual "log masuk", mengisih mengikut lajur "last_login_time" dalam tertib menurun dan hadkan saiz set hasil kepada N

Selepas DBA memahami keperluan, pertimbangkan jadual masa hadapan jika Ia agak besar, jadi buat indeks pada last_login_time. Dengan mengakses rekod N bermula dari bahagian paling kanan indeks, dan kemudian melaksanakan operasi pemulangan jadual N, pelan pelaksanaan mempunyai kesan yang ketara.

Apakah reka bentuk nilai kunci pangkalan data Redis biasa

Dua hari kemudian, saya perlu tahu siapa yang paling kerap log masuk. Bagaimana untuk menangani jenis perhubungan yang sama? DEV berkata ia mudah

 select*fromloginorderbylogin_timesdesclimitN

 DBA melihat dan perlu mencipta indeks pada login_time. Adakah anda fikir ada sesuatu yang salah? Setiap medan dalam jadual mempunyai petikan utama.

Punca masalah ialah penyimpanan data pangkalan data hubungan tidak cukup fleksibel, dan data hanya boleh disimpan menggunakan jadual timbunan yang disusun dalam baris. Struktur data bersatu bermakna anda mesti menggunakan indeks untuk menukar laluan akses SQL untuk mengakses lajur tertentu dengan cepat, dan peningkatan laluan akses bermakna anda mesti menggunakan maklumat statistik untuk membantu, jadi banyak masalah timbul.

Tiada indeks, tiada rancangan statistik, dan tiada pelan pelaksanaan Ini adalah pangkalan data kv.

Sebagai tindak balas kepada keperluan untuk mendapatkan N keping data terkini, ciri masuk dahulu keluar terakhir bagi senarai terpaut dalam Redis sangat sesuai. Kami menambah sekeping kod selepas kod log masuk di atas untuk mengekalkan senarai terpaut log masuk dan mengawal panjangnya supaya pengguna log masuk N terbaharu sentiasa disimpan di dalamnya.

 #Tambahkan orang semasa log masuk ke senarai terpaut

 ret=r.lpush("login:last_login_times",uid)

 #Simpan senarai terpaut dengan hanya N digit

ret=redis.ltrim("login:last_login_times",0,N-1)

Dengan cara ini, anda perlu mendapatkan id orang log masuk terkini, kod berikut boleh digunakan

last_login_list=r .lrange("login:last_login_times",0,N-1)

Selain itu, untuk mencari orang yang paling kerap log masuk, sortedset sangat sesuai untuk keperluan seperti sortedset dan kedudukan Kami menggabungkan pengguna dan masa log masuk Disimpan secara seragam dalam sortedset.

zaddlogin:login_times51

zaddlogin:login_times12

zaddlogin:login_times23

Dengan cara ini, jika pengguna log masuk, set isihan tambahan akan dikekalkan, set kod tambahan akan dikekalkan. berikut

#Bilangan masa log masuk untuk pengguna ini meningkat sebanyak 1

ret=r.zincrby("login:login_times",1,uid)

Jadi bagaimana untuk dapatkan pengguna dengan masa log masuk paling banyak, susun mengikut urutan terbalik Ambil pengguna peringkat ke-N

ret=r.zrevrange("login:login_times",0,N-1)

Ia boleh dilihat bahawa DEV perlu menambah 2 baris kod DBA tidak perlu mempertimbangkan indeks atau apa-apa.

Sistem TAG

Teg adalah perkara biasa dalam aplikasi Internet Jika direka dengan pangkalan data hubungan tradisional, ia akan menjadi agak tidak jelas. Kita ambil contoh mencari buku untuk melihat kelebihan redis dalam hal ini.

Reka bentuk pangkalan data hubungan

Dua jadual, satu untuk butiran buku dan satu untuk tag, menunjukkan tag setiap buku. Terdapat berbilang tag dalam buku.

mysql>select*frombook;

+------+------------------------ ----------------------------------------+

 |id|nama|pengarang|

 +----- -------------------------------------+------------- --- +

|1|TheRubyProgrammingLanguage|MarkPilgrim|

|1|Rubyonrail|DavidFlanagan|

|1|ProgrammingErlang|JoeArmstrong|

---------------------------------------------------- ------ --+

mysql>select*fromtag;

+---------+---------+

|tag |book_id|

 +---------+---------+

 |delima|1|

 |delima|. 2|

|web|2|

|erlang|3|

+---------+--- ------ +

Jika terdapat keperluan sedemikian, bagaimana untuk mencari buku di ruby ​​​​dan web, jika ia adalah pangkalan data hubungan

pilihb.nama,b. authorfromtagt1,tagt2,bookb

Wheret1.tagname='web'andt2.tagname='ruby'andt1.book_id=t2.book_idandb.id=t1.book_id

Jadual tag dikaitkan secara automatik dua kali dan kemudian dikaitkan dengan buku ini. SQL ini masih agak kompleks. Bagaimana jika keperluannya ialah Ruby, tetapi bukan buku web

Data perhubungan sebenarnya tidak sesuai untuk operasi set ini.

Reka bentuk REDIS

Pertama sekali, data buku mesti disimpan, sama seperti di atas.

setbook:1:name"TheRubyProgrammingLanguage"

Setbook:2:name"Rubyonrail"

Setbook:3:name"ProgrammingErlang"

setbook: 1:pengarang"MarkPilgrim"

Setbook:2:author"DavidFlanagan"

Setbook:3:author"JoeArmstrong"

jadual tag Kami menggunakan set untuk menyimpan data, kerana Set pandai mencari persimpangan dan kesatuan

sadtag:ruby1

sadtag:ruby2

sadtag:web2

sadtag:erlang3

Kemudian , buku milik ruby ​​​​tetapi juga milik web?

 inter_list=redis.sinter("tag.web","tag:ruby")

 Iaitu, buku kepunyaan ruby ​​​​tetapi bukan milik web ?

inter_list=redis.sdiff("tag.ruby","tag:web")

Koleksi buku itu milik ruby ​​​​dan web?

inter_list=redis .sunion("tag.ruby","tag:web")

Ia sangat mudah.

Daripada dua contoh di atas, kita dapat melihat bahawa dalam beberapa senario, pangkalan data hubungan anda mungkin boleh mereka bentuk sistem yang memenuhi keperluan anda, tetapi ia sentiasa berasa pelik dilakukan secara mekanikal.

Terutama dalam contoh log masuk ke sistem, pengindeksan perniagaan sering dibuat. Dalam sistem yang kompleks, ddl (buat indeks) boleh mengubah rancangan pelaksanaan. Oleh kerana SQL dalam sistem lama dengan perniagaan yang kompleks adalah semua jenis pelik, menyebabkan SQL lain menggunakan rancangan pelaksanaan yang berbeza, masalah ini sukar untuk diramalkan. Terlalu sukar untuk memerlukan DBA memahami semua SQL dalam sistem ini. Masalah ini amat serius dalam Oracle, dan setiap DBA mungkin pernah menghadapinya. Walaupun terdapat kaedah DDL dalam talian sekarang, DDL masih tidak begitu mudah untuk sistem seperti MySQL. Apabila bercakap tentang meja besar, DBA bangun awal pagi untuk beroperasi pada waktu perniagaan yang rendah, saya sering melakukannya. Sangat mudah untuk menggunakan Redis untuk mengendalikan permintaan ini, dan hanya memerlukan DBA untuk menganggarkan kapasiti.

Atas ialah kandungan terperinci Apakah reka bentuk nilai kunci biasa bagi pangkalan data Redis?. 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