真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

3年Java開(kāi)發(fā)都知道的Redis數(shù)據(jù)結(jié)構(gòu)和通用命令

redis的數(shù)據(jù)結(jié)構(gòu)

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括永泰網(wǎng)站建設(shè)、永泰網(wǎng)站制作、永泰網(wǎng)頁(yè)制作以及永泰網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,永泰網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到永泰省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

Redis支持多種不同的數(shù)據(jù)結(jié)構(gòu),包括5種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和幾種比較復(fù)雜的數(shù)據(jù),這些數(shù)據(jù)結(jié)構(gòu)可以滿足不同的應(yīng)用場(chǎng)景。

3年Java開(kāi)發(fā)都知道的Redis數(shù)據(jù)結(jié)構(gòu)和通用命令

五種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)

  • String:字符串,是構(gòu)建其他數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)

  • Hash:哈希列表

  • List:列表

  • Set:集合,在哈希列表的基礎(chǔ)上實(shí)現(xiàn)

  • Sort Set:有序集合

復(fù)雜的數(shù)據(jù)結(jié)構(gòu)

  • Bitmaps:位圖,在string的基礎(chǔ)上進(jìn)行位操作,可以實(shí)現(xiàn)節(jié)省空間的數(shù)據(jù)結(jié)構(gòu)。

  • Hyperloglog:用于估計(jì)一個(gè) set 中元素?cái)?shù)量的概率性的數(shù)據(jù)結(jié)構(gòu)。

  • Geo:geospatial,地理空間索引半徑查詢。

  • BloomFilter:布隆過(guò)濾器。

不同數(shù)據(jù)結(jié)構(gòu)的相同之處

從上面的介紹,我們看到支持的數(shù)據(jù)結(jié)構(gòu)的不同,但其實(shí),Redis的每一種數(shù)據(jù)結(jié)構(gòu)都由一個(gè)key和value組成,可以抽象為:

3年Java開(kāi)發(fā)都知道的Redis數(shù)據(jù)結(jié)構(gòu)和通用命令

而所有數(shù)據(jù)結(jié)構(gòu)的key的值都是任意合法的字符串,不同的數(shù)據(jù)結(jié)構(gòu)的區(qū)別就在于value存儲(chǔ)的值的不同而不同。

比如,最簡(jiǎn)簡(jiǎn)單的String數(shù)據(jù)結(jié)構(gòu),其value為String,所以String可以表示為:

3年Java開(kāi)發(fā)都知道的Redis數(shù)據(jù)結(jié)構(gòu)和通用命令

而Hash數(shù)據(jù)結(jié)構(gòu),其value為一個(gè)哈希列表,所以Hash可以表示為:

3年Java開(kāi)發(fā)都知道的Redis數(shù)據(jù)結(jié)構(gòu)和通用命令

這里就列出String和Hash來(lái)講解說(shuō)明,關(guān)于更多數(shù)據(jù)結(jié)構(gòu)的內(nèi)部結(jié)構(gòu)及詳細(xì)操作,我們?cè)谥蟮奈恼略谠僬務(wù)劙伞?/p>

歡迎大家關(guān)注我的公種浩【程序員追風(fēng)】,文章都會(huì)在里面更新,整理的資料也會(huì)放在里面。

Redis的通用命令

Redis官網(wǎng)將Redis的命令按照功能劃分為15個(gè)主題分組,其中,Kyes主題的命令對(duì)所有的數(shù)據(jù)結(jié)構(gòu)都通用,因此,有必要在了解其他數(shù)據(jù)結(jié)構(gòu)命令前好好學(xué)習(xí)一下。

keys

keys命令的作用是列出Redis所有的key,該命令的時(shí)間復(fù)雜度為O(N),N隨著Redis中key的數(shù)量增加而增加,因此Redis有大量的key,keys命令會(huì)執(zhí)行很長(zhǎng)時(shí)間,而由于Redis是單線程,某個(gè)命令耗費(fèi)過(guò)長(zhǎng)時(shí)間,則會(huì)導(dǎo)致后面的的所有請(qǐng)求無(wú)法得到響應(yīng),因此,千萬(wàn)不要在生產(chǎn)服務(wù)器上使用keys命令。

#?key命令,時(shí)間復(fù)雜度為O(n)
keys?pattern?#pattern可為一個(gè)包含匹配模式的字符串,可以包含*,+,?,[a-z]等模式。

示例

>?mset?hello_test1?one?hello_test2?two?helloa?a?hellob?b
>?keys?hello*
1)?"hello_test1"
2)?"hello_test2"
3)?"helloa"
4)?"hellob"
>?keys?heelo?
1)?"helloa"
2)?"hellob"
>?keys?hello[a-z]
1)?"helloa"
2)?"hellob"

exists

exists命令用于判斷一個(gè)或多個(gè)key是否存在,判斷多個(gè)key時(shí),key之間用空格分隔,exists的返回值為整數(shù),表示當(dāng)前判斷有多少個(gè)key是存在的。

#?exists命令,時(shí)間復(fù)雜度O(1)
exists?key?[key?...]

示例

>?set?test1?t1
>?exists?test1?test2?
(integer)?1?#只有一個(gè)key存在
>?exists?test3?test3
(integer)?0?#key都不存在

