Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作-創(chuàng)新互聯(lián)

這篇文章主要講解了“Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作”吧!

創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元猇亭做網(wǎng)站,已為上家服務(wù),為猇亭各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

基本結(jié)構(gòu)

一個(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 在今天閱覽過網(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ù)。

基本結(jié)構(gòu)

Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作

操作 語(yǔ)法 說(shuō)明
BLPOP BLPOP key [key …] timeout BLPOP 是列表的阻塞式(blocking)彈出原語(yǔ).它是 LPOP 命令的阻塞版本,當(dāng)給定列表內(nèi)沒有任何元素可供彈出的時(shí)候,連接將被 BLPOP 命令阻塞.
BRPOP BRPOP key [key …] timeout 它是 RPOP 命令的阻塞版本,當(dāng)給定列表內(nè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	

3. 哈希表Hash

存儲(chǔ)的是一個(gè)field與value的映射表,即存儲(chǔ)的是一個(gè)Map,每一條數(shù)據(jù)可以看做是key-field-value的格式,field-value對(duì)應(yīng)的是Map的一個(gè)鍵值對(duì)。

基本語(yǔ)法

使用場(chǎng)景-存儲(chǔ)社交關(guān)系

比如新浪的關(guān)注列表, 粉絲列表都是由hash實(shí)現(xiàn)的。

基本結(jié)構(gòu)

Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作

操作 語(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	

5. 有序集合SortedSet

和set一樣sorted set也是string類型元素的集合,不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的score,所以sorted set是一個(gè)有序的集合。

基本語(yǔ)法

使用場(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)過本文的學(xué)習(xí)后,相信大家對(duì)Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

文章題目:Redis有哪些基本數(shù)據(jù)結(jié)構(gòu)和操作-創(chuàng)新互聯(lián)
文章URL:http://muchs.cn/article10/cdcpgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、動(dòng)態(tài)網(wǎng)站關(guān)鍵詞優(yōu)化、網(wǎng)站維護(hù)、面包屑導(dǎo)航、網(wǎng)站制作

廣告

聲明:本網(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)

綿陽(yáng)服務(wù)器托管