redis是什麼?
redis開源的,構建於內存的數據結構的nosql數據庫。常被用於數據存儲,緩存處理和消息處理。redis
redis的優點?
一、極高的讀寫能力
二、豐富的數據類型
三、原子性操做
四、支持主從熱備sql
redis的使用場景?
一、登陸以後的會話存儲,相較於使用memcached做爲緩存數據庫,數據更加安全
二、排行榜/計數器,好比一些秀場類的項目,經常會會有一些前多少名的主播排名,還有一些文章閱讀量的技術,或者新浪微博的點贊數等
三、做爲消息隊列,好比celery就可使用redis做爲中間人
四、好友關係,微博的好友關係使用redis實現數據庫
redis鍵的基本操做命令:
一、keys pattern
功能:查詢全部符合匹配模式的全部的鍵名
pattern支持glob風格的通配符格式,具體規則以下:
?:任意一個字符
*:任意個字符(包括0個)
[ae]:a或e中的一個字符
[^ae]:除了a和e的一個字符
[a-e]:a-e範圍內的一個字符
[^a-e]:除了a-e的一個字符
[1-11]:1-11範圍內的一個字符
[^1-11]:除了1-11的一個字符
返回值:返回全部符合匹配模式的全部的鍵名
exp:keys *緩存
注意:keys命名須要遍歷redis中的全部鍵以找到符合匹配模式的鍵,當鍵的數量而很是多的時候會影響性能,不建議在生產環境中使用。安全
二、exists key [key...]
功能:檢查redis中給定的key鍵(一個、多個、重複)是否存在
返回值:由於key能夠不存在也能夠重複,返回這些key鍵在redis中存在的數量,當key重複時,返回值統計key的數量不會去重
exp:exists key1 key2 ...數據結構
三、SCAN cursor [MATCH pattern] [COUNT count]
功能:scan命令每次被調用是會返回新的遊標cursor和本次執行命令列出的全部key,用戶在下次迭代的時候可使用新的遊標cursor做爲scan命令的遊標參數,以此來延續以前的迭代過程,直到返回的新的cursor爲0的時候,最終列出全部的符合pattern匹配模式的key。這種方式相較於使用keys pattern的方式查詢key麻煩許多,可是當你的key很是多的時候,使用scan方式效率上明顯會提高。
pattern的用法:與keys pattern命令中的pattern用法一致
count參數:表明本次掃描想要列出的key的個數,可是實際上會列出的key的個數並不必定會是count參數的值,這個參數是不精準的
返回值:遍歷符合pattern的全部key數據,這些key可能會有重複,須要在客戶端程序應用中進行判斷
exp:sacn 0
sacn 0 match key?
scan 0 match key[1-8] count 5dom
四、randomkey
功能:隨機返回redis數據庫中的一個key
返回值:一個鍵名
exp:randomkeynosql
五、type key
功能:查詢一個key鍵的類型
返回值:若是key存在,返回存儲在該鍵上數據的數據類型的表現形式,不一樣的類型共有string,list,set,zset,hash五種。若是key不存在,則返回none。
exp:type key1memcached
六、object subcommand [arguments [arguments ...]]
功能:從內部查看給定key的redis對象(key所對應的具體對象)
subcommand子命令:
object refcount key:返回當前key對應的對象的引用次數
object idletime key:返回當前key對應的對象的空閒時間
object encoding key:返回當前key對應的對象的數據類型,如'int','quicklist','embstr'等等
返回值:refcount/idletime返回數字,encoding返回redis對象的編碼類型
注意:若是某個對象的encoding爲'int',而且這個對象的值在0-9999之間,那麼他的refcount引用次數會一直爲2147483647,而其餘的類型或者不在該範圍內的數據則會返回具體的引用次數。
exp: object refcount key1
object encoding key1
object idletime key1性能
七、rename key newkey
功能:給key重命名爲newkey,若是newkey已經存在,則key所指向的數據會覆蓋已存在的newkey的數據
返回值:一、成功則返回OK
二、若是被改名的key在redis中不存在,則會報錯。
exp: rename username name
八、renamenx key newkey
功能:當且僅當newkey不存在時給key重命名爲newkey
返回值:一、舊名稱key在redis中不存在,則會報錯
二、重命名成功則返回1
三、新名稱newkey已經存在於redis中則返回0
exp: renamenx username name
九、touch key [key...]
功能:觸碰一下key(能夠爲多個),把key的最後訪問時間變爲當前時間,固然這個對象的空閒時間就會變成0。
返回值:由於key能夠不存在也能夠重複,返回值爲實際touch到的key的數量(key存在且重複不回去重數量)
exp:
touch username
object idletime username
十、del key [key...]
功能:刪除key,能夠是多個,屬於阻塞式刪除
返回值:若是key不存在,則返回零,若是多個key,則返回實際刪除的key的個數,這裏相較於exists和touch的返回值,若是key重複,在返回值計算數量時會去重返回
exp:del username
del key1 key2 username
十一、unlink key [key...]
功能:刪除key,能夠是多個,屬於非阻塞式刪除,用法與del相同,但相對於del,效率更高
返回值:若是key不存在,則返回零,若是多個key,則返回實際刪除的key的個數,這裏相較於exists和touch的返回值,若是key重複,在返回值計算數量時會去重返回
exp:unlink username
unlink key1 key2 username
十二、expire key seconds
功能:爲給定的key設定多少秒後過時(若是該給定的key已經設置了過時時間,則爲更改過時時間操做)。若是設置的seconds小於0等於0,則該鍵key馬上會被刪除。
返回值:一、設置成功返回1
二、不然key不存在或者設置失敗返回0
exp:expire age 60
1三、expireat key timestamp
功能:爲key設定具體的過時時間點,時間點爲Unix時間戳
返回值:一、成功則返回1
二、當key不存在或者沒辦法設置過時時間則返回0
exp:expireat username 1600000000
1四、pexpire key milliseconds
功能:與expire一致,只不過是值得數值爲毫秒
返回值:一、設置成功返回1
二、當key不存在或者沒辦法設置過時時間則返回0
exp:pexpire age 60000
1五、pexpireat key milliseconds-timestamp
功能:與pexpire功能一致,只不過設置的時間戳爲毫秒級別
返回值:一、成功則返回1
二、當key不存在或者沒辦法設置過時時間則返回0
exp:pexpireat username 1600000000000
1六、ttl key
功能:返回以秒爲單位的key的剩餘過時時間
返回值:一、當key不存在的時候,返回-2
二、當key存在可是沒有設置過時時間,返回-1
三、不然,以秒爲單位,返回key的剩餘過時時間
exp:ttl username
1七、pttl key
功能:與ttl同樣,只不過返回的剩餘過時時間是以毫秒爲單位的值
1八、persist key
功能:移除給定的key的生存時間,將這個key轉換成持久的
返回值:一、移除成功返回1
二、key不存在或者未設置過時時間返回0
exp:persist age
1九、dump key
功能:序列化給定的key並返回序列化的結果,便於傳輸等操做,序列化的結果不包含任何過時時間相關信息
返回值:一、若是成功則返回被序列化的結果(特殊格式的字符串)
二、若是key不存在則返回nil
exp: dump username
20、restore key ttl serialized-value [REPLACE]
功能:反序列化給定的序列化字符串,將獲得的結果和給定的key關聯,而且設置過時時長爲以毫秒爲單位的ttl(若是ttl爲0則表明新生成的key永久有效)。若是key已經存在,此時若是使用replace則會覆蓋原來的key,若是未使用replace,則會報錯
返回值:一、若是成功則返回OK
二、給定的key已經存在,可是未使用replace參數,會報錯
2一、sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
功能:返回或者保存給定的列表,集合,有序集合中通過排序的結果。排序默認以數字爲對象,值被解釋爲雙精度浮點數,而後進行比較
返回值:一、未使用store參數,則返回排序事後的列表形式的結果
二、若是使用了store參數,則把排序結果保存到給定的destination鍵裏,並返回結果元素數量。若是destination爲已經存在的key,則原來的key的內容將會被覆蓋
exp:lpush nums 1 4 21 3 21 43 20
sort nums store newkey
sort nums desc store newkey limit 2 3
2二、move key db
功能:相同實例之間的不一樣庫之間的數據遷移,將當前數據庫的key移動到指定數據庫db當中。若是目標數據庫存在該key,或者當前數據庫不存在該key,那麼move沒有任何效果。注意這個操做是移動不是複製。
返回值:若是移動成功,則返回1。若是沒有move效果,則返回0
exp:move username 1
2三、migrate host port key| destination-db timeout [COPY] [REPLACE] [KEYS key]
功能:多個實例之間的數據遷移,將key原子性的從當前實例移動到目標實例的指定數據庫上,一旦傳送成功,則會保證key出如今目標實例指定的數據庫上,而當前庫中的key將被刪除。timeout參數爲以毫秒爲單位的時間超時時間,若是超時則會傳送失敗。若是目標實例的指定庫裏面有該key,此時若是使用replace,目標實例上的該key將會被覆蓋,不然將會傳送失敗。由於該操做是原子性的,他在執行的時候會阻塞正在遷移的兩個實例直到發生如下時間,遷移成功,遷移失敗,遷移超時。注意若是使用copy參數,則會是複製,原實例中的key將會被保留。若是沒使用copy,則就是移動。
若是想要移動多個key,那麼key參數能夠傳遞一個' '佔位,而後添加keys參數便可
exp:migrate 192.168.12.133 6379 username 0 2000 copy replace
migrate 192.168.12.133 6379 "" 0 3000 copy replace keys key1 key2 key3
2四、flushdb
功能:把當前redis庫的全部key刪除