国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah pangkalan data tutorial mysql redis學習筆記5(set)

redis學習筆記5(set)

Jun 07, 2016 pm 03:21 PM
redis set belajar nota

redis學習筆記5(set) 一、概述: 在Redis中,我們可以將Set類型看作為沒有排序的字符集合,和List類型一樣,我們也可以在該類型的數(shù)據(jù)值上執(zhí)行添加、刪除或判斷某一元素是否存在等操作。需要說明的是,這些操作的時間復雜度為O(1),即常量時間內(nèi)完成次操作

redis學習筆記5(set)

?

一、概述:

?

? ? ? 在Redis中,我們可以將Set類型看作為沒有排序的字符集合,和List類型一樣,我們也可以在該類型的數(shù)據(jù)值上執(zhí)行添加、刪除或判斷某一元素是否存在等操作。需要說明的是,這些操作的時間復雜度為O(1),即常量時間內(nèi)完成次操作。Set可包含的最大元素數(shù)量是4294967295。

? ? ? 和List類型不同的是,Set集合中不允許出現(xiàn)重復的元素,這一點和C++標準庫中的set容器是完全相同的。換句話說,如果多次添加相同元素,Set中將僅保留該元素的一份拷貝。和List類型相比,Set類型在功能上還存在著一個非常重要的特性,即在服務器端完成多個Sets之間的聚合計算操作,如unions、intersections和differences。由于這些操作均在服務端完成,因此效率極高,而且也節(jié)省了大量的網(wǎng)絡IO開銷。

?

二、相關命令列表:

命令原型 時間復雜度 命令描述 返回值

SADD key member [member ...] O(N) 時間復雜度中的N表示操作的成員數(shù)量。如果在插入的過程用,參數(shù)中有的成員在Set中已經(jīng)存在,該成員將被忽略,而其它成員仍將會被正常插入。如果執(zhí)行該命令之前,該Key并不存在,該命令將會創(chuàng)建一個新的Set,此后再將參數(shù)中的成員陸續(xù)插入。如果該Key的Value不是Set類型,該命令將返回相關的錯誤信息。 本次操作實際插入的成員數(shù)量。

SCARD key O(1) 獲取Set中成員的數(shù)量。 返回Set中成員的數(shù)量,如果該Key并不存在,返回0。

SISMEMBER key member O(1) 判斷參數(shù)中指定成員是否已經(jīng)存在于與Key相關聯(lián)的Set集合中。 1表示已經(jīng)存在,0表示不存在,或該Key本身并不存在。

SMEMBERS key O(N) 時間復雜度中的N表示Set中已經(jīng)存在的成員數(shù)量。獲取與該Key關聯(lián)的Set中所有的成員。

返回Set中所有的成員。

SPOP key O(1) 隨機的移除并返回Set中的某一成員。 由于Set中元素的布局不受外部控制,因此無法像List那樣確定哪個元素位于Set的頭部或者尾部。 返回移除的成員,如果該Key并不存在,則返回nil。

SREM key member [member ...] O(N) 時間復雜度中的N表示被刪除的成員數(shù)量。從與Key關聯(lián)的Set中刪除參數(shù)中指定的成員,不存在的參數(shù)成員將被忽略,如果該Key并不存在,將視為空Set處理。 從Set中實際移除的成員數(shù)量,如果沒有則返回0。

SRANDMEMBER key O(1) 和SPOP一樣,隨機的返回Set中的一個成員,不同的是該命令并不會刪除返回的成員。 返回隨機位置的成員,如果Key不存在則返回nil。

SMOVE source destination member O(1) 原子性的將參數(shù)中的成員從source鍵移入到destination鍵所關聯(lián)的Set中。因此在某一時刻,該成員或者出現(xiàn)在source中,或者出現(xiàn)在destination中。如果該成員在source中并不存在,該命令將不會再執(zhí)行任何操作并返回0,否則,該成員將從source移入到destination。如果此時該成員已經(jīng)在destination中存在,那么該命令僅是將該成員從source中移出。如果和Key關聯(lián)的Value不是Set,將返回相關的錯誤信息。 1表示正常移動,0表示source中并不包含參數(shù)成員。

