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

首頁 資料庫 mysql教程 redis學(xué)習(xí)筆記5(set)

redis學(xué)習(xí)筆記5(set)

Jun 07, 2016 pm 03:21 PM
redis set 學(xué)習(xí) 筆記

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

redis學(xué)習(xí)筆記5(set)

?

一、概述:

?

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

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

?

二、相關(guān)命令列表:

命令原型 時(shí)間復(fù)雜度 命令描述 返回值

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

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

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

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

返回Set中所有的成員。

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

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

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

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

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

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

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

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

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

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

三、命令示例:

?

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

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

? ? /> redis-cli

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

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

? ? (integer) 3

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

? ? 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é)果可以,輸出的順序和插入順序無關(guān)。

? ? 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

? ? #為后面的示例準(zhǔn)備測試數(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é)果可以看出,該命令確實(shí)是隨機(jī)的返回了某一成員。

? ? redis 127.0.0.1:6379> srandmember myset

? ? "c"

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

? ? 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三個(gè)成員,其中f并不存在,因此只有a和d兩個(gè)成員被移出,返回為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命令準(zhǔn)備數(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,由于此時(shí)a已經(jīng)不是myset的成員了,因此移動失敗并返回0。

? ? redis 127.0.0.1:6379> smove myset myset2 a

? ? (integer) 0

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

? ? 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:

? ? #為后面的命令準(zhǔn)備測試數(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三個(gè)成員是兩者之間的差異成員。再用這個(gè)結(jié)果繼續(xù)和myset3進(jìn)行差異比較,b和d是myset3不存在的成員。

? ? redis 127.0.0.1:6379> sdiff myset myset2 myset3

? ? 1) "d"

? ? 2) "b"

? ? #將3個(gè)集合的差異成員存在在diffkey關(guān)聯(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"

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

? ? redis 127.0.0.1:6379> sinter myset myset2 myset3

? ? 1) "c"

? ? #將3個(gè)集合中的交集成員存儲到與interkey關(guān)聯(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個(gè)集合中的成員的并集。 ? ?

? ? redis 127.0.0.1:6379> sunion myset myset2 myset3

? ? 1) "b"

? ? 2) "c"

? ? 3) "d"

? ? 4) "e"

? ? 5) "a"

? ? #將3個(gè)集合中成員的并集存儲到unionkey關(guān)聯(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"

?

四、應(yīng)用范圍:

?

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

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

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

laravel8 的優(yōu)化點(diǎn) laravel8 的優(yōu)化點(diǎn) Apr 18, 2025 pm 12:24 PM

Laravel 8 針對性能優(yōu)化提供了以下選項(xiàng):緩存配置:使用 Redis 緩存驅(qū)動、緩存門面、緩存視圖和頁面片段。數(shù)據(jù)庫優(yōu)化:建立索引、使用查詢範(fàn)圍、使用 Eloquent 關(guān)係。 JavaScript 和 CSS 優(yōu)化:使用版本控制、合併和縮小資產(chǎn)、使用 CDN。代碼優(yōu)化:使用 Composer 安裝包、使用 Laravel 助手函數(shù)、遵循 PSR 標(biāo)準(zhǔn)。監(jiān)控和分析:使用 Laravel Scout、使用 Telescope、監(jiān)控應(yīng)用程序指標(biāo)。

如何利用Redis緩存方案高效實(shí)現(xiàn)產(chǎn)品排行榜列表的需求? 如何利用Redis緩存方案高效實(shí)現(xiàn)產(chǎn)品排行榜列表的需求? Apr 19, 2025 pm 11:36 PM

Redis緩存方案如何實(shí)現(xiàn)產(chǎn)品排行榜列表的需求?在開發(fā)過程中,我們常常需要處理排行榜的需求,例如展示一個(gè)?...

Spring Boot中OAuth2Authorization對象Redis緩存失敗怎麼辦? Spring Boot中OAuth2Authorization對象Redis緩存失敗怎麼辦? Apr 19, 2025 pm 08:03 PM

SpringBoot中使用Redis緩存OAuth2Authorization對像在SpringBoot應(yīng)用中,使用SpringSecurityOAuth2AuthorizationServer...

Laravel 最佳擴(kuò)展包推薦:2024 年必備工具 Laravel 最佳擴(kuò)展包推薦:2024 年必備工具 Apr 30, 2025 pm 02:18 PM

2024年必備的Laravel擴(kuò)展包包括:1.LaravelDebugbar,用於監(jiān)控和調(diào)試代碼;2.LaravelTelescope,提供詳細(xì)的應(yīng)用監(jiān)控;3.LaravelHorizon,管理Redis隊(duì)列任務(wù)。這些擴(kuò)展包能提升開發(fā)效率和應(yīng)用性能。

Laravel 環(huán)境搭建與基礎(chǔ)配置(Windows/Mac/Linux) Laravel 環(huán)境搭建與基礎(chǔ)配置(Windows/Mac/Linux) Apr 30, 2025 pm 02:27 PM

在不同操作系統(tǒng)上搭建Laravel環(huán)境的步驟如下:1.Windows:使用XAMPP安裝PHP和Composer,配置環(huán)境變量,安裝Laravel。 2.Mac:使用Homebrew安裝PHP和Composer,安裝Laravel。 3.Linux:使用Ubuntu更新系統(tǒng),安裝PHP和Composer,安裝Laravel。每個(gè)系統(tǒng)的具體命令和路徑有所不同,但核心步驟一致,確保順利搭建Laravel開發(fā)環(huán)境。

REDIS的角色:探索數(shù)據(jù)存儲和管理功能 REDIS的角色:探索數(shù)據(jù)存儲和管理功能 Apr 22, 2025 am 12:10 AM

Redis在數(shù)據(jù)存儲和管理中扮演著關(guān)鍵角色,通過其多種數(shù)據(jù)結(jié)構(gòu)和持久化機(jī)製成為現(xiàn)代應(yīng)用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數(shù)據(jù)結(jié)構(gòu),適用於緩存和復(fù)雜業(yè)務(wù)邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數(shù)據(jù)的可靠存儲和快速恢復(fù)。

centos redis如何配置慢查詢?nèi)照I centos redis如何配置慢查詢?nèi)照I Apr 14, 2025 pm 04:54 PM

在CentOS系統(tǒng)上啟用Redis慢查詢?nèi)照I,提升性能診斷效率。以下步驟將指導(dǎo)您完成配置:第一步:定位並編輯Redis配置文件首先,找到Redis配置文件,通常位於/etc/redis/redis.conf。使用以下命令打開配置文件:sudovi/etc/redis/redis.conf第二步:調(diào)整慢查詢?nèi)照I參數(shù)在配置文件中,找到並修改以下參數(shù):#慢查詢閾值(毫秒)slowlog-log-slower-than10000#慢查詢?nèi)照I最大條目數(shù)slowlog-max-len

在多節(jié)點(diǎn)環(huán)境下,如何確保Spring Boot的@Scheduled定時(shí)任務(wù)只在一個(gè)節(jié)點(diǎn)上執(zhí)行? 在多節(jié)點(diǎn)環(huán)境下,如何確保Spring Boot的@Scheduled定時(shí)任務(wù)只在一個(gè)節(jié)點(diǎn)上執(zhí)行? Apr 19, 2025 pm 10:57 PM

SpringBoot定時(shí)任務(wù)在多節(jié)點(diǎn)環(huán)境下的優(yōu)化方案在開發(fā)Spring...

See all articles