Skip to content

Instantly share code, notes, and snippets.

@pistatium
Created June 19, 2015 09:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pistatium/ba43221b4e9764ac7820 to your computer and use it in GitHub Desktop.
Save pistatium/ba43221b4e9764ac7820 to your computer and use it in GitHub Desktop.
関数をRedisでキャッシュするためのデコレータ
# coding: utf-8
from __future__ import absolute_import, division, print_function
import pickle
import functools
import redis
def cache(expire_time=1200):
"""
@param expire_time キャッシュ時間 sec
"""
def decorator(function):
@functools.wraps(function)
def wrapper(*args, **kwargs):
key = 'c:%s:%s:%s' % (function.__name__, str(args), str(kwargs))
slave = redis.Redis(host=REDIS_SLAVES_HOST)
saved_value = slave.get(key)
if saved_value:
return pickle.loads(saved_value)
else:
value = function(*args, **kwargs)
if value is not None:
master = redis.Redis(host=REDIS_MASTER_HOST)
master.setex(key, pickle.dumps(value), expire_time)
return value
return wrapper
return decorator
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment