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


Posted in Python onJuly 11, 2017

越来越觉得的缓存是计算机科学里最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中利用sqrt()方法进行平方根计算的教程
May 15 Python
Python基础入门之seed()方法的使用
May 15 Python
python多进程共享变量
Apr 06 Python
Python引用传值概念与用法实例小结
Oct 07 Python
python分析作业提交情况
Nov 22 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
浅谈python import引入不同路径下的模块
Jul 11 #Python
python 环境变量和import模块导入方法(详解)
Jul 11 #Python
Python编写登陆接口的方法
Jul 10 #Python
CentOS中升级Python版本的方法详解
Jul 10 #Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 #Python
Python 实现数据库更新脚本的生成方法
Jul 09 #Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 #Python
You might like
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
python读取word文档的方法
2015/05/09 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
python 实现登录网页的操作方法
2018/05/11 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
武汉高蓝德国际.net机试
2016/06/24 面试题
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
工作个人的自我评价
2014/01/14 职场文书
护士检查书
2014/01/17 职场文书
护理职业生涯规划书
2014/01/24 职场文书
世博会口号
2014/06/20 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
Golang日志包的使用
2022/04/20 Golang