ZBLOG

写一个 lru 缓存, 用python实现

以下是一个使用Python实现的简单LRU缓存:

class LRUCache:
    def __init__(self, capacity):
        self.capacity = capacity
        self.cache = {}
        self.key_order = []

    def get(self, key):
        if key in self.cache:
            self.key_order.remove(key)
            self.key_order.insert(0, key)
            return self.cache[key]
        else:
            return None

    def put(self, key, value):
        if key in self.cache:
            self.key_order.remove(key)
        elif len(self.cache) >= self.capacity:
            old_key = self.key_order.pop()
            del self.cache[old_key]
        self.cache[key] = value
        self.key_order.insert(0, key)

    def __str__(self):
        return str(self.cache)

LRUCache类有三个主要方法:get(获取缓存条目),put(放入新的缓存条目)和str(返回当前的缓存状态)。它还具有以下属性:

  • capacity:缓存可以容纳的最大数量。
  • cache:一个用于存储缓存条目的字典。
  • key_order:一个列表,其中包含缓存中所有键的顺序。该列表的第一个元素是最近使用的键。

在调用get(key)时,如果键存在于缓存中,则将其移动到key_order列表的开头以反映它是最近使用的键。如果键不存在,则返回None。

在调用put(key,value)时,如果指定的键已经存在于缓存中,则将其移到key_order的开头,并将其值更新为提供的值。否则,如果缓存已满,则将最后一个键从缓存中删除,并且也从key_order列表中删除。新的键/值对随后被添加到缓存和key_order列表中,并移动到其开头。

注意:这个实现不是线程安全的。在多线程环境下使用LRU缓存需要考虑同步问题。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=127

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?