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

转载:http://50vip.com/435.html

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

基本信息

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


使用场景

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

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

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

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

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

如何使用

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

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

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

安装方法

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

  2. 然后import wrapcache

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

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

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

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

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

1
2
3
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 。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值