在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 urlopen()函数 示例分享
Jun 12 Python
Python 获取新浪微博的最新公共微博实例分享
Jul 03 Python
python中split方法用法分析
Apr 17 Python
Python的randrange()方法使用教程
May 15 Python
打包发布Python模块的方法详解
Sep 18 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
Python使用lambda表达式对字典排序操作示例
Jul 25 Python
python生成requirements.txt的两种方法
Sep 18 Python
使用python创建生成动态链接库dll的方法
May 09 Python
Python json格式化打印实现过程解析
Jul 21 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版微信自定义回复功能示例
2016/12/05 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
python变量命名的7条建议
2019/07/04 Python
python3实现mysql导出excel的方法
2019/07/31 Python
python、Matlab求定积分的实现
2019/11/20 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
python绘图模块之利用turtle画图
2021/02/12 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
节能标语大全
2014/06/21 职场文书
大学生交通专业求职信
2014/09/01 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
先进个人申报材料
2014/12/30 职场文书
皇城相府导游词
2015/02/06 职场文书
材料员岗位职责范本
2015/04/11 职场文书
2015年共青团工作总结
2015/05/15 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
pandas求平均数和中位数的方法实例
2021/08/04 Python
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript