共計 2333 個字符,預(yù)計需要花費 6 分鐘才能閱讀完成。
本篇內(nèi)容介紹了“數(shù)據(jù)庫集合相關(guān)命令有哪些”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
集合的性質(zhì): 唯一性, 無序性, 確定性
無序性,例:{1,2}=={2,1}
唯一性,每一個值都是唯一的
例:插入“python”,“golang”,“python ,“c”, java 5 個值,但實際上,Redis 返回的數(shù)字 4,表示實際上只插入了 4 個值。這是因為有兩個“python”,集合自動過濾了第 2 個 python”。
注: 在 string 和 link 的命令中, 可以通過 range 來訪問 string 中的某幾個字符或某幾個元素
但, 因為集合的無序性, 無法通過下標或范圍來訪問部分元素.
因此想看元素, 要么隨機先一個, 要么全選
sadd key value1 value2
作用: 往集合 key 中增加元素
sadd 命令在遇到數(shù)據(jù)己經(jīng)存在時,會返回“0”,如果數(shù)據(jù)不存在則把數(shù)據(jù)插入再返回 1。所以,這條命令可以通過返回的數(shù)字來判斷數(shù)據(jù)是否存在。
srem value1 value2
作用: 刪除集合中集為 value1 value2 的元素
返回值: 忽略不存在的元素后, 真正刪除掉的元素的個數(shù)
spop key
作用: 返回并刪除集合中 key 中 1 個隨機元素
隨機 – 體現(xiàn)了無序性
(spop 會彈出 / 刪除 key 中的元素,可以用這個來抽獎,第一名抽出來,第二名,第三名 …)
srandmember key
作用: 返回集合 key 中, 隨機的 1 個元素.
(和 spop 不同,不會彈出 / 刪除 key 中的元素)
sismember key value
作用: 判斷 value 是否在 key 集合中
是返回 1, 否返回 0
smembers key
作用: 返回集中中所有的元素
注意:
smembers 命令不會刪除數(shù)據(jù)。但是如果集合里的數(shù)據(jù)量極大,就應(yīng)該慎重使用“獲取所有數(shù)據(jù),因為這樣會導(dǎo)致系統(tǒng)的 I / o 資源瞬間耗盡
scard key
作用: 返回集合中元素的個數(shù)
smove source dest value
作用: 把 source 中的 value 刪除, 并添加到 dest 集合中
sinter key1 key2 key3
作用: 求出 key1 key2 key3 三個集合中的交集, 并返回
redis 127.0.0.1:6379 sadd s1 0 2 4 6
(integer) 4
redis 127.0.0.1:6379 sadd s2 1 2 3 4
(integer) 4
redis 127.0.0.1:6379 sadd s3 4 8 9 12
(integer) 4
redis 127.0.0.1:6379 sinter s1 s2 s3
1) 4
redis 127.0.0.1:6379 sinter s3 s1 s2
1) 4
sinterstore dest key1 key2 key3
作用: 求出 key1 key2 key3 三個集合中的交集, 并賦給 dest
suion key1 key2.. Keyn
作用: 求出 key1 key2 keyn 的并集, 并返回
sdiff key1 key2 key3
作用: 求出 key1 與 key2 key3 的差集
即 key1-key2-key3
集合的應(yīng)用:
在工程中,Redis 的集合一般有兩種用途:
(I)根據(jù)集合內(nèi)數(shù)據(jù)不重復(fù)的特性實現(xiàn)去重并記錄信息。
(2)利用多個集合計算交集、并集和差集。
假設(shè),要做一個學生選課情況實時監(jiān)控系統(tǒng),則需要實時知道以下幾個數(shù)據(jù):
(I)當前一共有多少學生至少選了一門課。
(2)選了 A 課沒有選 B 課的學生有多少。
(3)既選了 A 課又選了 B 課的學生有多少。
(4) A、B 兩門課至少選了一門的學生有多少。
使用集合可以輕易實現(xiàn)這樣的功能。每一門課作為一個集合,里面的值就是每一個學生的
學號,如圖 5 -65 所示:
用 python 實現(xiàn):
import redis
client = redis.Redis(host= xx.xx.xx.xx’)
all_class = [algorithm’,’computer’,’history’,’circuit_design’,’math]
def all_student():
students = client.sunion(*all_class)
return len(students)
def in_a_and_in_b(class_a,class_b):
students = client.sinter(class_a,class_b)
return len(students)
def in_a_not_in_b(class_a,class_b):
students = client.sdiff(class a , class b)
return len(students)
def in_a_or_in_b(class_a,class_b):
students= client.sunion(classa,classb)
return len(students)
def in_a_or_in_b(class_a,class_b):
students = client.sunion(class_a,class_b)
return len(students)
// 選了至少一門課:all_student()
// 選了 math 沒選 computer 的:in_a_not_in_b(math , computer)
// 選了 math 也選了 computer 的學生:in_a_and_in_b(math , computer)
// 選了 math 或選了 computer 的學生:in_a_or_in_b(math , computer)
“數(shù)據(jù)庫集合相關(guān)命令有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實用文章!