在Python中使用AOP实现Redis缓存示例

越来越觉得的缓存是计算机科学里最NB的发明(没有之一),本文就来介绍了一下在Python中使用AOP实现Redis缓存示例,小伙伴们一起来了解一下

import redis

enable=True

#enable=False

def readRedis(key):

if enable:

r = redis.Redis(host='10.224.38.31', port=8690,db=0, password='xxxx')

val = r.get(key)

if val is None:

print "can not find data for KEY:%s \n" % (key)

return None

else:

print "====Get VALUE from Redis by KEY:%s \n" % ( key)

return pickle.loads(val)

else:

print "disable cache"

def writeRedis(key, val):

r = redis.Redis(host='10.224.38.31', port=8690,db=0, password='xxxx')

if val is None:

print "Val is None, don't save it to redis \n"

else:

r.set(key, pickle.dumps(val) )

r.expire(key, 60*60*24*7) #1week

print "====Write value of KEY:%s to redis \n" % (key)

import pickle, functools

def cache(f):

def wrapper(*args, **kwargs):

key = pickle.dumps((f.__name__, args, kwargs)).replace("\n","")

val = readRedis(key)

if val is None:

val = f(*args, **kwargs) # call the wrapped function, save in cache

writeRedis(key, val)

return val # read value from cache

functools.update_wrapper(wrapper, f) # update wrapper's metadata

return wrapper

@cache

def foo(n):

return n*2

foo(10) # first call with parameter 10, sleeps

foo(10) # returns immediately

foo(15) # returns immediately

foo(19) # returns immediately

以上是 在Python中使用AOP实现Redis缓存示例 的全部内容, 来源链接: utcz.com/z/333570.html

回到顶部