del

del命令用于刪除一個(gè)或多個(gè)key,多個(gè)key之間用空格分隔,其返回值為整數(shù),表示成功刪除了多少個(gè)存在的key,因此,如果只刪除一個(gè)key,則可以從返回值中判斷是否成功,如果刪除多個(gè)key,則只能得到刪除成功的數(shù)量。

#?del命令,時(shí)間復(fù)雜度O(n)
del?key?[key?...]

示例

>?set?test?t
>?del?test
(integer)?1
>?mset?test1?2?test2?1
>?del?test1?test2?test3
(integer)?2?#?返回2,表示成功刪除兩個(gè)
#再次刪除,返回0,因?yàn)閯h除成功個(gè)數(shù)為0
>?del?test1?test2?test3
(integer)?0

expire,pexpire

expire設(shè)置key在多少秒之后過(guò)期,pexpire設(shè)置key在多少毫秒之后過(guò)期,成功返回1,失敗返回0。

#?expire命令,時(shí)間復(fù)雜度為O(1)
expire?key?seconds
#?pexpire命令,時(shí)間復(fù)雜度為O(1)
pexpire?key?milliseconds

示例

>?mset?test?test_value?test1?test1_value
>?expire?test?10?#設(shè)置10秒后過(guò)期
(integer)?1
>?pexpire?test1_value?10000?#設(shè)置10000毫秒(10s)后過(guò)期
(integer)?1
>?expire?ttt?100
(integer)?0?#?不存在的key,設(shè)置失敗,返回0

ttl,pttl

ttl和pttl命令用于獲取key的過(guò)期時(shí)間,其返回值為整型,代表的意義分為幾種情況:

  • 當(dāng)key不存在或過(guò)期時(shí)間,返回-2。

  • 當(dāng)key存在且永久有效時(shí),返回-1。

  • 當(dāng)key有設(shè)置過(guò)期時(shí)間時(shí),返回為剩下的秒數(shù)(pttl為毫秒數(shù))

#?ttl命令,時(shí)間復(fù)雜度O(1)
ttl?key
#?pttl命令,時(shí)間復(fù)雜度O(1)
pttl?key

示例(ttl的演示,pttl類(lèi)似)

>?set?test?test
>?expire?test?100
>?ttl?test
(integer)?98#返回剩下的秒數(shù)
>?set?test1?#永久有效
>?ttl?test1
(integer)?-1
>?ttl?test2
(integer)?-2#不存在或過(guò)期
#100秒后
>?ttl?test?#?test已過(guò)期
(integer)?-2

expireat,pexpireat

設(shè)置key在某個(gè)時(shí)間戳過(guò)期,expreat參數(shù)時(shí)間戳用秒表示,而pexpireat則用毫秒表示,與expire和pexpire功能類(lèi)似,返回1表示成功,0表示失敗。

#expireat命令,時(shí)間復(fù)雜度為O(1)
expireat?key?timestamp
#pexpireat命令,時(shí)間復(fù)雜度為O(1)
pexpireat?key?milliseconds-timestamp

示例

>?set?test?test
>?expireat?test?1560873600?#?2019-06-19?00:00:00
(integer)?1
>?set?test1?test1
>?pexpireat?test1?156087360000?#?2019-06-19?00:00:00的毫秒表示
(integer)?1

persist

移除key的過(guò)期時(shí)間,將key設(shè)置為永久有效,當(dāng)key設(shè)置了過(guò)期時(shí)間,使用persist命令移除后返回1,如果key不存在或本身就是永久有效的,則返回0。

#?persist命令,時(shí)間復(fù)雜度O(1)
persist?key

示例

>?set?test?test
>?ttl?test
(integer)?-1?#?表示永久有效
>?persist?test
(integer)?0?#?對(duì)永久有效或不存在的key使用persist命令,返回
>?expire?test?10
(integer)?1
>?persist?test
(integer)?1

type

判斷key是什么類(lèi)型的數(shù)據(jù)結(jié)構(gòu),返回值為string,list,set,hash,zset,分別表示我們前面介紹的Redis的5種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)。

geo,hyperloglog,bitmaps等復(fù)雜的數(shù)據(jù)結(jié)構(gòu),都是在這五種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)上實(shí)現(xiàn),比如geo是zset類(lèi)型,hyperloglog和bitmaps都為string。

#?type命令,時(shí)間復(fù)雜度O(1)
type?key

示例

>?set?test?test
>?type?test
string
>?hset?htest?test?test
>?type?htest
hash

小結(jié)

上面介紹的是Redis中最常用的通用命令,雖然簡(jiǎn)單,但還是非常有必要掌握其用法和使用方面要注意的事項(xiàng),其實(shí),對(duì)于普通開(kāi)發(fā)人員來(lái)說(shuō),很多時(shí)候,也只是使用這些基礎(chǔ)通用的命令來(lái)操作Redis而已。

最后
歡迎大家一起交流,喜歡文章記得點(diǎn)個(gè)贊喲,感謝支持!


本文標(biāo)題:3年Java開(kāi)發(fā)都知道的Redis數(shù)據(jù)結(jié)構(gòu)和通用命令
文章地址:http://weahome.cn/article/jpjiie.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部