您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:16:49 python 字数 2557 阅读 354 来源 www.jb51.cc/python

越来越觉得的缓存是计算机科学里最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',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缓存示例全部内容,希望文章能够帮你解决在Python中使用AOP实现Redis缓存示例所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