题目描述
实现一个LRU缓存,要求线程安全。该缓存限制最大元素个数m,并提供三种方法:
- set:向这个缓存添加(整数key,字符串value对)
- get:根据指定的整数key查询其对应的字符串value。如果key不存在,则返回空字符串
- remove:删除指定的整数key及其对应的value
当添加键值对到缓存时,如果添加后超过了最大元素个数m,则需要淘汰一个最近未“使用”的key及其对应的value,以保持缓存内的key的最大数量为m。使用set、get和remove对一个key进行操作或访问时,都视为“使用”这个key。
使用Orderdict解决
Python的Orderdict是可以记录键值对插入顺序的特殊字典,适合该场景的使用:
from threading import RLock
from collections import OrderedDict
class 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.ba