您好,登錄后才能下訂單哦!
如何通過慢查詢找到阻塞的命令?針對這個問題,今天小編總結這篇有關redis阻塞的文章,希望幫助更多想學習redis的同學找到更加簡單易行的辦法。
和Mysql一樣,Redis也有慢查詢記錄。當命令的執(zhí)行時間超過設定的值時,該命令就會記錄到慢查詢列表中。通過慢查詢,我們可以改進我們的程序。防止redis阻塞。
配置
慢查詢的配置參數(shù)有兩個:
slowlog-log-slower-than
slowlog-max-len
slowlog-log-slower-than用來設定一個閾值,單位為微妙,默認值為10000,即10毫秒。
當值設置為小于0時,任何命令都不會記錄;
當值等于0時,會記錄所有的命令。
slowlog-max-len表示最多記錄的條數(shù),默認為128,例如將它設為10,當有第11條慢查詢插入的話,那么隊頭的數(shù)據(jù)就會出列。
這兩個配置還支持動態(tài)配置,當項目剛剛開始時,訪問量不是很大時,可以將slow-log-slower-than的值設大些。當訪問量越來越大的時候,可能就需要將其值改小點。但我們不想停止redis服務,那么就可以動態(tài)的修改該配置。
127.0.0.1:6379> config set slowlog-log-slower-than 1000 OK # 在線修改配置 127.0.0.1:6379> config rewrite OK # 將修改的配置持久化到配置文件中
運維建議:當訪問量大的時候,一般我們建議將slowlog-log-slower-than設置為1000,或更小。當這個值為1000時,表示redis最多能支持1000個并發(fā)。
慢查詢查看
redis的慢查詢查看和mysql有區(qū)別,redis查看的話有專門的命令。
獲取慢查詢日志
slowlog get [n],n表示條數(shù),默認為10
127.0.0.1:6379> slowlog get 1) 1) (integer) 18004 2) (integer) 1589424642 3) (integer) 50 4) 1) "slowlog" 2) "get" 5) "127.0.0.1:58364" 6) "" 2) 1) (integer) 18003 2) (integer) 1589423805 3) (integer) 47 4) 1) "slowlog" 2) "get" 5) "127.0.0.1:58364" 6) "" ……
第一個參數(shù)是日志標識id號
第二個為發(fā)生時間戳
第三個為命令執(zhí)行的時間(微妙)
最后一個是命令及參數(shù)。
獲取慢查詢的長度
slowlog len
127.0.0.1:6379> slowlog len (integer) 128
清空慢查詢列表
127.0.0.1:6379> slowlog reset OK
將慢查詢日志持久化到mysql中
因為redis的長度有限制,所以在慢查詢很多的情況下,會出現(xiàn)丟失的情況。我們可以定時去redis取出慢查詢記錄列表,將其持久化到mysql中,防止這種情況發(fā)生。
偽代碼如下:
while (true) { $slowlen = $redis->slowlog('len'); $slowlogs = $redis->slowlog('get',$slowlen); $insSql = "INSERT INTO slowlog(exec_time,run_time,command) VALUES"; if (is_array($slowlogs) && count($slowlogs)) { foreach ($slowlogs as $slowlog) { $execTime = $slowlog[2]; $runTime = $slowlog[1]; $command = implode(' ', $slowlog[3]); $insSql .= "('$execTime', '$runTime','$command'),"; } $flag = mysqli_query($mysqli, substr($insSql, 0, -1)); if ($flag) { $redis->slowlog('reset'); } } unsleep(10000); }
以上就是通過慢查詢找到阻塞的命令的方法介紹,詳細使用情況還得要大家自己使用過才能知道具體要領。如果想閱讀更多相關內容的文章,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。