成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文帶你了解 Redis 的慢日志相關(guān)底層原理

運(yùn)維 數(shù)據(jù)庫運(yùn)維 Redis
相信很多小伙伴在使用 Redis 的時候都知道 Redis 有相關(guān)慢日志的查詢功能,并且多多少少都看過。那 Redis 底層到底是如果創(chuàng)建慢日志以及慢日志的結(jié)構(gòu)是什么樣子的呢?這篇文章就帶大家認(rèn)識一下。

 01、前言

[[285578]]

相信很多小伙伴在使用 Redis 的時候都知道 Redis 有相關(guān)慢日志的查詢功能,并且多多少少都看過。那 Redis 底層到底是如果創(chuàng)建慢日志以及慢日志的結(jié)構(gòu)是什么樣子的呢?這篇文章就帶大家認(rèn)識一下。我們先看一張慢日志的截圖

 

 

使用slowlog get 2命令查看最近的兩條慢日志信息,如上圖,我們可以看到每條日志中包含的信息有六個部分組成,從上到下編號為 0-5,依次代表的意思是

 

 

0:日志的唯一編號 ID

1:命令執(zhí)行的當(dāng)前時間戳

2:命令執(zhí)行的耗時時長,單位微妙

3:具體的執(zhí)行命令和參數(shù)

4:客戶端的 ip 和端口(4.0 版本以上才支持)

5:客戶端名稱(4.0 版本以上支持)

如上圖所示,第一條慢日志的 ID 是 41,命令執(zhí)行的時間戳是 1575729996,并且執(zhí)行了 16129 微妙,具體執(zhí)行的命令就是slowlog get,ip 和端口是27.38.56.88:8223,客戶端的名稱沒有設(shè)置。

02、慢日志命令設(shè)置

查看命令

上面我們已經(jīng)大概的知道的一條慢日志的格式,自然的我們可以想到的問題是一個命令執(zhí)行多長時間,我們就可以認(rèn)為是慢查詢,以及慢日志最多能保存多少條。

我們可以通過config get slowlog-log-slower-than 命令來查看 Redis 的時長設(shè)置,以及通過config get slowlog-max-len 來查看最大慢日志條數(shù)。如下圖。

 

 

設(shè)置命令

 

上面我們使用config get 命令查看了時長設(shè)置和條數(shù)設(shè)置,相反的我們可以用config set來設(shè)置相關(guān)參數(shù),如下圖,我們先查看一下配置,然后再通過config set slowlog-log-slower-than 1000 命令和 config set slowlog-max-len 64 命令來設(shè)置具體的值:

 

 

 

 

通過上面的操作我們可以看到相關(guān)的配置已經(jīng)更改生效了。

  1. slowlog-log-slower-than:這個參數(shù)的意思是任何命令執(zhí)行超過這個時間就會被記錄為慢日志,單位是微秒。
  2. slowlog-max-len:這個參數(shù)表示記錄的慢日志的最大條數(shù),設(shè)置了這個值過后,新的日志加進(jìn)來,ID 最小的日志就會被刪除。

為了驗證上面的第二點,我這邊將slowlog-log-slower-than設(shè)置為 10 微秒,slowlog-max-len 設(shè)置為 5 條來進(jìn)行試驗,首先第一次使用slowlog get命令查詢的時候 5 條慢日志的編號是從 83-87,

 

 

 

 

再次使用slowlog get命令查詢的編號結(jié)果是84-88,說明 ID 為 83 的那一條已經(jīng)被刪除了。

 

 

 

 

03、慢日志的存儲原理

