在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字符串处理之count()方法的使用
May 18 Python
python基于itchat实现微信群消息同步机器人
Feb 27 Python
使用Python生成XML的方法实例
Mar 21 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 Python
python接口自动化测试之接口数据依赖的实现方法
Apr 26 Python
python之拟合的实现
Jul 19 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
基于Python的Jenkins的二次开发操作
May 12 Python
pytorch加载自己的图像数据集实例
Jul 07 Python
深入理解python协程
Jun 15 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/12/05 PHP
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHP操作Memcache实例介绍
2013/06/14 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
详解如何使用nvm管理Node.js多版本
2019/05/06 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
深入理解Python装饰器
2016/07/27 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
中国好声音广告词
2014/03/18 职场文书
高中班主任评语大全
2014/04/25 职场文书
2015年化验员工作总结
2015/04/10 职场文书
聘任通知书
2015/09/21 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers