在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使用django搭建web开发环境
Jun 09 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 Python
python的debug实用工具 pdb详解
Jul 12 Python
python从内存地址上加载python对象过程详解
Jan 08 Python
Python动态导入模块和反射机制详解
Feb 18 Python
python代码实现TSNE降维数据可视化教程
Feb 28 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
Keras实现DenseNet结构操作
Jul 06 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 Python
Python+uiautomator2实现自动刷抖音视频功能
Apr 29 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
2014/04/08 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
js Dialog 实践分享
2012/10/22 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
python字符串连接方式汇总
2014/08/21 Python
Python中Class类用法实例分析
2015/11/12 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
优秀毕业大学生推荐信
2013/11/13 职场文书
2013英文求职信模板范文
2013/11/15 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
三八节标语
2014/06/27 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers