set集合獲取值 Redis系列 資料型別set

2021-10-17 23:50:25 字數 1742 閱讀 6746

先給大家提出乙個新的儲存需求:儲存大量的資料,在查詢方面提供更高的效率 。來請出我們今天要說的主角set。

可能大家會有個疑問,難道list不能滿足嗎?

list也可以存大量資料而且還有順序,還能使用索引訪問,但是list 的儲存結構是鍊錶的儲存結構。而鍊錶的儲存效率是很低的,當你存大量資料,但是讀取的效率慢。這樣就違背了redis提高效率的初衷。所以我們就需要乙個新的儲存結構。能夠儲存大量的資料,高效的內部儲存機制,便於高效查詢 。

以下我們就開始介紹這種新的資料結構set。

與hash儲存結構完全相同,僅儲存鍵,不儲存值(nil),並且值是不允許重複的。將hash值的field欄位變成我需要存的值,將value欄位不儲存,這樣就可以儲存大量的資料,而且底層採用的是hash表的資料,使查詢也就更加快速。(如下圖)

set 型別資料的基本操作

新增資料

saddkey member1 [member2]

獲取全部資料

smemberskey

刪除資料

獲取集合資料總量

scardkey

判斷集合中是否包含指定資料

set 型別資料的擴充套件操作

隨機獲取集合中指定數量的資料

srandmemberkey [count]

 隨機獲取集合中的某個資料並將該資料移出集合

spopkey [count]

2、 擴大業務圈或交際圈,比如你們有多少個公共的好友,你的好友還關注了誰等等。這就涉及到合集,並集,差集。

求兩個集合的交、並、差集

sinterkey1 [key2]

sunionkey1 [key2]

sdiffkey1 [key2]

求兩個集合的交、並、差集並儲存到指定集合中

sinterstoredestination key1 [key2]

sunionstoredestination key1 [key2]

sdiffstoredestination key1 [key2]

將指定資料從原始集合中移動到目標集合中

smovesource destination member

set 型別資料操作的注意事項

set 型別不允許資料重複,如果新增的資料在 set 中已經存在,將只保留乙份

set 雖然與hash的儲存結構相同,但是無法啟用hash中儲存值的空間。

Redis系列 6 集合(Set)結構

集合間的操作 內部編碼 適合場景 redsi裡的集合叫set,和其他語言有一些不同。在資料結構上,集合裡的資料原則上是沒有先後的。就像去超市買了一大袋東西,袋子就是乙個集合,裡面的東西也沒什麼必然的聯絡吧?下面所有描述裡 都是必需引數,是可選引數 設定值sadd 可以新新增乙個集合並一次新增多個元素...

redis集合set操作

sadd key value1 value2 向集合中增加元素 smembers key 檢視集合中的元素,由於集合的無序性,檢視的元素可能和插入式順序不一樣 srem value1 value2.刪除集合中名為value1,value2.的元素 返回值 忽略不存在的元素,返回真正刪除元素的個數 s...

redis 有序set集合

我們光set集合中如果儲存元素就直接 小明,小紅,小張有序set集合則是每個元素都需要手動賦予乙個分數 5000 小明,1000 小紅,500 小張而有序set集合預設是從小到大排序的 我們發現當集合倒序時就像是乙個排行榜 5000 小明 1000 小紅 500 小張 所以有序set常常用來做排行榜...