python 3中的一个简单缓存实用程序

simple_cache的Python项目详细描述


python 3中的一个简单的缓存实用程序。

简单缓存使用pickle模块编写任何 key : value对磁盘上的文件。

它是作为一种缓存http请求的简单方法编写的 本地使用。它可以用来缓存任何数据, 只要keys是散列的,values是 可腌制。

它还提供了一个decorator来直接缓存函数调用。

要求

只使用标准库,因此不存在依赖关系。

安装

pip install simple_cache

或者,如果您愿意,可以下载simple_cache.py文件并 在本地导入。

用法

每个缓存文件都包含一个字典,充当命名空间 为了那个缓存。在文件中,可以设置和检索任何key : value 根据需要配对。

设置密钥时,必须以秒为单位给出ttl值或生存时间。 此值确定该值被视为有效的时间量。 之后,该值将被视为已过期,并且不会返回。

调用不存在的缓存文件、不存在的密钥或过期的密钥 全部返回None

可以在密钥过期之前或之后使用新值设置密钥。

每当您向缓存请求一个值时,如果该值恰好已过期,则 从文件中删除。您也可以随时手动询问缓存文件, 删除所有当前过期的项目。

API

import simple_cache

使用decorator格式:

使用一个decorator对多个函数使用同一个缓存文件可能 引起问题。decorator使用函数的*args, **kwargs作为键, 因此,调用具有相同参数的不同函数将导致冲突。

可以使用decorator格式指定自定义文件名(和ttl),覆盖 默认值。

请注意,decorator格式只支持具有不可变类型的args和kwargs。 如果您的参数中有一个是可变的(例如列表或字典),那么decorator将不起作用。

@simple_cache.cache_it()    # uses defaults: filename = "simple.cache", ttl = 3600
def some_function(*args, **kwargs):
    # body
    return value
@simple_cache.cache_it(filename="some_function.cache", ttl=120)
def some_function(*args, **kwargs):
    # body
    return value

使用模块函数:

设置键和值:

simple_cache.save_key(filename, key, value, ttl)

检索值:

simple_cache.load_key(filename, key)

删除文件中的所有过期项:

simple_cache.prune_cache(filename)

从文件加载整个缓存字典(可能 用于调试或自省:

simple_cache.read_cache(filename)

将整个字典写入文件,覆盖任何 文件中以前的数据(可能用于初始化 通过批量写入多个项目进行缓存:

simple_cache.write_cache(filename, cache)

filename是包含有效文件名的字符串

key是任何哈希类型,并且在 每个缓存文件(否则将覆盖)

value是由pickle模块支持的任何python类型

ttl是一个整数或浮点数,表示秒数 项目将在到期前保持有效

cache是一个包含key:value对的字典

许可证

simple_cache在gplv3下是开源的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在安卓中使用动画旋转某些东西   排序如何对Java ArrayList进行排序   JAVAlang.OutOfMemoryError:使用Apache POI读取excel时的Java堆空间   java Tomcat 8.0.20内存不足错误   显式EntityManager之后@RequestScoped Bean中的java LazyInitializationException。发现   java对象到片段的通信   java DidRangeBeanConsinRegion并不总是在altBeacon库中工作   用java将xml配置文件应用到我的应用程序中的最佳方法是什么?   输入Java扫描器和字母   字符串Java解析输出的消息   使用pdfbox或其他java库从pdf文件中提取文本时,如何检查文本旋转?   java如何在与给定值相同的记录中找到值   运行时中的java更改工件版本   线程“awteventque0”java中的swing异常。lang.NumberFormatException:空   java为什么数组中的字符串不起作用?