這篇文章主要講解了“redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作”吧!
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)頁(yè)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、奉節(jié)網(wǎng)站維護(hù)、網(wǎng)站推廣。
一個(gè)String類型的key、value最大上限均是512M。其基本結(jié)構(gòu)如下:基本語(yǔ)法
Redis中字符串的基本操作如下表所示。
使用場(chǎng)景-統(tǒng)計(jì)用戶上線天數(shù)Bitmap 對(duì)于一些特定類型的計(jì)算非常有效。
假設(shè)現(xiàn)在我們希望記錄自己網(wǎng)站上的用戶的上線頻率,比如說(shuō),計(jì)算用戶 A 上線了多少天,用戶 B 上線了多少天,諸如此類,以此作為數(shù)據(jù),從而決定讓哪些用戶參加 beta 測(cè)試等活動(dòng) —— 這個(gè)模式可以使用 SETBIT 和 BITCOUNT 來(lái)實(shí)現(xiàn)。
比如說(shuō),每當(dāng)用戶在某一天上線的時(shí)候,我們就使用 SETBIT ,以用戶名作為 key ,將那天所代表的網(wǎng)站的上線日作為 offset 參數(shù),并將這個(gè) offset 上的為設(shè)置為 1 。
舉個(gè)例子,如果今天是網(wǎng)站上線的第 100 天,而用戶 peter 在今天閱覽過(guò)網(wǎng)站,那么執(zhí)行命令 SETBIT peter 100 1 ;如果明天 peter 也繼續(xù)閱覽網(wǎng)站,那么執(zhí)行命令 SETBIT peter 101 1 ,以此類推。
當(dāng)要計(jì)算 peter 總共以來(lái)的上線次數(shù)時(shí),就使用 BITCOUNT 命令:執(zhí)行 BITCOUNT peter ,得出的結(jié)果就是 peter 上線的總天數(shù)。
操作 | 語(yǔ)法 | 說(shuō)明 |
---|---|---|
BLPOP | BLPOP key [key …] timeout | BLPOP 是列表的阻塞式(blocking)彈出原語(yǔ).它是 LPOP 命令的阻塞版本,當(dāng)給定列表內(nèi)沒(méi)有任何元素可供彈出的時(shí)候,連接將被 BLPOP 命令阻塞. |
BRPOP | BRPOP key [key …] timeout | 它是 RPOP 命令的阻塞版本,當(dāng)給定列表內(nèi)沒(méi)有任何元素可供彈出的時(shí)候,連接將被 BRPOP 命令阻塞. |
BRPOPLPUSH | BRPOPLPUSH source destination timeout | BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,當(dāng)給定列表 source 不為空時(shí), BRPOPLPUSH 的表現(xiàn)和 RPOPLPUSH 一樣。當(dāng)列表 source 為空時(shí), BRPOPLPUSH 命令將阻塞連接,直到等待超時(shí),或有另一個(gè)客戶端對(duì) source 執(zhí)行 LPUSH 或 RPUSH 命令為止。 |
LINDEX | LINDEX key index | 返回列表 key 中,下標(biāo)為 index 的元素。 |
LINSERT | LINSERT key BEFORE/AFTER pivot value | 將值 value 插入到列表 key 當(dāng)中,位于值 pivot 之前或之后。當(dāng) pivot 不存在于列表 key 時(shí),不執(zhí)行任何操作。當(dāng) key 不存在時(shí), key 被視為空列表,不執(zhí)行任何操作。如果 key 不是列表類型,返回一個(gè)錯(cuò)誤。 |
LLEN | LLEN key | 返回列表 key 的長(zhǎng)度。 |
LPOP | LPOP key | 移除并返回列表 key 的頭元素。 |
LPUSH | LPUSH key value [value …] | 將一個(gè)或多個(gè)值 value 插入到列表 key 的表頭 |
LPUSHX | LPUSHX key value | 將值 value 插入到列表 key 的表頭,當(dāng)且僅當(dāng) key 存在并且是一個(gè)列表 |
LRANGE | LRANGE key start stop | 返回列表 key 中指定區(qū)間內(nèi)的元素,區(qū)間以偏移量 start 和 stop 指定 |
LREM | LREM key count value | 根據(jù)參數(shù) count 的值,移除列表中與參數(shù) value 相等的元素 |
LSET | LSET key index value | 將列表 key 下標(biāo)為 index 的元素的值設(shè)置為 value |
LTRIM | LTRIM key start stop | 對(duì)一個(gè)列表進(jìn)行修剪(trim),就是說(shuō),讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除。舉個(gè)例子,執(zhí)行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三個(gè)元素,其余元素全部刪除。 |
RPOP | RPOP key | 移除并返回列表 key 的尾元素 |
RPOPLPUSH | RPOPLPUSH source destination | 命令 RPOPLPUSH 在一個(gè)原子時(shí)間內(nèi),執(zhí)行以下兩個(gè)動(dòng)作:將列表 source 中的最后一個(gè)元素(尾元素)彈出,并返回給客戶端。將 source 彈出的元素插入到列表 destination ,作為 destination 列表的的頭元素。 |
RPUSH | RPUSH key value [value …] | 將一個(gè)或多個(gè)值 value 插入到列表 key 的表尾(最右邊) |
RPUSHX | RPUSHX key value | 將值 value 插入到列表 key 的表尾,當(dāng)且僅當(dāng) key 存在并且是一個(gè)列表。和 RPUSH 命令相反,當(dāng) key 不存在時(shí), RPUSHX 命令什么也不做。 |
舉一些例子:
棧
127.0.0.1:6379> lpush stack "a" "b" "c" (integer) 3 127.0.0.1:6379> rpop stack "a" 1 2 3 4
隊(duì)列
127.0.0.1:6379> lpush queue "a" "b" "c" (integer) 3 127.0.0.1:6379> lpop queue "c" 1 2 3 4 5
BLPOP
127.0.0.1:6379> exists job (integer) 0 127.0.0.1:6379> blpop job 5 #一直阻塞到5s超時(shí) (nil) (5.03s) 1 2 3 4 5
LINDEX
127.0.0.1:6379> lpush myjob "my" "job" "is" "iter" (integer) 4 127.0.0.1:6379> lindex myjob -1 "my" 1 2 3 4
存儲(chǔ)的是一個(gè)field與value的映射表,即存儲(chǔ)的是一個(gè)Map,每一條數(shù)據(jù)可以看做是key-field-value的格式,field-value對(duì)應(yīng)的是Map的一個(gè)鍵值對(duì)。
使用場(chǎng)景-存儲(chǔ)社交關(guān)系
比如新浪的關(guān)注列表, 粉絲列表都是由hash實(shí)現(xiàn)的。
操作 | 語(yǔ)法 | 說(shuō)明 |
---|---|---|
SADD | SADD key member [member …] | 將一個(gè)或多個(gè) member 元素加入到集合 key 當(dāng)中,已經(jīng)存在于集合的 member 元素將被忽略. |
SCARD | SCARD key | 返回集合 key 的基數(shù)(集合中元素的數(shù)量). |
SDIFF | SDIFF key [key …] | 返回一個(gè)集合的全部成員,該集合是所有給定集合之間的差集. |
SDIFFSTORE | SDIFFSTORE destination key [key …] | 這個(gè)命令的作用和 SDIFF 類似,但它將結(jié)果保存到 destination 集合,而不是簡(jiǎn)單地返回結(jié)果集. |
SINTER | SINTER key [key …] | 返回一個(gè)集合的全部成員,該集合是所有給定集合的交集. |
SINTERSTORE | SINTERSTORE destination key [key …] | 這個(gè)命令類似于 SINTER 命令,但它將結(jié)果保存到 destination 集合,而不是簡(jiǎn)單地返回結(jié)果集. |
SISMEMBER | SISMEMBER key member | 判斷 member 元素是否集合 key 的成員. |
SMEMBERS | SMEMBERS key | 返回集合 key 中的所有成員. |
SMOVE | SMOVE source destination member | 將 member 元素從 source 集合移動(dòng)到 destination 集合. |
SPOP | SPOP key | 移除并返回集合中的一個(gè)隨機(jī)元素. |
SRANDMEMBER | SRANDMEMBER key [count] | 如果 count 為正數(shù),且小于集合基數(shù),那么命令返回一個(gè)包含 count 個(gè)元素的數(shù)組,數(shù)組中的元素各不相同。如果 count 大于等于集合基數(shù),那么返回整個(gè)集合。如果 count 為負(fù)數(shù),那么命令返回一個(gè)數(shù)組,數(shù)組中的元素可能會(huì)重復(fù)出現(xiàn)多次,而數(shù)組的長(zhǎng)度為 count 的絕對(duì)值. |
SREM | SREM key member [member …] | 移除集合 key 中的一個(gè)或多個(gè) member 元素,不存在的 member 元素會(huì)被忽略. |
SUNION | SUNION key [key …] | 返回一個(gè)集合的全部成員,該集合是所有給定集合的并集. |
SUNIONSTORE | SUNIONSTORE destination key [key …] | 這個(gè)命令類似于 SUNION 命令,但它將結(jié)果保存到 destination 集合,而不是簡(jiǎn)單地返回結(jié)果集. |
SSCAN | SSCAN key cursor [MATCH pattern] [COUNT count] | 詳細(xì)信息請(qǐng)參考 SCAN 命令. |
舉一些例子
差集
127.0.0.1:6379> sadd set1 "a1" "a2" "a3" (integer) 3 127.0.0.1:6379> sadd set2 "a1" "a3" "a4" (integer) 3 127.0.0.1:6379> sdiff set1 set2 1) "a2" 127.0.0.1:6379> sdiffstore set set1 set2 (integer) 1 127.0.0.1:6379> smembers set 1) "a2" 1 2 3 4 5 6 7 8 9 10 11
并集
127.0.0.1:6379> sadd set1 "a1" "a2" "a3" (integer) 3 127.0.0.1:6379> sadd set2 "a1" "a3" "a4" (integer) 3 127.0.0.1:6379> sunion set1 set2 1) "a4" 2) "a1" 3) "a3" 4) "a2" 1 2 3 4 5 6 7 8 9 10
交集
127.0.0.1:6379> sadd set1 "a1" "a2" "a3" (integer) 3 127.0.0.1:6379> sadd set2 "a1" "a3" "a4" (integer) 3 127.0.0.1:6379> smembers set 1) "a2" 127.0.0.1:6379> sinter set1 set2 1) "a3" 2) "a1" 127.0.0.1:6379> sinterstore set set1 set2 (integer) 2 127.0.0.1:6379> smembers set 1) "a1" 2) "a3" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
和set一樣sorted set也是string類型元素的集合,不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的score,所以sorted set是一個(gè)有序的集合。
使用場(chǎng)景-用戶得分排行榜
和Sets相比,Sorted Sets是將 Set 中的元素增加了一個(gè)權(quán)重參數(shù) score,使得集合中的元素能夠按 score 進(jìn)行有序排列,比如一個(gè)存儲(chǔ)全班同學(xué)成績(jī)的 Sorted Sets,其集合 value 可以是同學(xué)的學(xué)號(hào),而 score 就可以是其考試得分,這樣在數(shù)據(jù)插入集合的時(shí)候,就已經(jīng)進(jìn)行了天然的排序。另外還可以用 Sorted Sets 來(lái)做帶權(quán)重的隊(duì)列,比如普通消息的 score 為1,重要消息的 score 為2,然后工作線程可以選擇按 score 的倒序來(lái)獲取工作任務(wù)。讓重要的任務(wù)優(yōu)先執(zhí)行。
帶有權(quán)重的元素,比如一個(gè)游戲的用戶得分排行榜
感謝各位的閱讀,以上就是“Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
分享題目:Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作
網(wǎng)站鏈接:http://aaarwkj.com/article8/pjcpip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、品牌網(wǎng)站設(shè)計(jì)、標(biāo)簽優(yōu)化、、網(wǎng)站建設(shè)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)