您好,登錄后才能下訂單哦!
本篇內容介紹了“數據庫集合相關命令有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
集合的性質: 唯一性,無序性,確定性
無序性,例:{1,2}=={2,1}
唯一性,每一個值都是唯一的
例:插入“python”,“golang”,“python",“c”,"java"5個值,但實際上,Redis返回的數字4,表示實際上只插入了4個值。這是因為有兩個“python”,集合自動過濾了第2個"python” 。
注: 在string和link的命令中,可以通過range 來訪問string中的某幾個字符或某幾個元素
但,因為集合的無序性,無法通過下標或范圍來訪問部分元素.
因此想看元素,要么隨機先一個,要么全選
sadd key value1 value2
作用: 往集合key中增加元素
sadd命令在遇到數據己經存在時,會返回“0”,如果數據不存在則把數據插入再返回1。所以,這條命令可以通過返回的數字來判斷數據是否存在。
srem value1 value2
作用: 刪除集合中集為 value1 value2的元素
返回值: 忽略不存在的元素后,真正刪除掉的元素的個數
spop key
作用: 返回并刪除集合中key中1個隨機元素
隨機--體現了無序性
(spop會彈出/刪除key中的元素,可以用這個來抽獎,第一名抽出來,第二名,第三名...)
srandmember key
作用: 返回集合key中,隨機的1個元素.
(和spop不同,不會彈出/刪除key中的元素)
sismember key value
作用: 判斷value是否在key集合中
是返回1,否返回0
smembers key
作用: 返回集中中所有的元素
注意:
smembers 命令不會刪除數據。但是如果集合里的數據量極大,就應該慎重使用“獲取所有數據",因為這樣會導致系統的I/o資源瞬間耗盡
scard key
作用: 返回集合中元素的個數
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
集合的應用:
在工程中,Redis的集合一般有兩種用途:
( I )根據集合內數據不重復的特性實現去重并記錄信息。
(2 )利用多個集合計算交集、并集和差集。
假設,要做一個學生選課情況實時監控系統,則需要實時知道以下幾個數據:
( I )當前一共有多少學生至少選了一門課。
(2 )選了A課沒有選B 課的學生有多少。
(3 )既選了A課又選了B課的學生有多少。
( 4 ) A 、B兩門課至少選了一門的學生有多少。
使用集合可以輕易實現這樣的功能。每一門課作為一個集合,里面的值就是每一個學生的
學號,如圖5 -65 所示:
用python實現:
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")
“數據庫集合相關命令有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。