日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理解 redis 中的 集合对象类型

發(fā)布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解 redis 中的 集合对象类型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇我們來看看Redis五大類型中的第四大類型:集合類型,集合類型還是蠻有意思的,第一個是因為它算是只使用key的Dictionary簡易版,這樣說來的話,它就比Dictionary節(jié)省很多內(nèi)存消耗,第二個是因為它和C#中的HashSet是一個等同類型,廢話不多說,先看redis手冊,如下:

上面就是redis中的set類型使用到的所有方法,還是老話,常用的方法也就那么四個(CURD)。。。

一:常用方法

1. SAdd

這個方法毫無疑問,就是向集合里面添加數(shù)據(jù),比如下面這樣,我往fruits集合里面添加喜愛的水果。

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>

上面這個sadd你也看到了,我往集合里面成功添加了兩個元素,現(xiàn)在你可能不滿足這么簡單的添加,你或許想知道set這個集合在redis底層是使用什么來實現(xiàn)的,你可以用object encoding查看一下便知:

127.0.0.1:6379>?object?encoding?fruits "hashtable" 127.0.0.1:6379>?

看到了吧,底層是個 hashtable,現(xiàn)在閉上眼睛都能想到,肯定就是只用key的dictionary啦,對不對,如果你還有疑問的話,我還可以找到底層代碼給你看,好不啦???

有沒有看到dictAdd方法,而其中的第三個參數(shù)正好是Null。。。對應(yīng)著 *val 形參,????????。。。然后我再帶你看看dictAdd方法的定義。

好了,關(guān)于hashtable的實現(xiàn)理論,我在上一篇文章中也已經(jīng)說過了,這里就不再贅敘了。

2. SPOP,SMEMBERS

既然元素進來了,總不能不出來吧,這里的第一個 SPOP:移除并返回集合中的一個隨機元素,有一點奇怪的是,這種奇怪的方法其實在我們C#中的HashSet并沒有好辦法解決,就比如 這個隨機 就有點煩人了,下面這是我能想到的方法。

剛才隨便插了一句話,下面我們繼續(xù)SAdd,再SPop出來。

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>

這個方法確實還是蠻好的,起碼它是原子性操作,如果要我自己實現(xiàn)的話,起碼還是要10行左右代碼的。

3. SREM

既然說到了CURD,那怎么能少了D呢,它的功能定義就是:移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略,下面我隨便舉個例子,刪除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>

好了,常用的操作就那么幾個,是不是覺得好傻瓜哦。。。傻瓜就對了,方法是簡單的,關(guān)鍵你需要了解這個方法底層是如何實現(xiàn)的,這樣才能做到心里有數(shù)。

總結(jié)

以上是生活随笔為你收集整理的理解 redis 中的 集合对象类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。