1. 程式人生 > 資料庫 >【乾貨】Redis進階合集,想學的進來看看!

【乾貨】Redis進階合集,想學的進來看看!

Redis命令的生命週期


    1.客戶端把Redis指令寫入到客戶端緩衝區中

    2.緩衝區滿後傳送到Redis伺服器,並先寫入服務端緩衝區

    3.從緩衝區裡面拿出命令請求放置到請求佇列中排隊等待處理

    4.執行命令

    5.返回命令結果


Redis慢查詢


    慢查詢發生在生命週期的第三階段,是指僅僅執行命令階段比較慢被稱為慢查詢

    客戶端超時不-定是慢查詢,但是慢查詢時是客戶端超時的一個可能因素。

    

Redis慢查詢相關配置


 1. slowlog-max-len

    它決定了慢查詢日誌最多能儲存多少條日誌,slow log本身是一個記憶體中的FIFO佇列,當佇列大小超過slowlog-max-len時,最舊的一條日誌將被刪除,而最新的一條日誌加入到slow log中。

        預設值:128

        支援動態配置

 2.slowlog-log-slower-than

它決定要對執行時間大於多少微妙(microsecond ,1秒= 1,000,000微妙)的查詢進行記錄

        預設值: 10000

        slowlog-log-slower-than= 0,記錄所有命令

        slowlog-log-slower-than < 0,不記錄任何命令

        支援動態配置

 

慢查詢相關命令


 1.slowlog get [n]

         含義:獲取慢查詢列表中的慢查詢資訊

         n:獲取出多少條慢查詢資料資訊

 2.slowlog len

        含義:獲取慢查詢佇列長度

 3.slowlog reset

        含義:清空慢查詢佇列


慢查詢資訊欄位


     1.欄位1:唯一性的日誌識別符號(Integer)

     2.欄位2:被記錄命令的執行時間點,已UNIX時間戳格式表示(Integer)

     3.欄位3:查詢執行時間,以微秒為單位

     4.欄位4:完整的執行命令

     

慢查詢運維經驗


slowlog-log-slower-than不要設定過大,預設10ms,通常設定1ms。

因為Redis的qps是萬級別的,即每秒應能執行10000次請求當一條命令執  行1ms時,那每秒只能執行1000次請求 slowlog-max-len 不要設 置地過小,通常設定1000左右需要理解命令的生命週期定期持久化慢查詢。  

因為慢查詢只儲存於記憶體中,宕機慢查詢資料就會丟失通過定期slowlog get將慢查詢資料轉存到MySQL或者ES中


pipeline的好處


省略由於單執行緒導致的命令排隊時間,一次命令的消耗時間 = 一次網路時間+命令執行時間。比起命令執行時間,網路時間很可能成為系統的瓶頸。

pipeline的作用是將一批命令進行打包,然後傳送給伺服器,伺服器執行完按順序打包返回。通過pipeline, 一次pipeline (n條命令) = 一次網路時間+ n次命令時間


pipeline VS M操作(mget、mset)


M操作在Redis佇列中是一個原子操作,pipeline不是原子操作

pipeline 與M操作都會將資料順序的傳送與順序地返回

pipeline注意事項

  • 每次pipeline攜帶數量不推薦過大, 否則會影響網路效能

  • pipeline每次只能作用在一個Redis節點 上


釋出訂閱的角色與通訊模型


1.角色

  • 釋出者(publisher)

  • 訂閱者(subscriber)

  • 頻道(channel)


2.通訊模型

  • RedisServer中可以建立若channel,一個訂閱者可以訂閱多個channel

  • 當釋出者向一個頻道中釋出一條訊息時,所有的訂閱者都將會收到訊息

  • Redis的釋出訂閱模型沒有訊息積壓功能,即新加入的訂閱者收不到釋出者之前釋出的訊息

    當訂閱者收到訊息時,訊息內容如下

    第一行: 固定內容message

    第二行: channel的名稱

    第三行: 收到的新訊息


