Python缓存神奇库cacheout全解,优于内存的性能

2024-05-05 03:32

本文主要是介绍Python缓存神奇库cacheout全解,优于内存的性能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

python的缓存库(cacheout)

项目: https://github.com/dgilland/cacheout

文档地址: https://cacheout.readthedocs.io

PyPI(下载链接): https://pypi.python.org/pypi/cacheout/

TravisCI(下载链接): https://travis-ci.org/dgilland/cacheout

特性:

后端使用字典进行缓存

使用缓存管理轻松访问多个缓存对象

当使用模块级缓存对象,重构运行时的缓存设置

最大缓存大小限制

默认的缓存时间设置以及缓存项自定义存活时间

批量的设置、获取、删除操作

线程安全

多种缓存机制的实现:

FIFO(先进先出)

LIFO(后进先出)

LRU (最近最少使用机制)

MRU (最近最多使用机制)

LFU (最小频率使用机制)

RR (随机替换机制)

解释一下,避免产生混淆,我在使用时就产生的歧义,后来通过小demo证实的!

LRU是删除最近最少使用的,保留最近最多使用的。

线路图:

层级缓存(多层级缓存)

支持缓存事件监听

获取缓存对象时的常规表示方法

获取缓存对象不存在时的回调处理支持

统计缓存

版本要求:

Python >= 3.4

安装:

pip install cacheout

通过创建一个缓存对象来开始了解:

# from cacheout import Cache# 如果选择LFUCache 就导入即可
from cacheout import LFUCache
cache = LFUCache()

默认的缓存的大小为256,默认存活时间是关闭的,这些属性可以如下设置:

cache = Cache(maxsize=256, ttl=0, timer=time.time, default=None) 

设置一个缓存可以通过cache.set():

cache.set(1, 'foobar')

获取缓存键的值通过:cache.get():

ret = cache.get(1)# 'foobar'

可以为每个键值对设置存活过期时间:

cache.set(3, {'data': {}}, ttl=1)
assert cache.get(3) == {'data': {}}
time.sleep(1)
assert cache.get(3) is None

为缓存函数提供了键值对的存活时间:

@cache.memoize()
def func(a, b):   pass

函数解除缓存:

@cache.memoize()
def func(a, b):   passfunc.uncached(1, 2)

复制机制:

assert cache.copy() == {1: 'foobar', 2: ('foo', 'bar', 'baz')}

删除缓存中的一个键值对

cache.delete(1)
assert cache.get(1) is None

清除整个缓存:

cache.clear()
assert len(cache) == 0

为get、set、delete设置了批量方法:

# 设置
cache.set_many({'a': 1, 'b': 2, 'c': 3})
# 获取
assert cache.get_many(['a', 'b', 'c']) 
# 删除cache.delete_many(['a', 'b', 'c'])
assert cache.count()

重置已经初始化的缓存对象

cache.configure(maxsize=1000, ttl=5 * 60)

通过cache.keys(), cache.values(), and cache.items()获取所有的键、值、以及键值对:

cache.set_many({'a': 1, 'b': 2, 'c': 3})
assert list(cache.keys()) == ['a', 'b', 'c']
assert list(cache.values()) == [1, 2, 3]
assert list(cache.items()) == [('a', 1), ('b', 2), ('c', 3)]

迭代整个缓存的键:

for key in cache:print(key, cache.get(key))# 'a' 1# 'b' 2# 'c' 3

检测键是否还存在于缓存中通过cache.has() and key in cache方法:

assert cache.has('a')
assert 'a' in cache

通过使用CacheManager来管理多个缓存对象:

from cacheout import CacheManager, LFUCache# 设置多个缓存, 并设置缓存机制
cacheman = CacheManager({'a': {'maxsize': 100},'b': {'maxsize': 200, 'ttl': 900},'c':{} },cache_class= LFUCache)cacheman['a'].set('key1', 'value1')
value = cacheman['a'].get('key')cacheman['b'].set('key2', 'value2')
assert cacheman['b'].maxsize == 200
assert cacheman['b'].ttl == 900cacheman['c'].set('key3', 'value3')cacheman.clear_all()
for name, cache in cacheman:assert name in cachemanassert len(cache) == 0

总结:
1、建立在内存上,其处理速度由于redis,等同于内存
2、可以设置过期时间,以及缓存容量大小,控制占用内存的大小
3、可以选择适合自己的机制,进一步优化优先策略,优于内存

Git代码: 公众号后台回复 python_sanic

 

这篇关于Python缓存神奇库cacheout全解,优于内存的性能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/960726

相关文章

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

一文带你搞懂Python中__init__.py到底是什么

《一文带你搞懂Python中__init__.py到底是什么》朋友们,今天我们来聊聊Python里一个低调却至关重要的文件——__init__.py,有些人可能听说过它是“包的标志”,也有人觉得它“没... 目录先搞懂 python 模块(module)Python 包(package)是啥?那么 __in

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调