我想以優雅的方式緩存來自外部服務的數據:儘管舊數據已過期,但要等到工作人員成功獲取新數據時纔會提供。數據不是時間關鍵的,但缺乏數據(外部服務關閉)會阻止服務運行,因此使用持久性緩存。使用Python和Redis進行優雅緩存
目前
我存儲在一個單獨的Redis的關鍵
獲取時間戳我緩存無限期的數據,直到工人獲取新的(我不設置過期時間)
問題
這是使用Redis進行優雅緩存的正確方法嗎?
可我本身得到Redis的關鍵更新的時間戳,所以我並不需要存儲這些信息自己
這是代碼:
def set_data(self, data):
self.redis.set("bitcoinaverage", pickle.dumps(data))
self.redis.set("bitcoinaverage_updated", calendar.timegm(datetime.datetime.utcnow().utctimetuple()))
def get_data(self):
return pickle.loads(self.redis.get("bitcoinaverage"))
def is_up_to_date(self):
last_updated = datetime.utcfromtimestamp(self.redis.get("bitcoinaverage_updated"))
if not last_updated:
return False
return datetime.datetime.utcnow() < last_updated + self.refresh_delay
def tick(self):
""" Run a periodical worker task to see if we need to update.
"""
if not self.is_up_to_date():
self.update()
Wooaaah。我不知道Redis能做到這一切。幸運的是,我只有一個流程工作者,但是當我構建一些複雜的工作時,我會牢記這一點。 –