redis高級

来源:https://www.cnblogs.com/dwvfw855/archive/2019/05/06/10817715.html
-Advertisement-
Play Games

Redis命令的生命周期 客戶端向Redis伺服器發送命令 命令請求在請求隊列中排隊等待處理 執行命令 返回命令結果 Redis慢查詢 慢查詢發生在生命周期的第三階段,是指僅僅執行命令階段比較慢被稱為慢查詢。 客戶端超時不一定是慢查詢,但是慢查詢時是客戶端超時的一個可能因素。 慢查詢發生在生命周期的 ...


Redis命令的生命周期

  1. 客戶端向Redis伺服器發送命令

  2. 命令請求在請求隊列中排隊等待處理

  3. 執行命令

  4. 返回命令結果

 

 

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次命令時間

命令N個命令操作1次pupeline(n個命令)
時間 n次網路+n次命令 1次網路+n次命令
數據量 1條命令 n條命令

 

 

pipeline-Jedis使用

//沒有使用pipieline的情況下
public void testWithoutPipeline() {
   Jedis jedis = new Jedis("127.0.0.1" , 6379);
   for(int i = 1 ; i <= 10000 ; i++ ) {
       jedis.hset("hashKey-" + i , "field-" + i , "value-" + i);
  }
}

//使用pipeline的情況下
public void testPipeline() {
   Jedis jedis = new Jedis("127.0.0.1" , 6379);
   for(int i = 0 ; i < 100 ; i++ ) {
       Pipeline pipeline = jedis.pipelined();
       for(int j = i * 100 ; i < (i+1) * 100 ; j++ ) {
           pipeline.hset("hashKey-" + j , "field-" + j , "value-" + j);
      }
       pipeline.syncAndReturnAll();
  }
}

 

 

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 [channel2...]

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

3.unsubcribe [channel1 [channel2...]]

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

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

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

###5.punsubscribe [pattern1 [pattern2...]]

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

6.pubsub channels

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

###7.pubsub numsub [channel...]

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

 

 

發佈訂閱-Jedis

//訂閱
public void testSubscribe() {
   Jedis jedis = new Jedis("127.0.0.1" , 6379);
   jedis.subscribe(new JedisPubSub() {
       @Override
       public void onMessage(String channel, String message) {
           System.out.println("receive channel ["+channel+"] message ["+message+"]");
      }
  } , "aliTV" , "googleTV");
}

//發佈
public void testPublish() {
   Jedis jedis = new Jedis("127.0.0.1" , 6379);
   jedis.publish("aliTV" , "I am xuyinan");
   jedis.publish("googleTV" , "My age is 27");
}

 

 

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。

 

 

#HyperLogLog簡介

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

  • 本質還是一個字元串

  • 十分節約記憶體

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

  • 無法取出單條數據

 

 

HyperLogLog的相關命令

1.pfadd key element1 [element2...]

  • 含義:向HyperLogLog中添加元素

2.pfcount key1 [key2...]

  • 含義:計算HyperLogLog的獨立總數

3.pfmerge destKey key1 [key2...]

  • 含義:合併多個hyperLogLog到destKey中

 

 

GEO簡介

  • Redis 3.2添加新特性

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

  • 基於ZSet實現

  • 刪除操作使用zrem

 

 

GEO相關命令

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

  • 含義:增加地理位置信息

    • 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:將返回結果而的地理位置信息保存到指定鍵

  • storedist 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:將返回結果距離中心節點的距離保存到指定鍵

  •  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、echo 1.顯示普通字元串: 這裡的雙引號可以省略。 2.顯示轉義字元: 3.顯示變數: read 命令從標準輸入中讀取一行,並把輸入行的每個欄位的值指定給 shell 變數 輸出: 4.顯示換行: 輸出: 5.顯示不換行: 輸出: 6.顯示定向至文件: 輸出: 7.原樣輸出字元串,不進行轉義 ...
  • [20190505]ts 命令在哪裡.txt--//在論壇問一下ts命令在哪裡?沒人解答,自己也google看了一下:https://unix.stackexchange.com/questions/272433/piping-into-moreutils-ts-with-nanosecond-pr ...
  • 一、sdhci core說明 1、sdhci說明 具體參考《host(第一章)——概述》 SDHC:Secure Digital(SD) Host Controller,是指一套sd host控制器的設計標準,其寄存器偏移以及意義都有一定的規範,並且提供了對應的驅動程式,方便vendor進行host ...
  • 由於linux最小單位為分,但是很多需求上需要按秒執行,如30秒請求一個URL地址之類的,思路很簡單就是修改計劃任務腳本用迴圈控制,代碼如下: 上述代碼中XXXXXX為你需要執行的URL地址 以上示例以寶塔下計劃任務為基礎所演示 ...
  • 一、前言 1、簡介 在上一篇UART詳解中,已經有了關於UART的詳細介紹了,也有關於如何使用STM32CubeMX來配置UART的操作了,而在該篇博客,主要會講解一下如何實現UART串口的發送功能。 2、UART簡介 嵌入式開發中,UART串口通信協議是我們常用的通信協議之一,全稱叫做通用非同步收發 ...
  • 一、host簡單說明 host,也可以理解為host controller,是指mmc匯流排上的主機端,mmc匯流排的控制器,每個host controller對應一條mmc匯流排。 host controller會控制命令線、數據線和時鐘線,從而實現mmc匯流排上的通訊。 上層發送mmc請求時,就是通過h ...
  • 一、說明 1、mmc core概述 mmc core主模塊是mmc core的實現核心。也是本章的重點內容。 對應代碼位置 。 其主要負責如下功能: mmc core初始化,包括註冊mmc bus、mm host class等等 mmc host的管理和維護,包括為其他模塊提供mmc_host的操作 ...
  • 零、說明(重要,需要先搞清楚概念有助於後面的理解) 1、mmc core card相關模塊為對應card實現相應的操作,包括初始化操作、以及對應的匯流排操作集合。負責和對應card協議層相關的東西。 這裡先學習mmc type card。後續再學習sd type card。 對應代碼: 2、另外,這裡 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...