欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

redis定時刪除功能有哪些

redis定時刪除功能有哪些?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純热?,讓我們一起來看看吧?/p>

成都創(chuàng)新互聯(lián)公司長期為超過千家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為襄州企業(yè)提供專業(yè)的網站建設、做網站,襄州網站改版等技術服務。擁有10余年豐富建站經驗和眾多成功案例,為您定制開發(fā)。

Redis超時刪除三種可能的答案,它們分別代表了三種不同的刪除策略:

定時刪除:在設置鍵的過期時間的同時,創(chuàng)建一個定時器(timer),讓定時器在鍵的過期時間來臨時,立即執(zhí)行對鍵的刪除操作。

惰性刪除:放任鍵過期不管,但是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,如果過期的話,就刪除該鍵;如果沒有過期,就返回該鍵。

定期刪除:每隔一段時間,程序就對數據庫進行一次檢查,刪除里面的過期鍵。至于要刪除多少過期鍵,以及要檢查多少個數據庫,則由算法決定。

在這三種策略中,第一種和第三種為主動刪除策略,而第二種則為被動刪除策略。

定時刪除:

定時刪除策略對內存是最友好的:通過使用定時器,定時刪除策略可以保證過期鍵會盡可能快地被刪除,并釋放過期鍵所占用的內存。

另一方面,定時刪除策略的缺點是,它對CPU時間是最不友好的:在過期鍵比較多的情況下,刪除過期鍵這一行為可能會占用相當一部分CPU時間,在內存不緊張但是CPU時間非常緊張的情況下,將CPU時間用在刪除和當前任務無關的過期鍵上,無疑會對服務器的響應時間和吞吐量造成影響。

例如,如果正有大量的命令請求在等待服務器處理,并且服務器當前不缺少內存,那么服務器應該優(yōu)先將CPU時間用在處理客戶端的命令請求上面,而不是用在刪除過期鍵上面。

除此之外,創(chuàng)建一個定時器需要用到Redis服務器中的時間事件,而當前時間事件的實現方式——無序鏈表,查找一個事件的時間復雜度為O(N)——并不能高效地處理大量時間事件。

因此,要讓服務器創(chuàng)建大量的定時器,從而實現定時刪除策略,在現階段來說并不現實。

惰性刪除:

惰性刪除策略對CPU時間來說是最友好的:程序只會在取出鍵時才對鍵進行過期檢查,這可以保證刪除過期鍵的操作只會在非做不可的情況下進行,并且刪除的目標僅限于當前處理的鍵,這個策略不會在刪除其他無關的過期鍵上花費任何CPU時間。

惰性刪除策略的缺點是,它對內存是最不友好的:如果一個鍵已經過期,而這個鍵又仍然保留在數據庫中,那么只要這個過期鍵不被刪除,它所占用的內存就不會釋放。

在使用惰性刪除策略時,如果數據庫中有非常多的過期鍵,而這些過期鍵又恰好沒有被訪問到的話,那么它們也許永遠也不會被刪除(除非用戶手動執(zhí)行FLUSHDB),我們甚至可以將這種情況看作是一種內存泄漏——無用的垃圾數據占用了大量的內存,而服務器卻不會自己去釋放它們,這對于運行狀態(tài)非常依賴于內存的Redis服務器來說,肯定不是一個好消息。

舉個例子,對于一些和時間有關的數據,比如日志(log),在某個時間點之后,對它們的訪問就會大大減少,甚至不再訪問,如果這類過期數據大量地積壓在數據庫中,用戶以為服務器已經自動將它們刪除了,但實際上這些鍵仍然存在,而且鍵所占用的內存也沒有釋放,那么造成的后果肯定是非常嚴重的。

定期刪除:

從上面對定時刪除和惰性刪除的討論來看,這兩種刪除方式在單一使用時都有明顯的缺陷:

·定時刪除占用太多CPU時間,影響服務器的響應時間和吞吐量。

·惰性刪除浪費太多內存,有內存泄漏的危險。

定期刪除策略是前兩種策略的一種整合和折中:

·定期刪除策略每隔一段時間執(zhí)行一次刪除過期鍵操作,并通過限制刪除操作執(zhí)行的時長和頻率來減少刪除操作對CPU時間的影響。

·除此之外,通過定期刪除過期鍵,定期刪除策略有效地減少了因為過期鍵而帶來的內存浪費。

定期刪除策略的難點是確定刪除操作執(zhí)行的時長和頻率:

·如果刪除操作執(zhí)行得太頻繁,或者執(zhí)行的時間太長,定期刪除策略就會退化成定時刪除策略,以至于將CPU時間過多地消耗在刪除過期鍵上面。

·如果刪除操作執(zhí)行得太少,或者執(zhí)行的時間太短,定期刪除策略又會和惰性刪除策略一樣,出現浪費內存的情況。