SDIFF key [key ...] O(N) 時間復雜度中的N表示所有Sets中成員的總數(shù)量。返回參數(shù)中第一個Key所關聯(lián)的Set和其后所有Keys所關聯(lián)的Sets中成員的差異。如果Key不存在,則視為空Set。 差異結(jié)果成員的集合。

SDIFFSTORE destination key [key ...] O(N) 該命令和SDIFF命令在功能上完全相同,兩者之間唯一的差別是SDIFF返回差異的結(jié)果成員,而該命令將差異成員存儲在destination關聯(lián)的Set中。如果destination鍵已經(jīng)存在,該操作將覆蓋它的成員。 返回差異成員的數(shù)量。

SINTER key [key ...] O(N*M) 時間復雜度中的N表示最小Set中元素的數(shù)量,M則表示參數(shù)中Sets的數(shù)量。該命令將返回參數(shù)中所有Keys關聯(lián)的Sets中成員的交集。因此如果參數(shù)中任何一個Key關聯(lián)的Set為空,或某一Key不存在,那么該命令的結(jié)果將為空集。 交集結(jié)果成員的集合。

SINTERSTORE destination key [key ...] O(N*M) 該命令和SINTER命令在功能上完全相同,兩者之間唯一的差別是SINTER返回交集的結(jié)果成員,而該命令將交集成員存儲在destination關聯(lián)的Set中。如果destination鍵已經(jīng)存在,該操作將覆蓋它的成員。 返回交集成員的數(shù)量。?

SUNION key [key ...] O(N) 時間復雜度中的N表示所有Sets中成員的總數(shù)量。該命令將返回參數(shù)中所有Keys關聯(lián)的Sets中成員的并集。 并集結(jié)果成員的集合。

SUNIONSTORE destination key [key ...] O(N) 該命令和SUNION命令在功能上完全相同,兩者之間唯一的差別是SUNION返回并集的結(jié)果成員,而該命令將并集成員存儲在destination關聯(lián)的Set中。如果destination鍵已經(jīng)存在,該操作將覆蓋它的成員。 返回并集成員的數(shù)量。

三、命令示例:

?

? ?1. SADD/SMEMBERS/SCARD/SISMEMBER:

? ? #在Shell命令行下啟動Redis的客戶端程序。

? ? /> redis-cli

? ? #插入測試數(shù)據(jù),由于該鍵myset之前并不存在,因此參數(shù)中的三個成員都被正常插入。

? ? redis 127.0.0.1:6379> sadd myset a b c

? ? (integer) 3

? ? #由于參數(shù)中的a在myset中已經(jīng)存在,因此本次操作僅僅插入了d和e兩個新成員。

? ? redis 127.0.0.1:6379> sadd myset a d e

? ? (integer) 2

? ? #判斷a是否已經(jīng)存在,返回值為1表示存在。

? ? redis 127.0.0.1:6379> sismember myset a

? ? (integer) 1

? ? #判斷f是否已經(jīng)存在,返回值為0表示不存在。

? ? redis 127.0.0.1:6379> sismember myset f

? ? (integer) 0

? ? #通過smembers命令查看插入的結(jié)果,從結(jié)果可以,輸出的順序和插入順序無關。

? ? redis 127.0.0.1:6379> smembers myset

? ? 1) "c"

? ? 2) "d"

? ? 3) "a"

? ? 4) "b"

? ? 5) "e"

? ? #獲取Set集合中元素的數(shù)量。

? ? redis 127.0.0.1:6379> scard myset

? ? (integer) 5

?

? ? 2. SPOP/SREM/SRANDMEMBER/SMOVE:

? ? #刪除該鍵,便于后面的測試。

? ? redis 127.0.0.1:6379> del myset

