闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳婀遍埀顒傛嚀鐎氼參宕崇壕瀣ㄤ汗闁圭儤鍨归崐鐐烘偡濠婂啰绠荤€殿喗濞婇弫鍐磼濞戞艾骞堟俊鐐€ら崢浠嬪垂閸偆顩叉繝闈涱儐閻撴洘绻涢崱妤冪缂佺姵濞婇弻宥堫檨闁告挻鐟х划璇差吋婢跺﹦锛熼梻渚囧墮閸楁洟宕堕澶嬫櫖濠电姴锕ら幊鎰版倿婵傚憡鐓熼幖鎼灣缁夌敻鏌涚€b晝鍔嶇紒鍌氱Т楗即宕奸悢鍝勫箰闂備礁鎲¢崝鎴﹀礉瀹€鍕劦妞ゆ帒鍊归弳顒侇殽閻愯尙绠婚柛鈺佸瀹曟ǹ顦寸紒鐘宠壘椤啴濡堕崱妤€顫囬梺绋匡攻濞茬喎顕i幖浣哥婵犫偓鍨归柊锝呯暦閹偊妾梻濠庡墻閸撶喖寮婚悢纰辨晩闁伙絽鏈崳鏉款渻閵堝啫鐏俊顐㈠暙閻g兘鎮㈤悡骞晠鏌曟径鍫濃偓鏇⑺夊鑸电厽闁绘柨鎽滈惌濠勭磼缂佹ê娴€规洘宀搁獮鎺楀箻閸撲胶妲囨繝娈垮枟閿曗晠宕滃☉銏╂晣婵炲樊浜濋埛鎴︽煙缁嬪灝顒㈤柣鎾卞劦閺屾稑螣閼姐倗鐓夐悗瑙勬礃閸ㄥ潡鐛Ο鑲╃<婵☆垳绮悵鏍⒒娓氣偓閳ь剛鍋涢懟顖涙櫠閹绢喗鐓欐い鏇楀亾缂佺姵鐗犲顐﹀箻缂佹ê浜归梺鑲┾拡閸擄箓宕ョ€n偂绻嗛柣鎰典簻閳ь剚鐗曡灋濞达綀顫夐崣蹇涙煏閸繍妯堥柡浣革躬閺岋繝宕堕妷銉т痪闂佹娊鏀辩敮鎺楁箒闂佹寧绻傞幊蹇涘箟閸濄儳纾煎璺鸿嫰閸斿菐閸パ嶈含妞ゃ垺娲熸慨鈧柍銉ュ帠濞n噣姊绘担绛嬪殐闁哥姵宀稿畷鎴﹀Χ婢跺﹥鐎梺鍛婂姦閸犳牜澹曢崗鍏煎弿婵☆垰娼¢崫娲煟閹垮嫮绉慨濠勭帛閹峰懘宕妷顬劌鈹戦埥鍡椾簻婵炵》绻濋獮鍐倷閻戞ɑ娅囬梺绋挎湰缁嬫垶绂嶅Δ鍛拺闂傚牊渚楀Σ鎾煛閸涱喚鐭掗柟顕嗙節閹垽宕楅懖鈺佸箰闂備焦鎮堕崕顕€寮插☉娆戭浄婵犲﹤鐗婇悡鍐喐濠婂牆绀堟繛鍡楅獜閼板潡姊洪鈧粔鎾倿閸偁浜滈柟鍝勭Х閸忓矂鏌涢悢鍝ュ弨闁哄瞼鍠栧畷娆撳Χ閸℃浼�     婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻娑樷槈濮楀牊鏁鹃梺鍛婄懃缁绘﹢寮婚敐澶婎潊闁绘ê妯婂Λ宀勬⒑鏉炴壆顦﹂柨鏇ㄤ邯瀵鍨鹃幇浣告倯闁硅偐琛ラ埀顒€纾鎰版⒒閸屾艾鈧悂宕戦崱娑樺瀭闂侇剙绉存闂佸憡娲﹂崹浼村礃閳ь剟姊洪棃娴ゆ盯宕ㄩ姘瑢缂傚倸鍊搁崐宄懊归崶鈺冪濞村吋娼欑壕瑙勭節闂堟侗鍎忛柦鍐枛閺屻劌鈹戦崱鈺傂ч梺鍝勬噺閻擄繝寮诲☉妯锋闁告鍋為悘宥夋⒑閸︻厼鍘村ù婊冪埣楠炲啫螖閸愨晛鏋傞梺鍛婃处閸撴盯藝閵娾晜鈷戠紓浣股戦幆鍫㈢磼缂佹ḿ绠撴い鏇稻缁绘繂顫濋鐐扮盎闂佽崵鍋炵粙鍫ュ焵椤掆偓閸樻牗绔熼弴鐐╂斀闁绘劖娼欓悘锔姐亜韫囧骸宓嗘鐐差儔閺佸啴鍩€椤掑倸顥氶柛褎顨嗛悡娑㈡煕閵夈垺娅呴柡瀣⒒缁辨帡鎮╅懡銈囨毇闂佸搫鐬奸崰鎾诲焵椤掍胶鈯曞畝锝呮健楠炲﹪宕橀鐣屽幗闂婎偄娲ら敃銉モ枍婵犲洦鐓涚€光偓鐎n剛袦濡ょ姷鍋炲玻鍧楀焵椤掑嫭娑ч柟璇х節瀹曟艾鈽夐姀鈾€鎷洪梺鍛婄箓鐎氼厼锕㈡导瀛樼厽闁冲搫锕ら悘锕傛煟濞戝崬娅嶇€规洖鐖奸、妤呭焵椤掑倻鐭嗛柛宀€鍋為悡鏇熺節闂堟稑顏╅柛鏃€绮撻弻锟犲川椤撴粌浠┑顔硷功缁垶骞忛崨瀛樻優闁荤喐澹嗛濂告⒒娴g儤鍤€闁硅绻濋獮鍐磼閻愵亖鍋撴笟鈧浠嬪Ω閵壯呯嵁濠电姷鏁告慨瀵糕偓娑掓櫇缁辩偞鎯旈埦鈧弨浠嬫煟閹邦剙绾ч柍缁樻礀闇夋繝濠傚閻帗顨ラ悙鏉戠伌闁硅櫕绮撻幃娆撴焻濞戞氨娉块梻鍌欐祰椤鐣峰Ο琛℃灃婵炴垶鐟ч々閿嬬節婵犲倸鏆婇柡鈧禒瀣厓闁宠桨绀侀弳鐐烘煏閸ャ劎绠栭柟渚垮妽缁绘繈宕ㄩ鍛摋闂備胶鎳撳鍫曞箰閸愯尙鏆﹂柣鏃傗拡閺佸洭鏌i弮鍋冲綊寮查幖浣光拺閻犲洤寮堕崬澶嬨亜椤愩埄妲搁悡銈夋煟閺傛崘鑽$紓鍌涙皑閹叉悂寮崼娑掑亾娴e壊娼╅悹杞扮秿閵娾晜鐓ラ柡鍌氱仢閳锋棃鏌i敃鈧悧鎾愁潖濞差亜绠归柣鎰絻婵矂姊洪崨濠冪叆缂佸鎸抽崺銏狀吋婢跺⿴娼婇梺闈涚墕濡矂骞忓ú顏呯厽闁绘ê鍘栭懜顏堟煕閺傝儻瀚伴柍璇茬Ч楠炲洭鎮ч崼銏犲箥闂備礁鎲¢崹顖炲磹閺嶎偀鍋撳鐐

45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:Redis集合类型的常用命令的详细介绍

Redis集合类型的常用命令的详细介绍

2016-10-22 17:25:48 来源:www.45fan.com 【

Redis集合类型的常用命令的详细介绍

集合类型介绍

集合类型也是体现redis一个比较高价值的一个类型了。因为Redis的集合类型,所以我们可以很容易的在Redis中执行差集运算、交集运算、并集运算。

首先我们先介绍一下集合类型和列表类型的区别,其实学过面向对象的语言的同学应该都能猜到这些类型有什么不同。

①集合类型和列表类型还是都能存储2^32-1个字符串

②集合类型是无序的,列表类型是有序的

③集合类型是唯一的,列表类型的值是不唯一的

下面我们一起来看一下语法。

1、增加删除元素命令

sadd key member [member ...]
srem key member [member ...]

sadd命令是用来向集合中增加元素的,当然根据前面的学习经验,如果集合不存在,肯定是会自动创建的。但是这里有点需要注意的是,如果元素已存在,那么他会忽略而不会覆盖。返回值是成功加入元素的数量(忽略的元素不算)。

srem命令也是一样,删除元素,如果元素存在才会删除成功,返回值是成功删除的元素的个数。

2、获得集合中的所有元素

smembers key

3、判断元素是否在集合中

