我們來(lái)看看Redis五大類(lèi)型中的第四大類(lèi)型:“集合類(lèi)型”,集合類(lèi)型還是蠻有意思的,先看redis手冊(cè),如下:
![](/d/20211018/29fc10961e38864f1e937670a6bba14e.gif)
上面就是redis中的set類(lèi)型使用到的所有方法,還是老話,常用的方法也就那么四個(gè)(CURD)。。。
一: 常用方法
1. SAdd
這個(gè)方法毫無(wú)疑問(wèn),就是向集合里面添加數(shù)據(jù),比如下面這樣,我往fruits集合里面添加喜愛(ài)的水果。
127.0.0.1:6379> sadd fruits apple
(integer) 1
127.0.0.1:6379> sadd fruits banana
(integer) 1
127.0.0.1:6379> smembers fruits
1) "banana"
2) "apple"
127.0.0.1:6379>
![](/d/20211018/566dcb2a45e22db7b36bfe9a585c087e.gif)
上面這個(gè)sadd你也看到了,我往集合里面成功添加了兩個(gè)元素,現(xiàn)在你可能不滿足這么簡(jiǎn)單的添加,你或許想知道set這個(gè)集合在redis底層是使用什么來(lái)實(shí)現(xiàn)的,你可以用object encoding查看一下便知:
127.0.0.1:6379> object encoding fruits
"hashtable"
127.0.0.1:6379>
看到了吧,是hashtable這個(gè),看下底層代碼:
![](/d/20211018/b7b4918654c40ac7a10cdccaa638303b.gif)
有沒(méi)有看到dictAdd方法,而其中的第三個(gè)參數(shù)正好是Null。。。對(duì)應(yīng)著*val形參,然后我再帶你看看dictAdd方法的定義。
![](/d/20211018/14b4ec685974945c389ab3580e54d036.gif)
2. SPOP,SMEMBERS
既然元素進(jìn)來(lái)了,總不能不出來(lái)吧,這里的第一個(gè)SPOP:移除并返回集合中的一個(gè)隨機(jī)元素。
![](/d/20211018/71477da9175de5dd3fa0b766883f2dfc.gif)
剛才隨便插了一句話,下面我們繼續(xù)SAdd,再SPop出來(lái)。
127.0.0.1:6379> sadd fruits pear
(integer) 1
127.0.0.1:6379> sadd fruits grape
(integer) 1
127.0.0.1:6379> sadd fruits chestnut
(integer) 1
127.0.0.1:6379> smembers fruits
1) "grape"
2) "pear"
3) "banana"
4) "apple"
5) "chestnut"
127.0.0.1:6379> spop fruits
"apple"
127.0.0.1:6379> spop fruits
"chestnut"
127.0.0.1:6379> smembers fruits
1) "grape"
2) "pear"
3) "banana"
127.0.0.1:6379>
![](/d/20211018/8790580e88d2816131fbd02d95badd95.gif)
這個(gè)方法確實(shí)還是蠻好的,起碼它是原子性操作,如果要我自己實(shí)現(xiàn)的話,起碼還是要10行左右代碼的。
3. SREM
既然說(shuō)到了CURD,那怎么能少了D呢,它的功能定義就是:移除集合 key 中的一個(gè)或多個(gè) member 元素,不存在的 member 元素會(huì)被忽略,
下面我隨便舉個(gè)例子,刪除fruits中的pear。
127.0.0.1:6379> smembers fruits
1) "grape"
2) "pear"
3) "banana"
127.0.0.1:6379> srem fruits pear
(integer) 1
127.0.0.1:6379> smembers fruits
1) "grape"
2) "banana"
127.0.0.1:6379>
![](/d/20211018/2de834f6769611cb565bc30464dab931.gif)
您可能感興趣的文章:- Java集合類(lèi)知識(shí)點(diǎn)總結(jié)
- Java集合類(lèi)的組織結(jié)構(gòu)和繼承、實(shí)現(xiàn)關(guān)系詳解
- java集合類(lèi)源碼分析之Set詳解
- Java的Hibernate框架中集合類(lèi)數(shù)據(jù)結(jié)構(gòu)的映射編寫(xiě)教程
- Java常用工具類(lèi)匯總 附示例代碼