Redis数据类型--集合类型
夫陶公清風(fēng)千古,余又何人,敢稱庶幾
文章目錄
- 介紹
- 一、基本命令
- 1.增加/刪除元素
- 2.獲得集合中的所有元素
- 3.判斷元素是否在集合中
- 4.集合間運算
- 二、命令進階
- 1.獲取集合中元素個數(shù)
- 2.進行集合運算并鍵結(jié)果存儲
- 3.隨機獲得集合中的元素
- 4.從集合中彈出一個元素
介紹
一、基本命令
1.增加/刪除元素
SADD key member [member …] // 添加元素
特性:
- 用來向集合中增加一個或多個元素,鍵不存在自動創(chuàng)建。
- 集合中不能有相同元素,加入相同元素會被忽略掉。
- 返回值是成功加入集合的元素數(shù)量(忽略掉的元素不算)
SREM key member [member …] // 刪除元素
特性:
- 從集合中刪除一個或多個元素
- 返回值是此次刪除成功的元素個數(shù)
- 不存在的元素會被忽略掉
案例:
- SADD
- SREM
實踐:使用Java操作Redis數(shù)據(jù)庫:SADD 、SREM
@Testpublic void test() {Jedis jedis = new Jedis("127.0.0.1", 6379);Long a = jedis.sadd("letters", new String[]{"a"});Long a_b_c = jedis.sadd("letters", new String[]{"a", "b", "c"});System.out.print("添加元素:a" + " ");System.out.println("返回值:" + a);System.out.print("添加元素:a、b、c" + " ");System.out.println("返回值:" + a_b_c);Long rm_a = jedis.srem("letters", new String[]{"a"});Long rm_a_b_c = jedis.srem("letters", new String[]{"a", "b", "c"});Long rm_d = jedis.srem("letters", "d");System.out.print("刪除元素:a" + " ");System.out.println("返回值:" + rm_a);System.out.print("刪除元素:a、b、c" + " ");System.out.println("返回值:" + rm_a_b_c);System.out.print("刪除元素:d" + " ");System.out.println("返回值:" + rm_d);} 添加元素:a 返回值:1 添加元素:a、b、c 返回值:2 刪除元素:a 返回值:1 刪除元素:a、b、c 返回值:2 刪除元素:d 返回值:02.獲得集合中的所有元素
SMEMBERS key
特性:
- 獲得集合中的所有元素
- key不存在時會返回空
3.判斷元素是否在集合中
SISMEMBER key member
特性:
- 無論集合中有多少個元素,時間復(fù)雜度都為:O(1)
- member存在時返回1,不存在時返回0
- key不存在時返回0
- 一次只能判斷一個元素,否則會報錯:(error) ERR wrong number of arguments for 'sismember' command
4.集合間運算
SDIFF key [key …] // 差集運算
特性:
- SDIFF 命令用來對多個集合執(zhí)行差集運算。
- 集合A與集合B的差集表示為A-B,代表所有屬于A且不屬于B的元素構(gòu)成的集合 (如下圖所示),且A-B={x|x∈A且x∈B}。
- SDIFF 命令支持同時傳入多個鍵(key),當(dāng)有3個以上時,計算順序是先計算前面兩個,再把計算結(jié)果與后面一個計算,依此類推。
案例:
首先我們定義3個集合:setA:1 2 3 ;setB:2 3 4 ;setC:2 3,當(dāng)A與B執(zhí)行差集運算A-B時因為在B中存在2 3 ,不存在1,所以結(jié)果為1,然后我們再將A-B計算結(jié)果1與C集合進行差集運算(A-B)-C,也就是1與2 3 運算,所以計算結(jié)果為1。
127.0.0.1:6379> sadd setA 1 2 3 (integer) 3 127.0.0.1:6379> sadd setB 2 3 4 (integer) 3 127.0.0.1:6379> sdiff setA setB 1) "1" 127.0.0.1:6379> sadd setC 2 3 (integer) 2 127.0.0.1:6379> sdiff setA setB setC 1) "1"SINTER key [ key …] // 交集運算
特性:
- 用來對多個集合進行交集運算
- 集合A與集合B表示A∩B,代表所有屬于A且屬于B的元素構(gòu)成的集合,即A∩B={x|x∈A且x∈B}。
- 此命令支持同時傳入多個鍵,用法同交集運算。
案例:
127.0.0.1:6379> smembers setA 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> smembers setB 1) "2" 2) "3" 3) "4" 127.0.0.1:6379> sinter setA setB 1) "2" 2) "3"SUNION key [key …] // 并集運算
特性:
- SUNION 命令用來對多個集合執(zhí)行并集運算
- 集合A與集合B的并集表示A∪B,代表所有屬于A或?qū)儆贐的元素構(gòu)成的集合,即A∪B={x|x∈A或x∈B}。
- 此命令支持同時傳入多個鍵,用法同交集運算。
案例:
127.0.0.1:6379> smembers setA 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> smembers setB 1) "2" 2) "3" 3) "4" 127.0.0.1:6379> sunion setA setB 1) "1" 2) "2" 3) "3" 4) "4" 127.0.0.1:6379> smembers setC 1) "2" 2) "3" 127.0.0.1:6379> sunion setA setB setC 1) "1" 2) "2" 3) "3" 4) "4"二、命令進階
1.獲取集合中元素個數(shù)
SCARD key
此命令用來獲取集合中的元素個數(shù),如果鍵存在,那么正常返回集合元素個數(shù),不存在則返回0.
7.0.0.1:6379> sadd nums 1 2 3 4 5 6 7 8 9 0 (integer) 10 127.0.0.1:6379> smembers nums1) "0"2) "1"3) "2"4) "3"5) "4"6) "5"7) "6"8) "7"9) "8" 10) "9" 127.0.0.1:6379> scard nums (integer) 10 127.0.0.1:6379> scard other //other鍵不存在,返回 0 (integer) 02.進行集合運算并鍵結(jié)果存儲
下面三個命令和去掉后綴STORE的用法相同,只是以下3個命令會將計算結(jié)果存儲到鍵destination中。
SDIFFSTORE destination key [key …]
SINTERSTORE destination key [key …]
SUNIONSTORE destination key [key …]
上面三個命令的用法和之前的SDIFF SINTER SUNION 用法相同,這里不再詳細介紹。
127.0.0.1:6379> sadd setA 1 2 3 (integer) 3 127.0.0.1:6379> sadd setB 2 3 4 (integer) 3 127.0.0.1:6379> sadd setC 4 5 6 (integer) 3 127.0.0.1:6379> sdiffstore AB setA setB //將集合setA與集合setB的計算結(jié)果存儲到集合AB中 (integer) 1 127.0.0.1:6379> keys * 1) "nums" 2) "setB" 3) "setA" 4) "setC" 5) "AB" 127.0.0.1:6379> smembers AB 1) "1"3.隨機獲得集合中的元素
SRANDMEMBER key [count]
特性:
- SRANDMEMBER 命令用來隨機從集合中隨機獲取一個元素(沒有count參數(shù)情況下)。
- 有count參數(shù)可以一次隨機獲得多個元素
- 當(dāng)count為整數(shù)時,獲取到的是count個不重復(fù)的元素
- 當(dāng)count為整數(shù)且大于集合中的元素個數(shù)時,會返回集合中的全部元素
- 當(dāng)count為負數(shù)時,會隨機從集合里獲得|count|個元素,且這些元素可能相同。
案例:
127.0.0.1:6379> sadd num 1 2 3 4 5 6 7 8 9 (integer) 9 127.0.0.1:6379> smembers num 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6" 7) "7" 8) "8" 9) "9" 127.0.0.1:6379> srandmember num //隨機獲取一個元素 "4" 127.0.0.1:6379> srandmember num //隨機獲取一個元素 "9" 127.0.0.1:6379> srandmember num 2 //隨機獲取2個元素 帶參數(shù) 1) "5" 2) "7" 127.0.0.1:6379> srandmember num 3 //隨機獲取3個元素 帶參數(shù) 1) "2" 2) "7" 3) "4" 127.0.0.1:6379> srandmember num 999 //count參數(shù)大于集合中的元素,獲得全部元素 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6" 7) "7" 8) "8" 9) "9" 127.0.0.1:6379> srandmember num -5 //count參數(shù)為負數(shù),獲取絕對值個元素,這些元素可能相同 1) "8" 2) "8" 3) "6" 4) "8" 5) "4" 127.0.0.1:6379> srandmember num -9 1) "8" 2) "2" 3) "4" 4) "8" 5) "9" 6) "3" 7) "3" 8) "9" 9) "4" 127.0.0.1:6379> srandmember num -11 // count負值大于集合中所有元素1) "8"2) "3"3) "4"4) "1"5) "6"6) "2"7) "2"8) "1"9) "4" 10) "6" 11) "4"4.從集合中彈出一個元素
SPOP key
此命令的作用是從集合左邊彈出(刪除)一個元素,然后返回元素的值,由于集合無序,所以彈出的元素是隨機
7.0.0.1:6379> sadd nums 1 2 3 4 5 6 7 8 (integer) 8 127.0.0.1:6379> smembers nums 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6" 7) "7" 8) "8" 127.0.0.1:6379> spop nums "3" 127.0.0.1:6379> spop nums "5" 127.0.0.1:6379> spop nums "1"注:從上面的案例結(jié)果中可以看出彈出的元素是隨機的。
Redis中文官方網(wǎng)站:http://www.redis.cn
未完待續(xù),持續(xù)更新中...
總結(jié)
以上是生活随笔為你收集整理的Redis数据类型--集合类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: angular图片上传
- 下一篇: 一条SQL语句查询当前数据库下有多少张表