sismember key member

这个判断操作的时间复杂度是O(1),无论集合中的元素有多少,这个命令始终都很很快的返回结果。存在返回1,不存在或没有这个键的时候都返回0 。

4、集合间运算

sdiff key [key ...]
sinter key [key ...]
sunion key [key ...]

这三个命令才能使Redis大显身手!

我们先准备点测试数据。

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 3 4 5
(integer) 3
127.0.0.1:6379> smembers setA 
1) "1"
2) "2"
3) "3"
127.0.0.1:6379>

(1)下面我们来介绍sdiff命令,这个命令实际上是差集运算。

集合A与集合B的差值运算表示为A-B,代表所有属于A且不属于B的元素构成的集合。这个命令同时支持传入多个键,意思是A与B先做差集运算,然后结果再与C做差集运算。

127.0.0.1:6379> sdiff setA setB
1) "1"
127.0.0.1:6379> sdiff setB setC
1) "2"
127.0.0.1:6379> sdiff setA setB setC
1) "1"

(2)接下来我们介绍sinter命令,这个命令用来对多个集合执行交集运算。集合A与集合B的交集表示为A∩B,即所有属于A且属于B的元素构成的集合。这个命令也同时支持传入多个键,也是一样,一步一步的做交集运算。

127.0.0.1:6379> sinter setA setB
1) "2"
2) "3"
127.0.0.1:6379> sinter setA setB setC
1) "3"

(3)最后我们介绍并集运算命令sunion。集合A与集合B的并集意思是既属于A也属于B的集合。同样支持多个键传入。

127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> sunion setA setB setC
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

5、获得集合中元素的个数

scard key
127.0.0.1:6379> scard setA
(integer) 3
127.0.0.1:6379> scard setB
(integer) 3

这条命令用来获取集合中元素的个数。同样集合不存在返回0 。

6、进行集合运算并将结果存储

sdiffstore destination key [key ...]
sinterstore destination key [key ...]
sunionstore destination key [key ...]

这里在所有的集合命令之后加了个store,很清楚就是存储的意思了。destination就是目的地,也就是我们要存储的键名。

例:

127.0.0.1:6379> sunionstore setAll setA setB setC
(integer) 5
127.0.0.1:6379> smembers setAll
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

7、随机获得集合中的元素

srandmember key [count]

这个命令用来随机从集合中获取一个元素,count参数用来一词获取多个元素,根据count的正负有不同的意义。

(1)当count为正数时,获取count个不重复的元素,如果count大于所有值的个数,则返回全部元素。

(2)负值时,获得|count|个元素,但有可能相同。

其实这个随机并不是非常随机,因为实际上redis的集合用的是散列的存储结构,有兴趣的读者可以自己深入研究一下。

127.0.0.1:6379> srandmember setA 1
1) "1"
127.0.0.1:6379> srandmember setA 2
1) "3"
2) "2"
127.0.0.1:6379> SRANDMEMBER setA 5
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SRANDMEMBER setA -2
1) "3"
2) "3"

8、从集合中弹出一个元素

spop key

之前我们也看过lpop与rpop,那是从列表中弹出,但是集合是无序的,所以spop是随机弹出。 (弹出的元素被删除,不在原来的集合中)

127.0.0.1:6379> spop setA 1
1) "2"
127.0.0.1:6379> smembers setA
1) "1"
2) "3"

下面我们来举例一个集合的具体应用。

在我们文章存储的时候有个标签tag,这个我们在关系数据库的时候都需要使用中间表关联。但是在Redis中,我们可以很方便的处理。

对每篇文章,我们使用一个post:文章ID:tags的键,类型为集合,存储一篇文章所属的tags,这样本身关系型数据库我们需要关联文章表、标签表、中间关系表三个表的复杂操作,在Redis中就很好处理了。

有时候我们还需要获取指定标签的所有文章,我们还需要增加一类的键,即tag:标签名称:posts的集合类型键,存储每个标签的文章ID集合,这样我们每次想要获取所有属于某个标签的文章列表的时候也不用像关系数据库那样关联那么多表,而是直接通过键就可以直接获得了。

而在我们想要获取比如同时属于java和redis标签的文章时,我们只需要对tag:java:poststag:redis:posts做交集运算就OK了,是不是很方便呢?

总结

以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。


本文地址:http://www.45fan.com/a/question/79885.html
Tags: Redis 类型 集合
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部