redis基礎和通用key操做

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刪除

相關文章
相關標籤/搜索