在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实现类似ftp传输文件的网络程序示例
Apr 08 Python
Python搜索引擎实现原理和方法
Nov 27 Python
python实现读Excel写入.txt的方法
Apr 29 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
对python程序内存泄漏调试的记录
Jun 11 Python
python的pip安装以及使用教程
Sep 18 Python
python制作mysql数据迁移脚本
Jan 01 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
在python中利用try..except来代替if..else的用法
Dec 19 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
Pycharm的Available Packages为空的解决方法
Sep 18 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
详解json在php中的应用
2018/09/30 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
提升jQuery的性能需要做好七件事
2016/01/11 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
python检测远程udp端口是否打开的方法
2015/03/14 Python
Python中的localtime()方法使用详解
2015/05/22 Python
Python中的字符串替换操作示例
2016/06/27 Python
python版学生管理系统
2018/01/10 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
Python面向对象进阶学习
2019/05/21 Python
Django密码系统实现过程详解
2019/07/19 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
python线程信号量semaphore使用解析
2019/11/30 Python
Django之腾讯云短信的实现
2020/06/12 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
主治医师岗位职责
2013/12/10 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
酒桌上的祝酒词
2015/08/12 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers