日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

redis的數據結構

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

5年Java程序員技術分享:Redis數據結構和通用命令

 

五種基礎數據結構

  • String:字符串,是構建其他數據結構的基礎
  • Hash:哈希列表
  • List:列表
  • Set:集合,在哈希列表的基礎上實現
  • Sort Set:有序集合

復雜的數據結構

  • Bitmaps:位圖,在string的基礎上進行位操作,可以實現節省空間的數據結構。
  • Hyperloglog:用于估計一個 set 中元素數量的概率性的數據結構。
  • Geo:geospatial,地理空間索引半徑查詢。
  • BloomFilter:布隆過濾器。

不同數據結構的相同之處

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

5年Java程序員技術分享:Redis數據結構和通用命令

 

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

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

5年Java程序員技術分享:Redis數據結構和通用命令

 

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

5年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而已。

分享到:
標簽:數據結構 Redis
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定