python實(shí)現(xiàn)LRU熱點(diǎn)緩存及原理
LRU
LRU(Least recently used,最近最少使用)算法根據(jù)數(shù)據(jù)的歷史訪(fǎng)問(wèn)記錄來(lái)進(jìn)行淘汰數(shù)據(jù),其核心思想是“如果數(shù)據(jù)最近被訪(fǎng)問(wèn)過(guò),那么將來(lái)被訪(fǎng)問(wèn)的幾率也更高”。
基于列表+Hash的LRU算法實(shí)現(xiàn)。
- 訪(fǎng)問(wèn)某個(gè)熱點(diǎn)時(shí),先將其從原來(lái)的位置刪除,再將其插入列表的表頭
- 為使讀取及刪除操作的時(shí)間復(fù)雜度為O(1),使用hash存儲(chǔ)熱點(diǎn)的信息的鍵值
class LRUCaceh():
def __init__(self, size=5):
'''
默認(rèn)隊(duì)列的長(zhǎng)度為5
使用列表來(lái)維護(hù),使用字典來(lái)查詢(xún)
'''
self.size = size
self.cache = dict()
self.key = []
def get(self, key):
'''
獲取緩存中的key的值
'''
if self.cache.get(key):
self.key.remove(key)
self.key.insert(0, key)
return self.cache[key]
return None
def set(self, key, value):
'''
設(shè)置緩存,實(shí)現(xiàn)緩存淘汰
'''
if self.cache.get(key):
self.cache.pop(key)
self.cache[key] = value
self.key.remove(key)
self.key.insert(0, key)
elif len(self.key) == self.size:
old_key = self.key.pop()
self.key.insert(0, key)
self.cache.pop(old_key)
self.cache[key] = value
else:
self.key.insert(0, key)
self.cache[key] = value
總結(jié)
以上所述是小編給大家介紹的python實(shí)現(xiàn)LRU熱點(diǎn)緩存及原理,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
python實(shí)現(xiàn)模擬器爬取抖音評(píng)論數(shù)據(jù)的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)模擬器爬取抖音評(píng)論數(shù)據(jù)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
pyqt5?子線(xiàn)程如何操作主線(xiàn)程GUI(示例代碼)
這篇文章主要介紹了pyqt5?子線(xiàn)程如何操作主線(xiàn)程GUI,在使用pyqt5編寫(xiě)gui時(shí)遇到兩個(gè)問(wèn)題,會(huì)導(dǎo)致界面崩潰,今天就圍繞這兩個(gè)問(wèn)題來(lái)簡(jiǎn)單說(shuō)明和改進(jìn),需要的朋友可以參考下2024-05-05
python讀取二進(jìn)制mnist實(shí)例詳解
這篇文章主要介紹了python讀取二進(jìn)制mnist實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05