? ? (integer) 1

? ? #為后面的示例準備測試數(shù)據(jù)。

? ? redis 127.0.0.1:6379> sadd myset a b c d

? ? (integer) 4

? ? #查看Set中成員的位置。

? ? redis 127.0.0.1:6379> smembers myset

? ? 1) "c"

? ? 2) "d"

? ? 3) "a"

? ? 4) "b"

? ? #從結(jié)果可以看出,該命令確實是隨機的返回了某一成員。

? ? redis 127.0.0.1:6379> srandmember myset

? ? "c"

? ? #Set中尾部的成員b被移出并返回,事實上b并不是之前插入的第一個或最后一個成員。

? ? redis 127.0.0.1:6379> spop myset

? ? "b"

? ? #查看移出后Set的成員信息。

? ? redis 127.0.0.1:6379> smembers myset

? ? 1) "c"

? ? 2) "d"

? ? 3) "a"

? ? #從Set中移出a、d和f三個成員,其中f并不存在,因此只有a和d兩個成員被移出,返回為2。

? ? redis 127.0.0.1:6379> srem myset a d f

? ? (integer) 2

? ? #查看移出后的輸出結(jié)果。

? ? redis 127.0.0.1:6379> smembers myset

? ? 1) "c"

? ? #為后面的smove命令準備數(shù)據(jù)。

? ? redis 127.0.0.1:6379> sadd myset a b

? ? (integer) 2

? ? redis 127.0.0.1:6379> sadd myset2 c d

? ? (integer) 2

? ? #將a從myset移到myset2,從結(jié)果可以看出移動成功。

? ? redis 127.0.0.1:6379> smove myset myset2 a

? ? (integer) 1

? ? #再次將a從myset移到myset2,由于此時a已經(jīng)不是myset的成員了,因此移動失敗并返回0。

? ? redis 127.0.0.1:6379> smove myset myset2 a

? ? (integer) 0

? ? #分別查看myset和myset2的成員,確認移動是否真的成功。

? ? redis 127.0.0.1:6379> smembers myset

? ? 1) "b"

? ? redis 127.0.0.1:6379> smembers myset2

? ? 1) "c"

? ? 2) "d"

? ? 3) "a"

?

? ?3. SDIFF/SDIFFSTORE/SINTER/SINTERSTORE:

? ? #為后面的命令準備測試數(shù)據(jù)。

? ? redis 127.0.0.1:6379> sadd myset a b c d

? ? (integer) 4

? ? redis 127.0.0.1:6379> sadd myset2 c

? ? (integer) 1

? ? redis 127.0.0.1:6379> sadd myset3 a c e

? ? (integer) 3

? ? #myset和myset2相比,a、b和d三個成員是兩者之間的差異成員。再用這個結(jié)果繼續(xù)和myset3進行差異比較,b和d是myset3不存在的成員。

? ? redis 127.0.0.1:6379> sdiff myset myset2 myset3

? ? 1) "d"

? ? 2) "b"

? ? #將3個集合的差異成員存在在diffkey關聯(lián)的Set中,并返回插入的成員數(shù)量。

? ? redis 127.0.0.1:6379> sdiffstore diffkey myset myset2 myset3

? ? (integer) 2

? ? #查看一下sdiffstore的操作結(jié)果。

? ? redis 127.0.0.1:6379> smembers diffkey

? ? 1) "d"

? ? 2) "b"

? ? #從之前準備的數(shù)據(jù)就可以看出,這三個Set的成員交集只有c。

? ? redis 127.0.0.1:6379> sinter myset myset2 myset3

? ? 1) "c"

? ? #將3個集合中的交集成員存儲到與interkey關聯(lián)的Set中,并返回交集成員的數(shù)量。

? ? redis 127.0.0.1:6379> sinterstore interkey myset myset2 myset3

? ? (integer) 1

? ? #查看一下sinterstore的操作結(jié)果。

? ? redis 127.0.0.1:6379> smembers interkey

