외부 서비스의 데이터를 정상적으로 캐싱하고 싶습니다. 만료되었지만 이전 데이터가 작업자가 성공적으로 새 데이터를 가져올 때까지 서비스되고 있습니다. 데이터는 시간에 민감하지 않지만 데이터가 부족 (외부 서비스가 다운 됨)하면 서비스가 실행되지 않으므로 영구 캐시를 사용할 수 있습니다.Python과 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. 레디 스가이 모든 것을 할 수 있다는 것을 나는 몰랐다. 다행히도 단 하나의 프로세스 작업자 만 있지만 복잡한 작업을 할 때이를 명심해야합니다. –