python简单模拟的本地轻量级缓存
思路:
字典的形式保存缓存数据,同时增加增加过期时间,如{'key':{'expire': 1524363282, 'data': 2}},但这样的话何时回收呢,如果单独起个程序扫描过期的数据清除key,貌似又过于复杂了,这里采用弱引用。
WeakValueDictionary的特性:如果value值没有强引用了,那么对应的记录就会被回收
所以还需要定义strongRef来强引用,并放入collections.deque来保持强引用,deque队列可定义大小,那么超过阀值的老元素就会被弹出,也就消除了强引用,也就会被马上回收
# coding: utf-8
import weakref, collections
class LocalCache():
notFound = object()
# list dict等不支持弱引用,但其子类支持,故这里包装了下
class Dict(dict):
def __del__(self):
pass
def __init__(self, maxlen=10):
self.weak = weakref.WeakValueDictionary()
self.strong = collections.deque(maxlen=maxlen)
@staticmethod
def nowTime():
return int(time.time())
def get(self, ke