资讯专栏INFORMATION COLUMN

一个轻量级 Python 装饰器的缓存库——wrapcache

马永翠 / 2997人阅读

摘要:自己因为经常遇到这种场景,所以将其封装成一个库,方便使用。如何使用使用简单,只需要要在方法上面加一个装饰器即可缓存,并且设置缓存过期时间。以上即可,第一次运行需要秒,第二次运行过期时间秒之内瞬间给出缓存结果。适合于小场景的方法缓存。

A python Function / Method OUTPUT cache system base on function Decorators.

基本信息

github 地址:https://github.com/hustcc/wrapcache

使用场景

经常会在某些很小的场合需要缓存一些数据,提高一些性能,而这种缓存又不是经常需要,比如:

两个进程共享数据库,其中只读进程读取数据做一些操作,这个时候,可以将数据库内容缓存一下,避免重复读数据库;

一个web页面数据太多,然而页面并不需要完全的实时性,这个时候就可以将页面内容完全缓存,在过期时间之后,不读数据库,不进行大量计算,这种在一些报告页面非常常见。

这两个场景其实挺常见的,要完成也不难,无非就是存到python 字段,加一个时间戳,判断过期,如果是redis,就直接存redis,并赋予timeout时间就ok了。

自己因为经常遇到这种场景,所以将其封装成一个python库,方便使用。

如何使用

使用简单,只需要要在方法上面加一个装饰器即可缓存,并且设置缓存过期时间。

import wrapcache
@wrapcache.wrapcache(timeout = 60)
def need_cache_function(input, t = 2, o = 3):
    sleep(2)
    return random.randint(1, 100)

以上即可,第一次运行需要 2 秒,第二次运行(过期时间 60 秒之内)瞬间给出缓存结果。适合于小场景的方法缓存。

安装方法

首先 pip install wrapcache,支持python2和python3。

然后import wrapcache

最后在需要缓存的方法上加上装饰器即可@wrapcache.wrapcache(timeout = 3)

其中 @wrapcache.wrapcache(timeout = 3, adapter = RedisAdapter) 有两个参数:

timeout, 过期时间,默认为-1,不缓存数据

adapter,存储器,默认为MemoryAdapter(存到python的全局字典中),可选RedisAdapter(存储到redis中)

注意:如果选择adapter = RedisAdapter,则需要在使用前设置redis市里 调用 RedisAdapter.db = redis_instance

REDIS_CACHE_POOL = redis.ConnectionPool(host = "xx.xxx.xx.xxx", port = 6379, password = "redis_pwd", db = 2)
REDIS_CACHE_INST = redis.Redis(connection_pool = REDIS_CACHE_POOL, charset = "utf8")
RedisAdapter.db = REDIS_CACHE_INST #初始化装饰器缓存
TODO

目前是使用内存 dict 和 redis 存储缓存,后续要支持将 memcached 等服务器中,只需要补充 adapter 中代码,实现对应方法即可

欢迎 push requst 和 issue 。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61760.html

相关文章

  • 一个量级 Python 装饰的缓存库——wrapcache

    摘要:自己因为经常遇到这种场景,所以将其封装成一个库,方便使用。如何使用使用简单,只需要要在方法上面加一个装饰器即可缓存,并且设置缓存过期时间。以上即可,第一次运行需要秒,第二次运行过期时间秒之内瞬间给出缓存结果。适合于小场景的方法缓存。 A python Function / Method OUTPUT cache system base on function Decorators. 基...

    gekylin 评论0 收藏0
  • Python】一文弄懂python装饰器(附源码例子)

    摘要:装饰器的使用符合了面向对象编程的开放封闭原则。三简单的装饰器基于上面的函数执行时间的需求,我们就手写一个简单的装饰器进行实现。函数体就是要实现装饰器的内容。类装饰器的实现是调用了类里面的函数。类装饰器的写法比我们装饰器函数的写法更加简单。 目录 前言 一、什么是装饰器 二、为什么要用装饰器 ...

    liuchengxu 评论0 收藏0
  • python装饰器的原理和使用

    摘要:我们以测量函数运行时间为例来讲一讲装饰器的运行原理。三更加通用的装饰器前面两部分讲了装饰器的原理,这一部分就讲讲要写出一个通用的装饰器需要注意的问题。首先就是参数的问题,装饰器返回的函数不是原来的函数,函数的签名也就和原来的函数签名不一样。 一、最简单的装饰器 装饰器是python中很基础也很实用的一个特性。通过装饰器我们可以很方便地为一些函数添加相同的功能。我们以测量函数运行时间为例...

    goji 评论0 收藏0
  • python 多个装饰器的调用顺序

    摘要:如果不使用装饰器的话,普通的做法可能是在中写一堆校验代码来判断用户是否登录,然后决定后面的执行逻辑,这样比较麻烦。 前言 装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^ 使用场景 可以用到装饰器的地方有很多,简单的举例如以下场景 引入日志 函数执行时间统计 执...

    wapeyang 评论0 收藏0
  • 说说Python中的闭包 - Closure

    摘要:闭包可以用来在一个函数与一组私有变量之间创建关联关系。夹带私货外部变量返回的是函数,带私货的函数支持将函数当成对象使用的编程语言,一般都支持闭包。所以说当你的装饰器需要自定义参数时,一般都会形成闭包。 Python中的闭包不是一个一说就能明白的概念,但是随着你往学习的深入,无论如何你都需要去了解这么一个东西。 闭包的概念 我们尝试从概念上去理解一下闭包。 在一些语言中,在函数中可以(嵌...

    leon 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<