釋出訂閱的API

    1.publish channel message

        含義:向指定的channel中釋出訊息

    2.subscribe channel1 [channel...]

        含義:訂閱給定的一個或多個渠道的訊息

    3.unsubcribe [channel1 [chane2..]

        含義:取消訂閱給定的一個或多個渠道的訊息

    ###4.psubscribe pattern1 [pattern2..]

        含義:訂閱一個或多個符合給定模式的頻道

    ###5.punsubscribe [pattern1 [patern..]

        含義:退訂所有給定模式的頻道

    6.pubsub channels

        含義:列出至少有一個訂閱者的頻道

    ###7.pubsub numsub [hannel.]

        含義:列出給定頻道的訂閱者數量


BitMap的API

1.getbit key offset

        含義:對key所儲存的字串值, 獲取指定偏移量上的位(bit)

2.setbit key offset value

        含義:對key所儲存的字串值,設定或清除指定偏移量上的位(bit)

        返回值為該位在setbit之前的值

        value只能取0或1

        offset從0開始, 即使原點陣圖只能10位,offset可以取1000

3.bitcount key [start end]

    含義:獲取點陣圖指定範圍中位值為1的個數

    如果不指定start與end,則取所有

4.bitop op destKey key1 [key2..]

    含義:做多個BitMap的and (交集) 、or (並集)、not (非)、xor (異或)操作並將結果儲存在destKey中

5.bitpos key tartgetBit [start end]

    含義:計算點陣圖指定範圍第一 個偏移量對應的的值等於targetBit的位置

        找不到返回-1

        start與end沒有設定, 則取全部

        targetBit只能取0或者1


BitMap的使用場景


統計每日使用者的登入數。每一位標識一個使用者ID,當某個使用者訪問我們的網頁或執行了某個操作,就在bitmap中把標識此使用者的位設定為1。

#HyperLogL og簡介

    基於HyperLogLog演算法, 使用極小空間完成獨立數統計的功能

    本質還是一個字串

    十分節約記憶體

    官方給出存在0.81%的錯誤率

    無法取出單條資料

    

HyperLogL og的相關命令


1.pfadd key element1 [element2..]

    含義:向HyperLogLog中新增元素

2.pfcount key1 [key2..]

    含義:計算HyperLogLog的獨立總數

3.pfmerge destKey key1 [key2..]j

    含義:合併多個hyperLogLog到destKey中

    

GEO簡介


  • Redis 3.2新增新特性

  • 功能:儲存經緯度、計算兩地距離、範圍計算等

  • 基於ZSet實現

  • 刪除操作使用zrem


GEO相關命令


1.geoadd key longitude latitude member [lon latmember..]

    含義:增加地理位置資訊

        longitude :經度

        latitude :緯度

        member :標識資訊

2.geopos key member1 [member2...]

    含義:獲取地理位置資訊

###3.geodist key member1 member2 [unit]

            含義:獲取兩個地理位置的距離

            unit取值範圍

                m(米,預設)

                km (千米)

                mi (英里)

                ft (英尺)

###4.georadius key longitude latitude unit [withcoord] [withdist] [withhash] [COUNT count] [sort] [store key] [storedist key]

     含義:以給定的經緯度為中心,返回包含的位置元素當中,與中心距離不超過給定最大距離的所有位置元素。

           

unit取值範圍

  • m(米)

  • km (千米)

  • mi (英里)

  • ft(英尺)

    withcoord: 將位骯素的經度與緯度也一併返回

    withdist: 在返回位置元素的同時,將距離也-並返回。距離的單位和使用者給定的範圍單位保持-致

     withhash: 以52位的符號整數形式,返回位置元素經過geohash編碼的有序集合分值。用於底層應用或除錯,實際作用不大。


            sort取值範圍

            asc: 根據中心位置, 按照從近到遠的方式返回位置元素

            desc:根據中心位置, 按照從遠到近的方式返回位置元素

            store key:將返回結果而的地理位置資訊儲存到指定鍵


5.georadiusbymember key member radius unit [withcoord] [withdist][withhash][COUNT count][sort][store key] [storedist key]

含義:以給定的元素為中心,返回包含的位置元素當中,與中心距離不超過給定最大距離的所有位置元素。


        unit取值範圍

        m(米)

        km (千米)

        mi (英里)

        ft (英尺)

    withcoord: 將位置元素的經度與緯度也一併返回

    withdist: 在返回位置元素的同時,將距離也一併返回。距離的單位和使用者給定的範圍單位保持一致

    withhash: 以52位的符號整數形式,返回位置元素經過geohash編碼的有序集合分值。用更於底層應用或除錯,實際作用不大。


    sort取值範圍

        asc: 根據中心位置,按照從近到遠的方式返回位置元素

        desc: 根據中心位置, 按照從遠到近的方式返回位置元素

    store key:將返回結果而的地理位置資訊儲存到指定鍵

    storedist key:將返回結果距離中心節點的距離儲存到指定鍵