Redis Redis實戰(集合型別)

2021-07-24 11:36:34 字數 2933 閱讀 1943

集合型別是redis提供了一種內建資料型別,集合與列表相反,集合中的元素沒有順序,並且每個元素都是唯一的。

集合型別底層用雜湊表實現,效能非常好,同時,集合還支援數學意義上的操作:交集、並集、差集運算。

命令

sadd key member1 member2...    #新增元素

srem key member1 member2... #移除元素

smembers key

#獲取集合中所有元素

sismember key member #判斷是否為集合中的元素

sdiff key1 key2.. #計算差集

sinter key1 key2.. #計算交集

sunion key1 key2.. #計算並集

scard key

#獲取集合中元素的個數

#集合運算 並儲存結合到新的集合

sdiffstore destination key1 key2...

sinterstore destination key1 key2...

sunionstore destination key1 key2...

srandmember key count #隨機獲取集合中count個元素, count為負值時可能重複獲取,count為整數時不會獲取重複的元素,獲取個數都為|count|

spop key

#從集合中彈出乙個元素

示例
127.0

.0.1:6379> sadd s1 a b c

(integer) 3

127.0

.0.1:6379> smembers s1

1) "b"

2) "c"

3) "a"

127.0

.0.1:6379> srem s1 a

(integer) 1

127.0

.0.1:6379> smembers s1

1) "b"

2) "c"

127.0

.0.1:6379> sismember s1 b

(integer) 1

127.0

.0.1:6379> scard s1

(integer) 2

127.0

.0.1:6379> sadd s2 b c d

(integer) 3

127.0

.0.1:6379> sadd s3 d e f

(integer) 3

127.0

.0.1:6379> sdiff s1 s2 s3

(empty list or

set)

127.0

.0.1:6379> sinter s1 s2

1) "b"

2) "c"

127.0

.0.1:6379> sunion s1 s2 s3

1) "d"

2) "b"

3) "c"

4) "f"

5) "e"

127.0

.0.1:6379> sdiffstore s4 s1 s2

(integer) 0

127.0

.0.1:6379> smembers s4

(empty list or

set)

127.0

.0.1:6379> sinterstore s5 s1 s2

(integer) 2

127.0

.0.1:6379> smembers s5

1) "b"

2) "c"

127.0

.0.1:6379> sunionstore s6 s1 s3 s2

(integer) 5

127.0

.0.1:6379> smembers s6

1) "c"

2) "f"

3) "e"

4) "d"

5) "b"

127.0

.0.1:6379> srandmember s6 2

1) "f"

2) "c"

127.0

.0.1:6379> spop s6 2

1) "e"

2) "b"

127.0

.0.1:6379>

實現方式為:

ket =post:articleid:tags
集合非常適合對標籤進行單獨操作,可以直接使用saddsrem命令方便的進行操作。

另外,值得一提的是,在某些情況下,可能是對標籤進行整體編輯而不是單個編輯,對於這種情況就沒有發揮集合的優勢,可以直接使用字串來完成。

這樣的需求如果用關係型資料庫來實現,就需要三張表:文章表,標籤表,標籤文章關係表,並且需要通過乙個join查詢來得到結果,當資料量比較大時,效率很低,而且不易於維護。

如果使用redis來實現,那麼只需要提供乙個這樣的資料結構即可:

#對每乙個標籤提供乙個這樣的集合

tag:type:posts

在該集合中儲存對應的文章id

$articleids

= smember tag:redis:post

loop

$articleids

$articlecontext

= hget post:articleid title

為什麼要使用Redis? Redis實戰經驗

序言,從一張思維導圖開始,慢慢介紹我自己關於redis的實戰經驗 現在很多網際網路應用的服務端都使用到了redis,到底大家為什麼要用redis呢?redis有很多特性,比如高效能 高可用 資料型別豐富 易於擴充套件 可持久化 原子性等等,我覺得其中的 高效能 和 資料型別豐富 是最具決定性的,分析...

集合類 陣列

一.陣列類 nsarray 不可變陣列,即 物件建立好以後,陣列中的元素個數不能變化.nsmutablearray 可變陣列,物件建立好以後元素個數可以變化,陣列中的元素可以靈活的增刪改.nsarray初始化方法 nsarray names nsarray alloc initwithobjects...

集合工具類

collections 多數都是靜態類,由類名呼叫 sort max min reverse copy collections.binarysearch list,25 二分查詢法針對的是公升序排序的集合,如果沒有排序,就不能用二分查詢法,找到了就返回索引。一般與sort聯用。先sort,在二分查詢...