過期鍵的定期刪除策略由redis.c/activeExpireCycle函數實現,每當Redis的服務器周期性操作redis.c/serverCron函數執(zhí)行時,activeExpireCycle函數就會被調用,它在規(guī)定的時間內,分多次遍歷服務器中的各個數據庫,從數據庫的expires字典中隨機檢查一部分鍵的過期時間,并刪除其中的過期鍵。

整個過程可以用偽代碼描述如下:

#
默認每次檢查的數據庫數量
DEFAULT_DB_NUMBERS = 16
#
默認每個數據庫檢查的鍵數量
DEFAULT_KEY_NUMBERS = 20
#
全局變量,記錄檢查進度
current_db = 0
def activeExpireCycle():
    #
初始化要檢查的數據庫數量
    #
如果服務器的數據庫數量比 DEFAULT_DB_NUMBERS
要小
    #
那么以服務器的數據庫數量為準
    if server.dbnum < DEFAULT_DB_NUMBERS:
        db_numbers = server.dbnum
    else:
        db_numbers = DEFAULT_DB_NUMBERS
    #
遍歷各個數據庫
    for i in range(db_numbers):
        #
如果current_db
的值等于服務器的數據庫數量
        #
這表示檢查程序已經遍歷了服務器的所有數據庫一次
        #
將current_db
重置為0
,開始新的一輪遍歷
        if current_db == server.dbnum:
            current_db = 0
        #
獲取當前要處理的數據庫
        redisDb = server.db[current_db]
        #
將數據庫索引增1
,指向下一個要處理的數據庫
        current_db += 1
        #
檢查數據庫鍵
        for j in range(DEFAULT_KEY_NUMBERS):
            #
如果數據庫中沒有一個鍵帶有過期時間,那么跳過這個數據庫
            if redisDb.expires.size() == 0: break
            #
隨機獲取一個帶有過期時間的鍵
            key_with_ttl = redisDb.expires.get_random_key()
            #
檢查鍵是否過期,如果過期就刪除它
            if is_expired(key_with_ttl):
                delete_key(key_with_ttl)
            #
已達到時間上限,停止處理
            if reach_time_limit(): return

activeExpireCycle函數的工作模式可以總結如下:

·函數每次運行時,都從一定數量的數據庫中取出一定數量的隨機鍵進行檢查,并刪除其中的過期鍵。

·全局變量current_db會記錄當前activeExpireCycle函數檢查的進度,并在下一次activeExpireCycle函數調用時,接著上一次的進度進行處理。比如說,如果當前activeExpireCycle函數在遍歷10號數據庫時返回了,那么下次activeExpireCycle函數執(zhí)行時,將從11號數據庫開始查找并刪除過期鍵。

·隨著activeExpireCycle函數的不斷執(zhí)行,服務器中的所有數據庫都會被檢查一遍,這時函數將current_db變量重置為0,然后再次開始新一輪的檢查工作。

感謝各位的閱讀!看完上述內容,你們對redis定時刪除功能有哪些大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網頁標題:redis定時刪除功能有哪些
URL鏈接:http://chinadenli.net/article32/joiisc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供電子商務、網頁設計公司網站排名手機網站建設、移動網站建設標簽優(yōu)化

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站制作
人人妻在人人看人人澡| av免费视屏在线观看| 欧美加勒比一区二区三区| 丰满的人妻一区二区三区| 久久精品国产一区久久久| 亚洲av专区在线观看| 激情视频在线视频在线视频| 好吊色欧美一区二区三区顽频| 日韩欧美一区二区久久婷婷| 日韩人妻一区二区欧美| 高中女厕偷拍一区二区三区| 欧美日韩国产自拍亚洲| 中文字幕在线五月婷婷| 精品人妻av区波多野结依| 国产精品免费福利在线| 深夜视频在线观看免费你懂| 亚洲天堂有码中文字幕视频| 日本特黄特色大片免费观看| 欧美一区二区不卡专区| 欧美精品亚洲精品日韩精品| 欧洲偷拍视频中文字幕| 夜夜嗨激情五月天精品| 日本丁香婷婷欧美激情| 加勒比东京热拍拍一区二区| 欧美日韩国产精品自在自线| 国产高清在线不卡一区| 亚洲男人的天堂久久a| 天堂网中文字幕在线视频| 成人免费观看视频免费| 一区二区福利在线视频| 亚洲伦片免费偷拍一区| 国产丝袜女优一区二区三区| 日本不卡在线视频中文国产| 欧美精品久久男人的天堂| 91精品国产av一区二区| 久草国产精品一区二区| 青青久久亚洲婷婷中文网| 欧美一区二区三区十区| 亚洲中文字幕乱码亚洲| 又黄又硬又爽又色的视频| 日本一区不卡在线观看|