中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

3年Java開發都知道的Redis數據結構和通用命令

發布時間:2020-06-29 11:47:48 來源:網絡 閱讀:279 作者:架構師追風 欄目:編程語言

Redis的數據結構

Redis支持多種不同的數據結構,包括5種基礎數據結構和幾種比較復雜的數據,這些數據結構可以滿足不同的應用場景。

3年Java開發都知道的Redis數據結構和通用命令

五種基礎數據結構

  • String:字符串,是構建其他數據結構的基礎

  • Hash:哈希列表

  • List:列表

  • Set:集合,在哈希列表的基礎上實現

  • Sort Set:有序集合

復雜的數據結構

  • Bitmaps:位圖,在string的基礎上進行位操作,可以實現節省空間的數據結構。

  • Hyperloglog:用于估計一個 set 中元素數量的概率性的數據結構。

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

  • BloomFilter:布隆過濾器。

不同數據結構的相同之處

從上面的介紹,我們看到支持的數據結構的不同,但其實,Redis的每一種數據結構都由一個key和value組成,可以抽象為:

3年Java開發都知道的Redis數據結構和通用命令

而所有數據結構的key的值都是任意合法的字符串,不同的數據結構的區別就在于value存儲的值的不同而不同。

比如,最簡簡單的String數據結構,其value為String,所以String可以表示為:

3年Java開發都知道的Redis數據結構和通用命令

而Hash數據結構,其value為一個哈希列表,所以Hash可以表示為:

3年Java開發都知道的Redis數據結構和通用命令

這里就列出String和Hash來講解說明,關于更多數據結構的內部結構及詳細操作,我們在之后的文章在再談談吧。

歡迎大家關注我的公種浩【程序員追風】,文章都會在里面更新,整理的資料也會放在里面。

Redis的通用命令

Redis官網將Redis的命令按照功能劃分為15個主題分組,其中,Kyes主題的命令對所有的數據結構都通用,因此,有必要在了解其他數據結構命令前好好學習一下。

keys

keys命令的作用是列出Redis所有的key,該命令的時間復雜度為O(N),N隨著Redis中key的數量增加而增加,因此Redis有大量的key,keys命令會執行很長時間,而由于Redis是單線程,某個命令耗費過長時間,則會導致后面的的所有請求無法得到響應,因此,千萬不要在生產服務器上使用keys命令。

#?key命令,時間復雜度為O(n)
keys?pattern?#pattern可為一個包含匹配模式的字符串,可以包含*,+,?,[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命令用于判斷一個或多個key是否存在,判斷多個key時,key之間用空格分隔,exists的返回值為整數,表示當前判斷有多少個key是存在的。

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

示例

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

del

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

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

示例

>?set?test?t
>?del?test
(integer)?1
>?mset?test1?2?test2?1
>?del?test1?test2?test3
(integer)?2?#?返回2,表示成功刪除兩個
#再次刪除,返回0,因為刪除成功個數為0
>?del?test1?test2?test3
(integer)?0

expire,pexpire

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

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

示例

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

ttl,pttl

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

  • 當key不存在或過期時間,返回-2。

  • 當key存在且永久有效時,返回-1。

  • 當key有設置過期時間時,返回為剩下的秒數(pttl為毫秒數)

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

示例(ttl的演示,pttl類似)

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

expireat,pexpireat

設置key在某個時間戳過期,expreat參數時間戳用秒表示,而pexpireat則用毫秒表示,與expire和pexpire功能類似,返回1表示成功,0表示失敗。

#expireat命令,時間復雜度為O(1)
expireat?key?timestamp
#pexpireat命令,時間復雜度為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的過期時間,將key設置為永久有效,當key設置了過期時間,使用persist命令移除后返回1,如果key不存在或本身就是永久有效的,則返回0。

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

示例

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

type

判斷key是什么類型的數據結構,返回值為string,list,set,hash,zset,分別表示我們前面介紹的Redis的5種基礎數據結構。

geo,hyperloglog,bitmaps等復雜的數據結構,都是在這五種基礎數據結構上實現,比如geo是zset類型,hyperloglog和bitmaps都為string。

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

示例

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

小結

上面介紹的是Redis中最常用的通用命令,雖然簡單,但還是非常有必要掌握其用法和使用方面要注意的事項,其實,對于普通開發人員來說,很多時候,也只是使用這些基礎通用的命令來操作Redis而已。


最后
歡迎大家一起交流,喜歡文章記得點個贊喲,感謝支持!


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

稷山县| 友谊县| 穆棱市| 崇礼县| 凤台县| 泗阳县| 克什克腾旗| 望都县| 灵武市| 宝兴县| 黄浦区| 浑源县| 信宜市| 鄂托克旗| 德保县| 洞口县| 琼中| 浙江省| 绥芬河市| 都匀市| 安宁市| 渭源县| 宝应县| 和龙市| 顺昌县| 怀远县| 泰宁县| 岱山县| 阳曲县| 彩票| 岗巴县| 香格里拉县| 岐山县| 渝中区| 兰坪| 延川县| 应城市| 忻州市| 敦煌市| 怀远县| 安多县|