本文共 1347 字,大约阅读时间需要 4 分钟。
实现一个LRU缓存,要求线程安全。该缓存限制最大元素个数m,并提供三种方法:
当添加键值对到缓存时,如果添加后超过了最大元素个数m,则需要淘汰一个最近未“使用”的key及其对应的value,以保持缓存内的key的最大数量为m。
使用set、get和remove对一个key进行操作或访问时,都视为“使用”这个key。
Python的Orderdict是可以记录键值对插入顺序的特殊字典,适合该场景的使用:
from threading import RLockfrom collections import OrderedDictclass LRUMap(object): def __init__(self, size: int): self.size = size self.base = OrderedDict() self.lock = RLock() def get(self, key: int) -> str: self.lock.acquire() try: value = "" if key in self.base: value = self.base.pop(key) self.base[key] = value finally: self.lock.release() return value def set(self, key: int, value: str): self.lock.acquire() try: if key in self.base: self.base.pop(key) self.base[key] = value return if len(self.base) >= self.size: self.base.popitem(last=False) self.base[key] = value return self.base[key] = value finally: self.lock.release() return def remove(self, key): if key in self.base: self.base.pop(key) return
转载地址:http://idsoi.baihongyu.com/