Artikel ini membawa anda pengetahuan yang berkaitan tentang Redis, yang terutamanya memperkenalkan kandungan berkaitan tentang struktur data biasa Terdapat lima yang paling biasa digunakan, iaitu rentetan, cincang, Mari kita lihat senarai, set dan. set yang ditempah semoga bermanfaat untuk semua.
Pembelajaran yang disyorkan: Tutorial video Redis
Redis menyediakan beberapa struktur data untuk When kami mengakses data dalam Redis, terdapat lima yang paling biasa digunakan: String, Hash, senarai, set, dan set tertib (ZSET).
Jenis rentetan ialah struktur data paling asas bagi Redis. Pertama sekali, kunci adalah semua jenis rentetan, dan beberapa struktur data lain dibina berdasarkan jenis rentetan, jadi jenis rentetan boleh meletakkan asas untuk pembelajaran empat struktur data yang lain. Nilai jenis rentetan sebenarnya boleh menjadi rentetan (rentetan ringkas, rentetan kompleks (seperti JSON, XML)), nombor (integer, nombor titik terapung), atau pun binari (gambar, audio, video), tetapi nilainya ialah yang terbesar Tidak boleh melebihi 512MB.
(Walaupun Redis ditulis dalam C, dan terdapat rentetan dalam C yang pada asasnya dilaksanakan menggunakan tatasusunan char>, tetapi disebabkan pelbagai pertimbangan, Redis masih melaksanakan jenis rentetan itu sendiri)
tetapkan nilai kunci
Arahan set mempunyai beberapa pilihan:
ex saat: Tetapkan masa tamat tahap kedua untuk kunci.
px milisaat: Tetapkan masa tamat tempoh milisaat untuk kunci.
nx: Kunci mestilah tidak wujud sebelum ia boleh ditetapkan dengan jayanya dan digunakan untuk menambah (biasa digunakan untuk kunci yang diedarkan).
xx: Bertentangan dengan nx, kunci mesti wujud sebelum ia boleh ditetapkan dengan jayanya dan digunakan untuk kemas kini.
Daripada kesan pelaksanaan, parameter ex pada asasnya adalah sama dengan perintah tamat tempoh. Satu lagi perkara yang memerlukan perhatian khusus ialah jika rentetan mempunyai set masa tamat, dan kemudian anda memanggil kaedah set untuk mengubah suainya, masa tamat tempohnya akan hilang.
Kesan pelaksanaan nx dan xx adalah seperti berikut
Selain pilihan yang ditetapkan, Redis juga menyediakan arahan setex dan setnx:
kunci setex nilai saat
nilai kunci setnx
setex dan setnx mempunyai fungsi yang sama seperti pilihan ex dan nx. Iaitu, setex menetapkan masa tamat peringkat kedua untuk kunci itu mestilah tidak wujud apabila setnx ditetapkan sebelum ia boleh ditetapkan dengan jayanya.
contoh setex:
contoh setnx:
kerana key foo-ex sudah wujud, Jadi setnx gagal dan hasil pulangan ialah 0. Kunci foo-ex2 tidak wujud, jadi setnx berjaya dan hasil pulangan ialah 1.
Adakah terdapat sebarang senario aplikasi? Ambil arahan setnx sebagai contoh Disebabkan oleh mekanisme pemprosesan perintah berbenang tunggal Redis, jika berbilang pelanggan melaksanakan nilai kunci setnx pada masa yang sama, hanya satu pelanggan boleh menetapkannya. berjaya mengikut ciri setnx , setnx boleh digunakan sebagai penyelesaian pelaksanaan untuk kunci yang diedarkan. Sudah tentu, penguncian yang diedarkan tidak memerlukan hanya satu arahan. Terdapat banyak perkara yang perlu diberi perhatian Kami akan menggunakan bab yang berasingan untuk menerangkan penguncian yang diedarkan berdasarkan Redis nanti.
Jika kunci yang hendak diperolehi tidak wujud, kembalikan sifar (kosong):
Menetapkan 4 pasangan nilai kunci pada satu masa melalui arahan mset
mendapat nilai kunci a, b, c, d dalam kelompok:
Jika beberapa kunci tidak wujud, maka nilainya adalah nil (null), hasilnya dikembalikan dalam susunan kunci input.
Arahan operasi kelompok boleh meningkatkan kecekapan dengan berkesan Jika tiada arahan seperti mget, masa khusus yang diperlukan untuk melaksanakan n kali mendapatkan arahan adalah seperti berikut:
n masa mendapat = n. masa rangkaian masa dan n masa arahan Masa
Selepas menggunakan perintah mgt, masa khusus yang diperlukan untuk melaksanakan n mendapatkan operasi arahan adalah seperti berikut:
n kali mendapat masa = 1 masa rangkaian n masa arahan
Redis boleh menyokong puluhan ribu operasi baca dan tulis sesaat, tetapi ini merujuk kepada keupayaan pemprosesan pelayan Redis Bagi pelanggan, sebagai tambahan kepada masa arahan, arahan juga mempunyai masa rangkaian masa rangkaian ialah 1 milisaat, arahan Masa ialah 0.1 milisaat (berdasarkan pemprosesan 10,000 arahan sesaat), kemudian ia mengambil masa 1.1 saat untuk melaksanakan 1000 mendapatkan arahan (10001 10000.1=1100ms), dan 0.1001. saat untuk satu perintah mgt (1 1 10000.1=101ms).
Arahan incr digunakan untuk melaksanakan operasi kenaikan pada nilai Hasil yang dikembalikan dibahagikan kepada tiga situasi:
Nilai bukan integer, Kembalikan ralat.
Nilai ialah integer dan mengembalikan hasil selepas bertambah. Kunci
tidak wujud Ia dinaikkan mengikut nilai 0 dan hasil yang dikembalikan ialah 1.
Selain perintah incr, Redis menyediakan decr (penurunan kendiri), incrby (nombor yang ditentukan kenaikan sendiri), decrby (nombor yang ditentukan pengurangan sendiri), incrbyfloat (nombor titik terapung meningkat sendiri) ), sila cuba sendiri untuk kesan tertentu.
tambah boleh tambah nilai pada penghujung rentetan
Kembalikan panjang rentetan
Nota: Setiap orang Cina menduduki 3 bait
getset akan menetapkan nilai seperti yang ditetapkan, tetapi perbezaannya ialah ia juga akan mengembalikan nilai asal kunci
pada kedudukan yang ditentukan Subskrip bermula dari 0.
getrange memintas sebahagian daripada rentetan untuk membentuk subrentetan Anda perlu menentukan offset mula dan akhir selang waktu.
String Antara arahan ini, kecuali del, mset dan mget sokongan batching bagi berbilang kunci Operasi, kerumitan masa adalah berkaitan dengan bilangan kekunci, iaitu O(n) Getrange berkaitan dengan panjang rentetan, yang juga O(n) pada dasarnya mempunyai kerumitan masa O(1). daripada kelajuan.
Jenis rentetan mempunyai pelbagai senario penggunaan:
Fungsi cache
Redis Sebagai lapisan cache, MySQL berfungsi sebagai lapisan storan, dan kebanyakan data yang diminta diperoleh daripada Redis. Memandangkan Redis mempunyai ciri-ciri menyokong konkurensi tinggi, caching biasanya boleh memainkan peranan dalam mempercepatkan membaca dan menulis serta mengurangkan tekanan back-end.
Mengira
Menggunakan Redis sebagai alat asas untuk mengira, ia dapat merealisasikan fungsi pengiraan pantas dan caching pertanyaan, dan data boleh didatangkan secara tidak segerak ke data lain sumber.
Sesi Dikongsi
Perkhidmatan web yang diedarkan menyimpan maklumat Sesi pengguna (seperti maklumat log masuk pengguna) dalam pelayan masing-masing. Ini akan menyebabkan masalah Pertimbangan, perkhidmatan yang diedarkan akan mengimbangi akses pengguna kepada pelayan yang berbeza. Pengguna yang menyegarkan akses mereka mungkin mendapati bahawa mereka perlu log masuk semula.
Untuk menyelesaikan masalah ini, Redis boleh digunakan untuk mengurus Sesi pengguna secara berpusat Dalam mod ini, selagi Redis dipastikan tersedia dan berskala tinggi, setiap kali pengguna mengemas kini atau bertanya maklumat log masuk. , ia akan diakses terus daripada pemerolehan Berpusat di Redis.
Had kelajuan
Sebagai contoh, atas sebab keselamatan, banyak aplikasi akan meminta pengguna memasukkan kod pengesahan telefon mudah alih setiap kali mereka log masuk untuk menentukan sama ada mereka adalah pengguna sendiri. Walau bagaimanapun, untuk mengelakkan antara muka SMS daripada diakses dengan kerap, kekerapan pengguna mendapatkan kod pengesahan seminit akan dihadkan, contohnya, tidak lebih daripada 5 kali seminit. Sesetengah tapak web mengehadkan alamat IP daripada ditanya lebih daripada n kali dalam satu saat dan boleh menggunakan idea yang serupa.
Java menyediakan HashMap, dan Redis juga mempunyai struktur data yang serupa, iaitu jenis cincang. Tetapi sila ambil perhatian bahawa hubungan pemetaan dalam jenis cincang dipanggil nilai medan Harap maklum bahawa nilai di sini merujuk kepada nilai yang sepadan dengan medan, bukan nilai yang sepadan dengan kunci.
Pada asasnya, perintah operasi cincang adalah sangat serupa dengan perintah operasi rentetan Banyak arahan menambah huruf h di hadapan perintah jenis rentetan, yang bermaksud operasi. dan juga nyatakan nilai medan yang akan dikendalikan.
pengguna hset:1 nama lijin
Jika tetapan berjaya, ia akan mengembalikan 1, jika tidak ia akan mengembalikan 0. Di samping itu, Redis menyediakan arahan hsetnx Hubungan mereka adalah sama dengan perintah set dan setnx, kecuali skop berubah dari kunci ke medan.
hget pengguna:1 nama
Jika kunci atau medan tidak wujud, tiada akan dikembalikan.
hdel akan memadamkan satu atau lebih medan dan hasil pulangan ialah bilangan medan yang berjaya dipadamkan.
Jika wujud, kembalikan 1, jika ia tidak wujud, kembalikan 1 Pulangan 0
Ia mengembalikan semua medan
Apabila menggunakan hgetall, jika bilangan elemen cincang adalah besar, Redis akan boleh disekat. Jika anda hanya perlu mendapatkan sebahagian daripada medan, anda boleh menggunakan hmget Jika anda mesti mendapatkan semua nilai medan, anda boleh menggunakan arahan hscan ini akan melintasi jenis cincangan secara berperingkat .
hincrby dan hincrbyfloat, sama seperti perintah incrby dan incrbyfloat, tetapi skopnya difailkan.
Arahan operasi jenis cincang, hdel, hmget , masa kerumitan hmset adalah berkaitan dengan bilangan medan yang dibawa oleh arahan, O(k), hkeys, hgetall, hvals berkaitan dengan jumlah bilangan medan yang disimpan, O(N). Kerumitan masa bagi perintah yang lain ialah O(1).
Seperti yang dapat dilihat daripada operasi sebelumnya, operasi String dan Hash adalah sangat serupa, jadi mengapa kita perlu mencipta cincang untuk storan.
Jenis hash lebih sesuai untuk menyimpan data jenis objek Kita boleh membandingkannya Jika rekod pengguna dalam jadual pangkalan data ialah:
id | name | age |
---|---|---|
1 | lijin | 18 |
2 | msb | 20 |
1. Menggunakan jenis String
memerlukan satu jalur untuk dimasukkan dan diperoleh.
tetapkan pengguna:1:name lijin;
tetapkan pengguna:1:umur 18;
tetapkan pengguna:2:name msb;
tetapkan pengguna :2:umur 20;
Kelebihan: mudah dan intuitif, setiap kunci sepadan dengan nilai
Kelemahan: terlalu banyak kunci, mengambil banyak ingatan, pengguna Maklumat terlalu berselerak dan tidak boleh digunakan dalam persekitaran pengeluaran
2 Serialkan objek dan simpan dalam redis
set pengguna: 1 serialize(userInfo);
Kelebihan: Pengaturcaraan mudah, penggunaan memori yang tinggi jika serialization digunakan
Kelemahan: Serialization dan deserialisasi mempunyai overhead tertentu, userInfo perlu dikemas kini apabila mengemas kini atribut Keluarkan semuanya untuk penyahserilan, kemas kini dan kemudian sirikannya untuk disorot semula
3 Gunakan jenis cincang
pengguna hmset: 1 nama lijin umur 18
pengguna hmset:2 nama msb umur 20
Kelebihan: mudah dan intuitif, penggunaan yang munasabah boleh mengurangkan penggunaan ruang memori
Kelemahan: perlu mengawal format pengekodan dalaman, format yang tidak sesuai akan menggunakan lebih banyak memori
Jenis senarai (senarai) digunakan untuk menyimpan berbilang rentetan tertib , a Empat elemen , b, c, c, dan b membentuk senarai tersusun dari kiri ke kanan Setiap rentetan dalam senarai dipanggil elemen Satu senarai boleh menyimpan sehingga (2^32-1) Elemen(4294967295).
Dalam Redis, anda boleh memasukkan (tolak) dan pop (pop) kedua-dua hujung senarai, anda juga boleh mendapatkan senarai elemen dalam julat tertentu, dapatkan elemen dengan subskrip indeks tertentu, dsb. Senarai ialah struktur data yang agak fleksibel yang boleh bertindak sebagai timbunan dan baris gilir dan mempunyai banyak senario aplikasi dalam pembangunan sebenar.
Jenis senarai mempunyai dua ciri:
Pertama, elemen dalam senarai disusun, yang bermaksud bahawa elemen boleh diperolehi melalui subskrip indeks Atau senarai elemen dalam julat.
Kedua, elemen dalam senarai boleh diulang.
kunci mula tamat
Ciri subskrip indeks: dari kiri Ke kanan ialah 0 hingga N-1
arahan 0 -1 dalam julat boleh mendapatkan semua elemen senarai dari kiri ke kanan
Ketiga-tiga hasil pulangan ini ialah panjang senarai semasa selepas arahan selesai, juga Ia adalah bilangan elemen yang terkandung dalam senarai Pada masa yang sama, kedua-dua rpush dan lpush menyokong memasukkan berbilang elemen pada masa yang sama.
r
Sila ambil perhatian bahawa elemen itu akan hilang selepas ia muncul.
rpop akan muncul elemen paling kanan d dalam senarai.
Arahan lrem akan mencari elemen yang sama dengan nilai daripada senarai dan memadam ia. Terdapat tiga situasi mengikut kiraan:
bilangan>0, dari kiri ke kanan, padam sehingga mengira elemen.
kira
count=0, padam semua.
Nilai pulangan ialah bilangan elemen yang sebenarnya dipadamkan.
Sebagai contoh, jika anda ingin mengekalkan elemen ke-0 hingga ke-1 dalam senarai
ls
l
blpop dan brpop menyekat versi lpop dan rpop. Selain itu, mereka juga menyokong berbilang jenis senarai dan tetapan Tetapkan masa penyekatan dalam beberapa saat, ini bermakna ia akan terus disekat. Mari kita ambil brpop sebagai contoh.
Seorang pelanggan disekat (kerana tiada unsur dan ia akan disekat)
Seorang pelanggan telah disekat. Pada masa ini, kami melaksanakan
daripada klien B yang lain dan output klien A
Nota: jika selepas brpop Jika terdapat berbilang kunci, kemudian brpop akan melintasi kekunci dari kiri ke kanan Sebaik sahaja kunci boleh muncul elemen, pelanggan akan kembali serta-merta.
Jenis senarai boleh digunakan sebagai contoh:
Baris gilir mesej, gabungan arahan lpush brpop Redis boleh merealisasikan baris gilir menyekat, dan pelanggan pengeluar menggunakan lrpush untuk mengekstrak data daripada senarai Masukkan elemen di sebelah kiri, dan berbilang pelanggan pengguna menggunakan arahan brpop untuk "merebut" elemen di hujung senarai dengan cara menyekat Berbilang pelanggan memastikan pengimbangan beban dan ketersediaan penggunaan yang tinggi.
Senarai artikel
Setiap pengguna mempunyai senarai artikel sendiri, yang kini perlu dipaparkan dalam halaman. Pada masa ini, anda boleh mempertimbangkan untuk menggunakan senarai, kerana senarai itu bukan sahaja dipesan, tetapi juga menyokong mendapatkan elemen mengikut julat indeks.
Laksanakan struktur data lain
lpush lpop =Timbunan (timbunan)
lpush rpop =Baris gilir (baris gilir)
lpsh ltrim =Kumpulan Terhad (koleksi terhad )
lpush brpop=Message Queue(Message Queue)
Jenis set juga digunakan untuk menyimpan Berbilang elemen rentetan, tetapi tidak seperti jenis senarai, elemen pendua tidak dibenarkan dalam set, dan elemen dalam set tidak tertib, dan elemen tidak boleh diperoleh melalui subskrip indeks.
Koleksi boleh menyimpan sehingga 2 hingga kuasa ke-32 - 1 elemen. Selain menyokong penambahan, pemadaman, pengubahsuaian dan pertanyaan dalam koleksi, Redis juga menyokong set persilangan, kesatuan dan perbezaan bagi pelbagai koleksi Penggunaan jenis koleksi yang betul boleh menyelesaikan banyak masalah praktikal dalam pembangunan sebenar.
membenarkan penambahan berbilang elemen dan hasil pulangan ialah bilangan elemen yang berjaya ditambahkan
membenarkan pemadaman berbilang elemen, hasil pulangan ialah bilangan elemen yang berjaya dipadamkan
Jika elemen elemen yang diberikan berada dalam set, ia akan mengembalikan 1, jika tidak ia akan kembali 0
Jika nombor yang dinyatakan tidak dinyatakan, ia lalai kepada 1
juga boleh menentukan nombor Jika tidak dinyatakan, lalainya ialah 1. Ambil perhatian bahawa kerana ia muncul, selepas arahan spop dilaksanakan, elemen akan dipadamkan. daripada koleksi, tetapi ahli srand tidak akan .
Hasil yang dikembalikan tidak tertib
Kini terdapat dua set, ia adalah set1 dan set2
sinterstore destination key [key ...] suionstore destination key [key ...] sdiffstore destination key [key ...]复制代码
Operasi antara set akan lebih memakan masa apabila terdapat banyak elemen, jadi Redis menyediakan tiga arahan di atas (arahan asal store) menyimpan hasil persilangan, penyatuan dan perbezaan antara set dalam kunci destinasi, contohnya:
set Senario penggunaan biasa jenis ialah tag. Contohnya, seorang pengguna mungkin berminat dengan hiburan dan sukan, manakala pengguna lain mungkin berminat dengan sejarah dan berita. Dengan data ini, anda boleh mendapatkan orang yang menyukai teg yang sama dan teg yang disukai oleh pengguna yang sama. Data ini penting untuk pengalaman pengguna dan meningkatkan kelekatan pengguna.
Sebagai contoh, tapak web e-dagang akan membuat cadangan yang berbeza kepada pengguna dengan label yang berbeza Contohnya, bagi orang yang lebih berminat dengan produk digital, produk digital terkini akan disyorkan kepada mereka dalam pelbagai halaman atau melalui e-mel Biasanya ia akan membawa lebih banyak faedah kepada laman web.
Selain itu, koleksi juga boleh menjana nombor rawak untuk aktiviti seperti aktiviti loteri, graf sosial, dll.
Set tempah agak asing berbanding cincang, senarai dan set, tetapi kerana ia dipanggil Jika set yang dipesan ialah set tertib, maka ia mesti berkaitan dengan set Ia mengekalkan ciri bahawa set tidak boleh mempunyai ahli pendua, tetapi perbezaannya ialah elemen dalam set tersusun boleh diisih. Tetapi tidak seperti senarai yang menggunakan subskrip indeks sebagai asas untuk mengisih, ia menetapkan skor untuk setiap elemen sebagai asas untuk mengisih.
Elemen dalam set tersusun tidak boleh diulang, tetapi markah boleh diulang, sama seperti nombor pelajar pelajar dalam kelas yang sama tidak boleh diulang, tetapi markah ujian boleh sama.
Set tersusun menyediakan fungsi seperti mendapatkan skor yang ditentukan dan pertanyaan julat elemen, mengira kedudukan ahli, dsb. Penggunaan set tertib yang betul boleh membantu kami menyelesaikan banyak masalah dalam pembangunan sebenar.
Hasil pulangan mewakili bilangan ahli yang berjaya ditambahkan
Untuk Nota:
arahan zadd juga mempunyai empat pilihan nx, xx, ch, incr Empat pilihan
nx: ahli tidak boleh wujud sebelum itu boleh ditetapkan Kejayaan, untuk menambah.
xx: ahli mesti wujud sebelum ia boleh ditetapkan dengan jayanya dan digunakan untuk kemas kini.
ch: Mengembalikan bilangan elemen set tertib dan skor yang telah berubah selepas operasi ini
incr: Meningkatkan skor, yang bersamaan dengan zincrby yang diperkenalkan kemudian
mengembalikan sifar jika ahli itu tidak wujud
zrank是从分数从低到高返回排名
zrevrank反之
很明显,排名从0开始计算。
允许一次删除多个成员。
返回结果为成功删除的个数。
有序集合是按照分值排名的,zrange是从低到高返回,zrevrange反之。如果加上 withscores选项,同时会返回成员的分数
zrangebyscore key min max [withscores] [limit offset count] zrevrangebyscore key max min [withscores][limit offset count]复制代码
其中zrangebyscore按照分数从低到高返回,zrevrangebyscore反之。例如下面操作从低到高返回200到221分的成员,withscores选项会同时返回每个成员的分数。
同时min和max还支持开区间(小括号)和闭区间(中括号),-inf和+inf分别代表无限小和无限大:
zcount key min max
zremrangebyrank key start end
zremrangebyscore key min max
zinterstore
这个命令参数较多,下面分别进行说明
destination:交集计算结果保存到这个键。
numkeys:需要做交集计算键的个数。
key [key ...]:需要做交集计算的键。
weights weight [weight ...]:每个键的权重,在做交集计算时,每个键中的每个member 会将自己分数乘以这个权重,每个键的权重默认是1。
aggregate sum/ min |max:计算成员交集后,分值可以按照sum(和)、min(最小值)、max(最大值)做汇总,默认值是sum。
不太好理解,我们用一个例子来说明。(算平均分)
该命令的所有参数和zinterstore是一致的,只不过是做并集计算,大家可以自行实验。
有序集合比较典型的使用场景就是排行榜系统。例如视频网站需要对用户上传的视频做排行榜,榜单的维度可能是多个方面的:按照时间、按照播放数量、按照获得的赞数。
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情
推荐学习:Redis视频教程
Atas ialah kandungan terperinci Struktur data yang biasa digunakan dalam Redis (tersusun dan dikongsi). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!