? ? 1) "c"

? ? #獲取3個集合中的成員的并集。 ? ?

? ? redis 127.0.0.1:6379> sunion myset myset2 myset3

? ? 1) "b"

? ? 2) "c"

? ? 3) "d"

? ? 4) "e"

? ? 5) "a"

? ? #將3個集合中成員的并集存儲到unionkey關聯(lián)的set中,并返回并集成員的數(shù)量。

? ? redis 127.0.0.1:6379> sunionstore unionkey myset myset2 myset3

? ? (integer) 5

? ? #查看一下suiionstore的操作結(jié)果。

? ? redis 127.0.0.1:6379> smembers unionkey

? ? 1) "b"

? ? 2) "c"

? ? 3) "d"

? ? 4) "e"

? ? 5) "a"

?

四、應用范圍:

?

? ? ? 1). 可以使用Redis的Set數(shù)據(jù)類型跟蹤一些唯一性數(shù)據(jù),比如訪問某一博客的唯一IP地址信息。對于此場景,我們僅需在每次訪問該博客時將訪問者的IP存入Redis中,Set數(shù)據(jù)類型會自動保證IP地址的唯一性。

? ? ? 2). 充分利用Set類型的服務端聚合操作方便、高效的特性,可以用于維護數(shù)據(jù)對象之間的關聯(lián)關系。比如所有購買某一電子設備的客戶ID被存儲在一個指定的Set中,而購買另外一種電子產(chǎn)品的客戶ID被存儲在另外一個Set中,如果此時我們想獲取有哪些客戶同時購買了這兩種商品時,Set的intersections命令就可以充分發(fā)揮它的方便和效率的優(yōu)勢了。

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

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

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.

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)

Topik panas

Tutorial PHP
1502
276
Pek pengembangan terbaik Laravel yang disyorkan: 2024 Alat penting Pek pengembangan terbaik Laravel yang disyorkan: 2024 Alat penting Apr 30, 2025 pm 02:18 PM

Pakej lanjutan Laravel yang penting untuk 2024 termasuk: 1 Laraveldebrugbar, yang digunakan untuk memantau dan debug kod; 2. Laraveltelescope, menyediakan pemantauan aplikasi terperinci; 3. Laravelhorizon, menguruskan tugas -tugas redis. Pek pengembangan ini dapat meningkatkan kecekapan pembangunan dan prestasi aplikasi.

Pembinaan Persekitaran Laravel dan Konfigurasi Asas (Windows/Mac/Linux) Pembinaan Persekitaran Laravel dan Konfigurasi Asas (Windows/Mac/Linux) Apr 30, 2025 pm 02:27 PM

Langkah -langkah untuk membina persekitaran Laravel pada sistem operasi yang berbeza adalah seperti berikut: 1.Windows: Gunakan XAMPP untuk memasang PHP dan komposer, konfigurasikan pembolehubah persekitaran, dan pasang Laravel. 2.MAC: Gunakan homebrew untuk memasang PHP dan komposer dan pasang Laravel. 3.Linux: Gunakan Ubuntu untuk mengemas kini sistem, pasang PHP dan komposer, dan pasang Laravel. Perintah dan laluan khusus setiap sistem adalah berbeza, tetapi langkah -langkah teras adalah konsisten untuk memastikan pembinaan lancar persekitaran pembangunan Laravel.

Redis: perbandingan dengan pelayan pangkalan data tradisional Redis: perbandingan dengan pelayan pangkalan data tradisional May 07, 2025 am 12:09 AM

Redis lebih tinggi daripada pangkalan data tradisional dalam senario latency yang tinggi dan rendah, tetapi tidak sesuai untuk pertanyaan kompleks dan pemprosesan transaksi. 1.Redis menggunakan penyimpanan memori, bacaan cepat dan tulis kelajuan, sesuai untuk kesesuaian tinggi dan keperluan latensi yang rendah. 2. Pangkalan data tradisional didasarkan pada cakera, sokongan pertanyaan kompleks dan pemprosesan transaksi, dan mempunyai konsistensi dan ketekunan data yang kuat. 3. Redis sesuai sebagai suplemen atau pengganti pangkalan data tradisional, tetapi ia perlu dipilih mengikut keperluan perniagaan tertentu.

