网络编程
位置:首页>> 网络编程>> Python编程>> 在Python中使用AOP实现Redis缓存示例

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

作者:flyfoxs  发布时间:2021-09-12 11:18:45 

标签:Python,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

来源:http://flyfoxs.iteye.com/blog/2383929?utm_source=tuicool&utm_medium=referral

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com