本篇文章給大家介紹一下redis中的慢查詢和訂閱模式,希望對(duì)大家有所幫助!
慢查詢
慢查詢?nèi)罩揪褪窍到y(tǒng)在命令執(zhí)行時(shí)每條命令的執(zhí)行時(shí)間,當(dāng)超過(guò)閥值,就將這條命令記錄下來(lái)?!鞠嚓P(guān)推薦:redis】
redis命令執(zhí)行流程
-
發(fā)送命令
-
命令排隊(duì)
-
命令執(zhí)行
-
返回結(jié)果
其中命令執(zhí)行才是慢查詢統(tǒng)計(jì)的時(shí)間
慢查詢兩個(gè)配置參數(shù)
-
slowlog-log-slower-than:預(yù)設(shè)閥值,單位是毫秒,假如執(zhí)行一條“很慢”的命令,執(zhí)行時(shí)間超過(guò)閥值就會(huì)被記錄下來(lái)
-
slowlog-max-len:設(shè)置慢查詢?nèi)罩咀疃啻鎯?chǔ)多少條
發(fā)布訂閱模式
Redis提供了發(fā)布訂閱功能,可以用于消息的傳輸,Redis的發(fā)布訂閱機(jī)制包括三個(gè)部分,發(fā)布者,訂閱者和Channel。
發(fā)布訂閱功能
- 發(fā)送消息采用publish命令
- 訂閱某個(gè)頻道采用subscribe命令訂閱
- 模式匹配:同時(shí)訂閱多個(gè)頻道,命令是PSUBSCRIBE
Redis過(guò)期時(shí)間處理
-
主動(dòng)處理
定時(shí)處理,在設(shè)置過(guò)期時(shí)間的時(shí)候創(chuàng)建一個(gè)定時(shí)器,當(dāng)過(guò)期時(shí)間到的時(shí)候立馬執(zhí)行刪除操作,這個(gè)操作是即時(shí)的,不管在這個(gè)時(shí)間段內(nèi)有多少過(guò)期Key,也不管服務(wù)器運(yùn)行情況,都會(huì)被刪除,對(duì)CPU不是很友好。
定期刪除,定期刪除是設(shè)置一個(gè)時(shí)間間隔每個(gè)時(shí)間段都會(huì)檢測(cè)是否有過(guò)期鍵,如果有就執(zhí)行刪除,
-
被動(dòng)處理
當(dāng)已經(jīng)過(guò)期的key再次被訪問(wèn)時(shí),才會(huì)對(duì)key是否過(guò)期進(jìn)行判斷,如果已經(jīng)過(guò)期,則進(jìn)行刪除,并返回NIL.這種處理方式對(duì)CPU是友好的,不會(huì)對(duì)其他過(guò)期key上占用CPU,但對(duì)內(nèi)存不友好,一個(gè)key已經(jīng)過(guò)期,但是在它被操作前都不會(huì)被刪除,仍然占用內(nèi)存空間,如果有大量過(guò)期Key沒(méi)有被再次操作,則會(huì)浪費(fèi)大量?jī)?nèi)存空間。
3.RDB與AOF對(duì)過(guò)期鍵的處理
如果在執(zhí)行save或者bgsave命令創(chuàng)建一個(gè)RDB時(shí),程序會(huì)對(duì)數(shù)據(jù)庫(kù)中的鍵進(jìn)行檢查,已過(guò)期的鍵不會(huì)被保存到新創(chuàng)建的RDB文件中。
當(dāng)過(guò)期鍵被惰性刪除或者定期刪除之后,程序會(huì)向AOF文件追加(append)一條DEL命令,來(lái)顯式地記錄該鍵已被刪除。
在執(zhí)行AOF重寫的過(guò)程中,程序會(huì)對(duì)數(shù)據(jù)庫(kù)中的鍵進(jìn)行檢查,已過(guò)期的鍵不會(huì)被保存到重寫后的AOF文件中。
內(nèi)存回收
noeviction:默認(rèn)策略,不會(huì)刪除任何數(shù)據(jù),拒絕所有寫入操作并返回客戶端錯(cuò)誤信息,此時(shí)Redis只響應(yīng)讀操作。
volatitle-rlu:根據(jù)LRU算法刪除設(shè)置了超時(shí)屬性的鍵,知道騰出足夠空間為止。如果沒(méi)有可刪除的鍵對(duì)象,回退到noeviction策略。
allkeys-lru:根據(jù)LRU算法刪除鍵,不管數(shù)據(jù)有沒(méi)有設(shè)置超時(shí)屬性,直到騰出足夠空間為止。
allkeys-random:隨機(jī)刪除所有鍵,知道騰出足夠空間為止。
volatitle-random:隨機(jī)刪除過(guò)期鍵,知道騰出足夠空間為止。
volatitle-ttl:根據(jù)鍵值對(duì)象的ttl屬性,刪除最近將要過(guò)期數(shù)據(jù)。如果沒(méi)有,回退到noeviction策略
更多編程相關(guān)知識(shí),請(qǐng)?jiān)L問(wèn):redis??!