在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 模拟购物车的实例讲解
Sep 11 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
python3+PyQt5实现文档打印功能
Apr 24 Python
django 删除数据库表后重新同步的方法
May 27 Python
Python paramiko模块使用解析(实现ssh)
Aug 30 Python
python多进程重复加载的解决方式
Dec 13 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
关于python中的xpath解析定位
Mar 06 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
编写python程序的90条建议
Apr 14 Python
Python实现socket库网络通信套接字
Jun 04 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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 中使用随机数的三个步骤
2006/10/09 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
面包屑导航详解
2017/12/07 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
如何通过python实现人脸识别验证
2020/01/17 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
学前教育专业毕业生自荐信
2013/10/03 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
教师个人年终总结
2015/02/11 职场文书
PHP实现两种排课方式
2021/06/26 PHP
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android