最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文搞懂Redis中的慢查詢?nèi)罩竞捅O(jiān)視器

 更新時(shí)間:2024年04月23日 10:27:31   作者:coffee_babe  
我們都知道MySQL有慢查詢?nèi)罩?但Redis也有慢查詢?nèi)罩?可用于監(jiān)視和優(yōu)化查詢,本文給大家詳細(xì)介紹了Redis中的慢查詢?nèi)罩竞捅O(jiān)視器,文章通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下

慢查詢

添加新日志

在每次執(zhí)行命令的之前和之后,程序都會(huì)記錄微妙格式的當(dāng)前UNIX時(shí)間戳,這兩個(gè)時(shí)間戳之間的差就是服務(wù)器執(zhí)行命令所耗費(fèi)的時(shí)長,服務(wù)器會(huì)將這個(gè)時(shí)長作為參數(shù)之一傳給slowlogPushEntryIfNeeded函數(shù),而slowlogPushEntryIfNeeded函數(shù)則負(fù)責(zé)檢查是否需要為這次執(zhí)行的命令創(chuàng)建慢查詢?nèi)罩尽?/p>

偽代碼過程

# 記錄執(zhí)行命令前的時(shí)間
before = unixtime_now_in_us()
# 執(zhí)行命令
execute_command(argv, argc, client)
# 記錄執(zhí)行命令后的時(shí)間
after = unixtime_now_in_us()
# 檢查是否需要?jiǎng)?chuàng)建新的慢查詢?nèi)罩?
slowlogPushEntryIfNeeded(argv, argc, after - before)

slowlogPushEntryIfNeeded函數(shù)的作用

  • 1.檢查命令的時(shí)長是否超過slowlog-log-slower-than選項(xiàng)設(shè)置的時(shí)間, 如果是的話,就為命令創(chuàng)建一個(gè)新的日志,并將新日志添加到slowlog鏈表的表頭
  • 2.檢查慢查詢?nèi)罩镜拈L度是否超過slowlog-max-len選項(xiàng)所設(shè)置的長度,如果是的話,那么將多出來的日志從slowlog鏈表中刪除掉

slowlogPushEntryIfNeeded函數(shù)的實(shí)現(xiàn)代碼:

void slowlogPushEntryIfNeeded(robj **argv, int argc, long long duration) {
// 慢查詢功能未開啟,直接返回
if (server.slowlog_log_slower_than < 0) return ;

// 如果執(zhí)行時(shí)間超過服務(wù)器設(shè)置的上限,那么將命令添加到慢查詢?nèi)罩?
if (duration >= server.slowlog_log_slower_than)
// 新日志添加到鏈表表頭
listAddNodeHead(server.slowlog, slowlogCreateEntry(argv, argc, duration));

// 如果日志數(shù)量過多,那么進(jìn)行刪除
while (listLength(server.slowlog) > server.slowlog_max_len)
listDelNode(server.slowlog, listLast(server.slowlog))

}

該函數(shù)根據(jù)傳入的參數(shù),創(chuàng)建一個(gè)新的慢查詢?nèi)罩?,并將redisServer.slowlog_entry_id的值增1

例子

舉個(gè)例子。假設(shè)服務(wù)器當(dāng)前保存的慢查詢?nèi)罩救鐖D所示,如果執(zhí)行以下命令:

127.0.0.1:6379> EXPIRE msg 10086
(integer) 1

服務(wù)器在執(zhí)行完這個(gè)EXPIRE命令之后,就會(huì)調(diào)用slowlogPushEntryIfNeeded函數(shù),函數(shù)將未EXPIRE命令創(chuàng)建一條id為7的慢查詢?nèi)罩?,并將這條新日志添加到slowlog鏈表的表頭如圖所示.注意,除了slowlog鏈表發(fā)生了變化之外,slowlog_entry_id的值也從7變?yōu)?了,之后,slowlogPushEntryIfNeeded函數(shù)發(fā)現(xiàn),服務(wù)器設(shè)定的最大慢查詢?nèi)罩緮?shù)目為5條,而服務(wù)器目前保存的慢查詢?nèi)罩緮?shù)目為6條,于是服務(wù)器將id為2的慢查詢?nèi)罩緞h除,讓服務(wù)器的慢查詢?nèi)罩緮?shù)量回到設(shè)定好的5條

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

監(jiān)視器

概述

通過執(zhí)行MONITOR命令,客戶端可以將自己變?yōu)橐粋€(gè)監(jiān)視器,實(shí)時(shí)地接收并打印出服務(wù)器當(dāng)前處理的命令請(qǐng)求的相關(guān)信息:

127.0.0.1:6379> MONITOR
OK
1713790637.787549 [0 127.0.0.1:60753] "PING"
1713790641.908992 [0 127.0.0.1:60753] "SET" "k1" "v1"
1713790645.044945 [0 127.0.0.1:60753] "SET" "k2" "v2"

每當(dāng)一個(gè)客戶端服務(wù)器發(fā)送一條命令請(qǐng)求時(shí),服務(wù)器除了會(huì)處理這條命令請(qǐng)求之外,還會(huì)將關(guān)于這條命令請(qǐng)求的信息發(fā)送給所有監(jiān)視器,如圖所示

在這里插入圖片描述

成為監(jiān)視器

發(fā)送MONITOR命令可以讓一個(gè)普通客戶端變?yōu)橐粋€(gè)監(jiān)視器,該命令的實(shí)現(xiàn)原理可以用以下偽代碼來實(shí)現(xiàn):

def MONITOR():
# 打開客戶端的監(jiān)視器狀態(tài)
client.flags |= REDIS_MONITOR

# 將客戶端添加到服務(wù)器狀態(tài)的monitors鏈表的末尾
server.monitor.append(client)

# 向客戶端返回OK
send_reply("OK")

例子

舉個(gè)例子,如果客戶端c10086向服務(wù)器發(fā)送MONITOR命令,那么這個(gè)客戶端的REDIS_MONITOR標(biāo)志會(huì)被打開,并且這個(gè)客戶端本身會(huì)被添加到monitors鏈表的表尾。假設(shè)客戶端c10086發(fā)送MONITOR之前,monitors鏈表的狀態(tài)如圖所示,那么在服務(wù)器執(zhí)行客戶端c10086發(fā)送的MONITOR命令之后,monitors鏈表將被更新為如圖所示的狀態(tài)

在這里插入圖片描述

向監(jiān)視器發(fā)送命令信息

服務(wù)器在每次處理命令請(qǐng)求之前,都會(huì)調(diào)用replicationFeedMonitors函數(shù),由這個(gè)函數(shù)將被處理的命令請(qǐng)求的相關(guān)信息發(fā)送給各個(gè)監(jiān)視器。以下是replicationFeedMonitors函數(shù)的偽代碼定義,函數(shù)首先根據(jù)傳入的參數(shù)創(chuàng)建信息,然后將信息發(fā)送給所有監(jiān)視器:

def replicationFeedMOnitors(client, monitors, dbid,argv, argc):
# 根據(jù)執(zhí)行命令的客戶端、當(dāng)前數(shù)據(jù)庫的號(hào)碼、命令參數(shù)、命令參數(shù)個(gè)數(shù)等參數(shù)
# 創(chuàng)建要發(fā)送給各個(gè)監(jiān)視器的信息
msg = create_message(client, dbid, argv, argc)

# 遍歷所有監(jiān)視器
for monitor in monitors:
# 將信息發(fā)送給監(jiān)視器
send_message(monitor, msg)

例子

舉個(gè)例子,假設(shè)服務(wù)器在時(shí)間1713791641.329412,根據(jù)IP為127.0.0.1、端口號(hào)為56604的客戶端發(fā)送的命令請(qǐng)求,對(duì)0號(hào)數(shù)據(jù)庫執(zhí)行命令KEYS*,那么服務(wù)器將創(chuàng)建以下信息:

1713791641.329412 [0 127.0.0.1:56604] "KEYS" "*"

如果服務(wù)器monitors鏈表的當(dāng)前狀態(tài)如圖上如c10086執(zhí)行命令之后所示,那么服務(wù)器會(huì)分別將信息發(fā)送給c128、c256、c512和c10086四個(gè)監(jiān)視器,如圖所示

在這里插入圖片描述

以上就是一文搞懂Redis中的慢查詢?nèi)罩竞捅O(jiān)視器的詳細(xì)內(nèi)容,更多關(guān)于Redis慢查詢?nèi)罩竞捅O(jiān)視器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • redis模糊批量刪除key的方法

    redis模糊批量刪除key的方法

    這篇文章主要介紹了redis模糊批量清除key的操作方法,包括命令行刪除和golang代碼刪除,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 基于Redis有序集合實(shí)現(xiàn)滑動(dòng)窗口限流的步驟

    基于Redis有序集合實(shí)現(xiàn)滑動(dòng)窗口限流的步驟

    滑動(dòng)窗口算法是一種基于時(shí)間窗口的限流算法,通過動(dòng)態(tài)地滑動(dòng)窗口,可以動(dòng)態(tài)調(diào)整限流的速率,Redis有序集合可以用來實(shí)現(xiàn)滑動(dòng)窗口限流,本文介紹基于Redis有序集合實(shí)現(xiàn)滑動(dòng)窗口限流,感興趣的朋友一起看看吧
    2024-12-12
  • 淺談redis內(nèi)存數(shù)據(jù)的持久化方式

    淺談redis內(nèi)存數(shù)據(jù)的持久化方式

    這篇文章主要介紹了淺談redis內(nèi)存數(shù)據(jù)的持久化方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • 淺析Redis如何保證數(shù)據(jù)不丟失

    淺析Redis如何保證數(shù)據(jù)不丟失

    Redis是一種Nosql類型的數(shù)據(jù)存儲(chǔ),全稱Remote?Dictionary?Server,也就是遠(yuǎn)程字典服務(wù)器,本文主要來和大家討論一下Redis如何保證數(shù)據(jù)不丟失,需要的可以參考下
    2024-02-02
  • Redis高并發(fā)超賣問題解決方案圖文詳解

    Redis高并發(fā)超賣問題解決方案圖文詳解

    Redis是一種基于內(nèi)存的數(shù)據(jù)存儲(chǔ)系統(tǒng),被廣泛用于解決高并發(fā)問題,下面這篇文章主要給大家介紹了關(guān)于Redis高并發(fā)超賣問題解決方案的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • redis服務(wù)器允許遠(yuǎn)程主機(jī)訪問的方法

    redis服務(wù)器允許遠(yuǎn)程主機(jī)訪問的方法

    今天小編就為大家分享一篇redis服務(wù)器允許遠(yuǎn)程主機(jī)訪問的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Redis?常見緩存問題總結(jié)

    Redis?常見緩存問題總結(jié)

    這篇文章主要給大家總結(jié)了一些Redis?常見緩存問題,并介紹了解決辦法,文中的圖文示例介紹的非常仔細(xì),感興趣的同學(xué)可以參考閱讀下
    2023-06-06
  • Redis 安裝 redistimeseries.so(時(shí)間序列數(shù)據(jù)類型)的配置步驟

    Redis 安裝 redistimeseries.so(時(shí)間序列數(shù)據(jù)類型)的配置步驟

    這篇文章主要介紹了Redis 安裝 redistimeseries.so(時(shí)間序列數(shù)據(jù)類型)詳細(xì)教程,配置步驟需要先下載redistimeseries.so 文件,文中介紹了啟動(dòng)失敗問題排查,需要的朋友可以參考下
    2024-01-01
  • 手把手教你用Redis 實(shí)現(xiàn)點(diǎn)贊功能并且與數(shù)據(jù)庫同步

    手把手教你用Redis 實(shí)現(xiàn)點(diǎn)贊功能并且與數(shù)據(jù)庫同步

    本文主要介紹了Redis 實(shí)現(xiàn)點(diǎn)贊功能并且與數(shù)據(jù)庫同步,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Redis 持久化機(jī)制的使用小結(jié)

    Redis 持久化機(jī)制的使用小結(jié)

    Redis提供了幾種持久化機(jī)制,可以在不同的應(yīng)用場(chǎng)景中選擇適合的方式來保存數(shù)據(jù),以確保即使Redis服務(wù)器重啟或發(fā)生故障,數(shù)據(jù)仍然不會(huì)丟失,下面就來一起了解一下
    2026-04-04

最新評(píng)論

闻喜县| 神农架林区| 襄垣县| 镇远县| 萨迦县| 宽甸| 东至县| 平和县| 浪卡子县| 宣威市| 蒙自县| 唐山市| 平塘县| 岗巴县| 柳州市| 桃源县| 双鸭山市| 陆川县| 南岸区| 庆安县| 宁安市| 淮安市| 湟源县| 海口市| 桐城市| 光山县| 孝义市| 东莞市| 汉沽区| 肇庆市| 漠河县| 叙永县| 大同县| 赣州市| 手游| 封丘县| 武定县| 交口县| 亳州市| 辰溪县| 富川|