原創做者,公衆號【程序員讀書】,歡迎關注公衆號,轉載文章請註明出處哦。程序員
在上一篇文章中,咱們簡單地講了一下Redis
的應用場景、安裝、如何鏈接等比較基礎的知識,那麼在這篇文章,咱們就再接再勵,繼續Redis
基礎知識的學習吧。bash
在這篇文章中,咱們來說一講Redis
的數據結構和通用命令。服務器
Redis
支持多種不一樣的數據結構,包括5種基礎數據結構和幾種比較複雜的數據,這些數據結構能夠知足不一樣的應用場景。數據結構
String
:字符串,是構建其餘數據結構的基礎學習
Hash
:哈希列表ui
List
:列表spa
Set
:集合,在哈希列表的基礎上實現線程
Sort Set
:有序集合code
Bitmaps
:位圖,在string的基礎上進行位操做,能夠實現節省空間的數據結構。cdn
Hyperloglog
:用於估計一個 set 中元素數量的機率性的數據結構。
Geo
: geospatial,地理空間索引半徑查詢。
BloomFilter
:布隆過濾器。
從上面的介紹,咱們看到支持的數據結構的不一樣,但其實,Redis的
每一種數據結構都由一個key
和value
組成,能夠抽象爲:
而全部數據結構的key
的值都是任意合法的字符串,不一樣的數據結構的區別就在於value
存儲的值的不一樣而不一樣。
好比,最簡簡單的String數據結構,其value爲String,因此String能夠表示爲:
而Hash數據結構,其value爲一個哈希列表,因此Hash能夠表示爲:
這裏就列出String和Hash來說解說明,關於更多數據結構的內部結構及詳細操做,咱們在以後的文章在再談談吧。
Redis
官網將Redis
的命令按照功能劃分爲15個主題分組,其中,Kyes
主題的命令對全部的數據結構都通用,所以,有必要在瞭解其餘數據結構命令前好好學習一下。
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
命令用於判斷一個或多個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
命令用於刪除一個或多個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設置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命令用於獲取key的過時時間,其返回值爲整型,表明的意義分爲幾種狀況:
# 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
複製代碼
設置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
複製代碼
移除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
複製代碼
判斷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
而已。
你的關注,是我寫做路上最大的鼓勵!