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

yipeiwu_com6年前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', 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设计】。

相关文章

Python实现随机生成有效手机号码及身份证功能示例

Python实现随机生成有效手机号码及身份证功能示例

本文实例讲述了Python实现随机生成有效手机号码及身份证功能。分享给大家供大家参考,具体如下: 中国那么大,人那么多,几乎人手一部手机。手机号码已经作为各大互联网站的注册账户。同样,身...

django多对多表的创建,级联删除及手动创建第三张表

django多对多表的创建,级联删除及手动创建第三张表

创建一张作者表,author,创建外键与book表,多对多关系 ,外键字段放在那张表都可以, class Author(models.Model): name = models...

django的聚合函数和aggregate、annotate方法使用详解

支持聚合函数的方法: 提到聚合函数,首先我们要知道的就是这些聚合函数是不能在django中单独使用的,要想在django中使用这些聚合函数,就必须把这些聚合函数放到支持他们的方法内去执...

利用一个简单的例子窥探CPython内核的运行机制

我最近花了一些时间在探索CPython,并且我想要在这里分享我的一些冒险经历。Allison Kaptur的excellent guide to getting started with...

解析Python中的二进制位运算符

解析Python中的二进制位运算符

下表列出了所有的Python语言的支持位运算符。假设变量a持有60和变量b持有13,则: 示例: 试试下面的例子就明白了所有的Python编程语言提供了位运算符: #!/usr/...