Bagaimana untuk mengehadkan sumber pengguna di Linux? Bagaimana cara mengkonfigurasi ULIMIT? Bagaimana untuk mengehadkan sumber pengguna di Linux? Bagaimana cara mengkonfigurasi ULIMIT? May 29, 2025 pm 11:09 PM

Sistem Linux mengehadkan sumber pengguna melalui perintah ULIMIT untuk mengelakkan penggunaan sumber yang berlebihan. 1.Ulimit adalah arahan shell terbina dalam yang boleh mengehadkan bilangan deskriptor fail (-N), saiz memori (-V), kiraan thread (-u), dan lain-lain, yang dibahagikan kepada had lembut (nilai berkesan semasa) dan had keras (had atas maksimum). 2. Gunakan perintah ULIMIT secara langsung untuk pengubahsuaian sementara, seperti ULIMIT-N2048, tetapi hanya sah untuk sesi semasa. 3. Untuk kesan tetap, anda perlu mengubah suai /etc/security/limits.conf dan fail konfigurasi PAM, dan tambah sessionrequiredpam_limits.so. 4. Perkhidmatan SystemD perlu menetapkan LIM dalam fail unit

Adakah Redis terutamanya pangkalan data? Adakah Redis terutamanya pangkalan data? May 05, 2025 am 12:07 AM

Redis terutamanya pangkalan data, tetapi ia lebih daripada sekadar pangkalan data. 1. Sebagai pangkalan data, Redis menyokong kegigihan dan sesuai untuk keperluan berprestasi tinggi. 2. Sebagai cache, Redis meningkatkan kelajuan tindak balas aplikasi. 3. Sebagai broker mesej, REDIS menyokong mod penerbitan-langganan, sesuai untuk komunikasi masa nyata.

Redis: Beyond SQL - Perspektif NoSQL Redis: Beyond SQL - Perspektif NoSQL May 08, 2025 am 12:25 AM

Redis melampaui pangkalan data SQL kerana prestasi dan fleksibiliti yang tinggi. 1) Redis mencapai bacaan dan tulis kelajuan yang sangat cepat melalui penyimpanan memori. 2) Ia menyokong pelbagai struktur data, seperti senarai dan koleksi, sesuai untuk pemprosesan data yang kompleks. 3) Model tunggal-threaded memudahkan pembangunan, tetapi konkurensi tinggi mungkin menjadi kesesakan.

Langkah dan Contoh untuk Membangun Laman Web PHP Dinamik Dengan PHPStudy Langkah dan Contoh untuk Membangun Laman Web PHP Dinamik Dengan PHPStudy May 16, 2025 pm 07:54 PM

Langkah -langkah untuk membina laman web PHP yang dinamik menggunakan PHPStudy termasuk: 1. Pasang PHPStudy dan mulakan perkhidmatan; 2. Konfigurasi Direktori Root Laman Web dan Sambungan Pangkalan Data; 3. Tulis skrip PHP untuk menghasilkan kandungan dinamik; 4. Debug dan mengoptimumkan prestasi laman web. Melalui langkah -langkah ini, anda boleh membina laman web PHP dinamik yang berfungsi sepenuhnya dari awal.

Redis: Membentangkan tujuan dan aplikasi utama Redis: Membentangkan tujuan dan aplikasi utama May 03, 2025 am 12:11 AM

Redisisanopen-Source, In-MenoryDataStructureStoreusedasadatabase, Cache, andMessageBroker, ExcellingInspeedandversatility.Iswidelyededforcaching, Real-Timeanalytics, sessionManagement, danSleaderboardsDuetoitssupportorvariousdatastructures

See all articles