存儲結(jié)構(gòu)

 

  1. struct redisServer { 
  2. long long slowlog_entry_id;//下一條慢查詢?nèi)罩镜?nbsp;ID 
  3. list *slowlog;//保存了所有慢查詢?nèi)罩镜逆湵?nbsp;
  4. long long slowlog_log_slower_than;//服務(wù)器配置 slowlog-log-slower-than 選項的值 
  5. unsigned long slowlog_max_len;//服務(wù)器配置的 slowlog-max-len 的值 
  • 在 Redis 的服務(wù)器狀態(tài)中保存了慢日志的相關(guān)屬性slowlog_entry_id 屬性的初始值是 0 每創(chuàng)建一條慢日志的時候就會增加 1。
  • slowlog 鏈表里面存儲了所有的慢日志,鏈表是由slowlogEntry結(jié)構(gòu)組成的,每個slowlogEntry代表一條慢日志。
  • slowlog_log_slower_than 和 slowlog_max_len 是前面服務(wù)器配置的相關(guān)參數(shù)。

slowlog 鏈表

 

  1. typedef struct slowlogEntry { 
  2.     long long id;//唯一標(biāo)識符 
  3.     time_t time; //命令執(zhí)行的時間,格式為 unix 時間戳 
  4.     long long duration;//命令消耗的時間,以微秒為單位 
  5.     robj **argv;//命令與命令參數(shù) 
  6.     int argc; //命令與命令參數(shù)個數(shù) 
  7. } slowlogEntry; 

 

 

 

image-20191211220858341

slowlogEntry 實體的相關(guān)字段含義如下:

  • id: 標(biāo)識慢日志的唯一 ID
  • time: 命令執(zhí)行的時間戳
  • duration: 命令執(zhí)行是耗時,單位為微妙
  • agrv: 命令和參數(shù)數(shù)組
  • argc: 命令和參數(shù)的個數(shù)

如上圖就表示了在執(zhí)行命令set number 520 發(fā)生了慢日志,命令執(zhí)行耗時 10 微秒。

04、操作慢日志

知道了慢日志的存儲結(jié)構(gòu),我們就需要考慮在執(zhí)行命令的時候,如何根據(jù)條件去創(chuàng)建慢日志。

首先我們需要在命令的執(zhí)行前后記錄時間戳,然后相減計算出命令的執(zhí)行耗時,然后根據(jù) Redis 服務(wù)器配置slowlog-log-slower-than 進(jìn)行對比,決定是否記錄慢日志,另外在記錄慢日志的時候需要根據(jù)slowlog_max_len 值判斷是否要刪除最久的日志信息。偽代碼如下:

 

  1. //1. 記錄命令執(zhí)行前的時間戳 
  2. long before = now(); 
  3. //2. 執(zhí)行命令 
  4. execute(argv, argc); 
  5. //3. 記錄命令執(zhí)行后的時間戳 
  6. long after = now(); 
  7. //4. 調(diào)用創(chuàng)建慢日志函數(shù) 
  8. slowlogPushEntryIfNeed(argv, argc, after - before); 

slowlogPushEntryIfNeed 函數(shù)主要用來判斷是否插入數(shù)據(jù),以及是否刪除舊數(shù)據(jù)。

 

  1. void slowlogPushEntryIfNeed(robj **argv, int argc, long long duration) { 
  2. //1. 判斷是否開啟慢日志 
  3. if (server.slowlog_log_slower_than < 0) return
  4. //2. 如果超時,則插入慢日志 
  5.   if (duraton > server.slowlog_log_slower_than){ 
  6.     //插入 
  7.   } 
  8.   while (listLength(server.slowlog) > server.slowlog_max_len) { 
  9.     //刪除 
  10.   } 

我們先判斷服務(wù)器是否配置了超時參數(shù),如果超時參數(shù)小于 0 則直接返回,否則再比較命令執(zhí)行時間是否超時,如果超時則插入慢日志;最后在比較慢日志的條數(shù)是否達(dá)到上限,如果達(dá)到則進(jìn)行刪除。

05、總結(jié)

Redis 在日常工作中經(jīng)常會使用,其中還有很多細(xì)節(jié)需要我們慢慢研究和學(xué)習(xí),后續(xù)還會有其他內(nèi)容的相關(guān)文章,歡迎關(guān)注。

責(zé)任編輯:華軒 來源: Java極客技術(shù)
相關(guān)推薦

2020-01-02 09:57:09

Redis訂閱發(fā)布

2023-11-06 08:16:19

APM系統(tǒng)運(yùn)維

2022-11-11 19:09:13

架構(gòu)

2023-11-20 08:18:49

Netty服務(wù)器

2019-11-20 10:07:07

Redis數(shù)據(jù)系統(tǒng)

2023-10-27 08:15:45

2022-02-24 07:34:10

SSL協(xié)議加密

2023-11-08 08:15:48

服務(wù)監(jiān)控Zipkin

2022-12-20 07:39:46

2024-02-04 09:44:41

量子計算量子量子物理

2021-12-16 14:45:09

https架構(gòu)服務(wù)端

2022-09-29 13:09:38

DataClassPython代碼

2022-04-28 09:22:46

Vue灰度發(fā)布代碼

2020-10-08 14:32:57

大數(shù)據(jù)工具技術(shù)

2025-01-15 09:06:57

servlet服務(wù)器Java

2020-02-02 15:14:24

HTTP黑科技前端

2023-09-07 07:17:01

KubernetesCRI標(biāo)準(zhǔn)

2022-08-03 08:01:16

CDN網(wǎng)站服務(wù)器

2019-08-06 09:00:00

JavaScript函數(shù)式編程前端

2024-05-07 08:49:36

Hadoop數(shù)據(jù)存儲-分布式存儲
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美成人精品一区二区男人看 | 欧美激情五月 | 久久久精品国产 | www国产成人免费观看视频,深夜成人网 | 国产欧美日韩一区二区三区 | 欧美成人一区二免费视频软件 | 欧美一级大片免费看 | 亚洲精品视频二区 | 欧美日韩国产高清视频 | 成人免费在线观看 | 国产成都精品91一区二区三 | 成人精品国产免费网站 | 中文字幕乱码一区二区三区 | 亚洲国产日韩欧美 | 日韩第一页 | 国产剧情一区 | 成人在线视频网站 | 久久综合影院 | 99免费精品 | 久久午夜精品福利一区二区 | 黄色毛片大全 | 欧美黄色免费网站 | 在线91| 久久久www成人免费精品 | 在线中文字幕日韩 | 免费在线成人 | 亚洲美乳中文字幕 | 久久久久9999亚洲精品 | 欧美日韩精品久久久免费观看 | 久久国产精品一区二区三区 | 玖玖综合在线 | 亚洲成人网在线播放 | 国产精品视频网 | 午夜精品久久久久久久久久久久 | 中文字幕亚洲欧美日韩在线不卡 | 日韩在线免费播放 | av在线二区| 亚洲高清成人 | 日韩在线不卡 | www.久久久久久久久久久 | 欧美亚洲视频 |