在Python中使用AOP实现Redis缓存示例
越来越觉得的缓存是计算机科学里最NB的发明(没有之一),本文就来介绍了一下在Python中使用AOP实现Redis缓存示例,小伙伴们一起来了解一下
importredis
enable=True
#enable=False
defreadRedis(key):
ifenable:
r=redis.Redis(host='10.224.38.31',port=8690,db=0,password='xxxx')
val=r.get(key)
ifvalisNone:
print"cannotfinddataforKEY:%s\n"%(key)
returnNone
else:
print"====GetVALUEfromRedisbyKEY:%s\n"%(key)
returnpickle.loads(val)
else:
print"disablecache"
defwriteRedis(key,val):
r=redis.Redis(host='10.224.38.31',port=8690,db=0,password='xxxx')
ifvalisNone:
print"ValisNone,don'tsaveittoredis\n"
else:
r.set(key,pickle.dumps(val))
r.expire(key,60*60*24*7)#1week
print"====WritevalueofKEY:%storedis\n"%(key)
importpickle,functools
defcache(f):
defwrapper(*args,**kwargs):
key=pickle.dumps((f.__name__,args,kwargs)).replace("\n","")
val=readRedis(key)
ifvalisNone:
val=f(*args,**kwargs)#callthewrappedfunction,saveincache
writeRedis(key,val)
returnval#readvaluefromcache
functools.update_wrapper(wrapper,f)#updatewrapper'smetadata
returnwrapper
@cache
deffoo(n):
returnn*2
foo(10)#firstcallwithparameter10,sleeps
foo(10)#returnsimmediately
foo(15)#returnsimmediately
foo(19)#returnsimmediately
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。