`
flyfoxs
  • 浏览: 297468 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

在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

 

0
1
分享到:
评论

相关推荐

    在Python中使用AOP实现Redis缓存示例

    越来越觉得的缓存是计算机科学里最NB的发明(没有之一),本文就来介绍了一下在Python中使用AOP实现Redis缓存示例,小伙伴们一起来了解一下 import redis enable=True #enable=False def readRedis(key): if enable: ...

    Groovy应用(基本操作)

    这对于创建动态行为或者实现AOP(面向切面编程)非常有用。 通过以上讨论,我们可以看到Groovy在提升开发效率和代码可读性方面的优势。无论是快速原型开发,还是构建复杂的系统,Groovy都是一个值得考虑的工具。...

    基于SSM的爬虫系统,Spring+Spring MVC+MyBatis+Druid+Redis+MQ.zip

    这是一个基于Java技术栈的SSM(Spring、Spring MVC、MyBatis)爬虫系统,结合了Druid数据源和Redis缓存,以及消息队列MQ的实现。该项目提供了完整的源码,适合用作毕业设计参考,且已经在Windows 10/11环境下经过...

    jfinal开发手册

    AOP(面向切面编程)在JFinal中是通过Interceptor实现的,它包括Before、After等拦截器类型,并支持拦截器的触发顺序配置。它还支持动态增强技术以及注入拦截器来提高开发效率和维护性。 ActiveRecord是JFinal中...

    在线考试系统.rar

    在线考试系统是一个基于Java技术栈,利用SSM(Spring、SpringMVC、MyBatis)框架和Redis缓存实现的Web应用。这个系统的核心目标是为教育机构或个人提供一个便捷、高效的线上测试平台,支持创建、管理以及进行各种...

    java,python,大数据,js,javaWeb项目,数据库,等等集合所有教程

    10. **Redis**:内存数据存储,常用于缓存和消息队列。 11. **Maven**:项目管理工具,自动化构建、依赖管理和项目信息管理。 12. **Shiro**:安全框架,实现认证、授权、加密和会话管理。 13. **MySQL高级**:深入...

    秋招马上开始了,不知道怎么写简历的小伙伴快来这吧,这里有一个简洁而不简单的简历模板简历面试这里是一个狠标准的校招面试简历

    - 采用Redis实现数据查询缓存,减少查询延迟。 - 应用guava的布隆过滤器解决缓存穿透问题。 3. **手写简易Spring、SpringMVC框架** - 2022.05 ~ 2022.06 - 实现了IoC和AOP功能,模拟Spring容器的Bean实例化和...

    侯小益简历21.11

    他熟悉SpringCloud框架,理解Spring的IoC、AOP、DI实现。在Mybatis方面,他了解源码和ORM的底层实现。在数据库领域,他对MySQL的性能优化、索引优化、事务隔离、锁机制和MVCC有深入研究。他还掌握了Redis的数据结构...

    基于B/S架构及分布式的在线学习平台

    项目整体基于SprintBoot 2.1.5,模块间的通信基于Protobuf作为通信协议、GRPC作为远程调用服务,使用Spring AOP和log4j2作为日志系统,包括实现了基于Redis缓存的单点登录系统,基于Netty、Protobuf、WebSocket、...

    Web Frame

    例如,Spring Boot的缓存抽象支持多种缓存实现,包括Redis和Memcached。 综上所述,Web框架为Web开发提供了强大的支持,它们通过各种功能和工具,降低了开发复杂性,提高了代码质量和可维护性。理解并熟练掌握Web...

    基于ssm微信小程序的智能停车场管理系统源码数据库文档.zip

    9. **性能优化**:为提高系统响应速度和并发处理能力,可能涉及缓存策略(如Redis)、数据库索引优化、负载均衡等技术。 10. **测试与部署**:系统开发完成后,需要进行单元测试、集成测试和压力测试,确保所有功能...

    基于Java的在线购物系统的设计与实现(源代码+论文).zip

    9. **性能优化**:对于高并发场景,可能采用了缓存技术(如Redis)、负载均衡和集群部署来提高系统性能和稳定性。 10. **测试与部署**:项目开发完成后,会进行单元测试、集成测试和压力测试,确保系统功能的正确性...

    后台布局,框架学习

    例如,Spring框架的缓存抽象可以配合各种缓存技术如Redis,Express则可以通过中间件实现异步处理。 8. **测试与部署** 良好的后台框架应支持单元测试和集成测试,帮助开发者确保代码质量。同时,部署工具如Docker...

    专业程序员技术模板,供大家参考

    5. **数据库管理**:熟练使用MySQL,懂得索引优化和事务处理,对Redis的持久化机制有深入理解,了解缓存问题的解决方案。 6. **消息中间件**:熟悉RocketMQ,能处理消息的可靠性和幂等性问题,对RabbitMQ、Kafka有...

    Java面试中常见的面试问题及其答案

    - **使用缓存**:如Redis、Memcached等,减少数据库的压力。 - **使用消息队列**:如Kafka、RabbitMQ等,解耦系统,提高系统的伸缩性和可用性。 - **优化数据库查询**:如使用索引、合理设计表结构等。 - **负载均衡...

    基于Springboot+Vue的房价可视化监测系统源码+项目说明.zip

    [5] 通过 AOP 切面及自定义注解实现系统日志记录,可在系统管理页面查看操作日志。 [6] 集成 Druid 数据连接池、Screw 导出数据库结构、Swagger 生成接口文档。 [7] 通过 axios 请求后端接口,使用 VueX 缓存用户...

    2018BAT最新面试题(合集)

    在2018年的互联网巨头BAT(百度、阿里巴巴、腾讯)面试中,涵盖了一系列技术领域的热门问题,旨在考察应聘者的技术功底、解决问题的能力以及对最新技术趋势的理解。本合集整理了PHP、前端、Java、大数据和Python五个...

    基于springboot的认证权限仓库管理项目

    3. Java:是一种广泛使用的面向对象的编程语言,尤其在企业级应用开发中占据主导地位,具备良好的跨平台能力和丰富的库支持。 4. Spring:是Java后端开发中的一个核心框架,提供了依赖注入、AOP(面向切面编程)、...

    基于ssm+mysql停车场管理系统源码数据库论文.doc

    1. 使用SSM框架,通过面向切面编程(AOP)实现日志记录、事务管理等功能。 2. 利用缓存技术(如Redis)提高数据访问速度,减少数据库压力。 3. 结合物联网技术,如RFID或蓝牙感应,实现无感进出,提升用户体验。 4. ...

Global site tag (gtag.js) - Google Analytics