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脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Kafka拦截器的神奇操作方法

《Kafka拦截器的神奇操作方法》Kafka拦截器是一种强大的机制,用于在消息发送和接收过程中插入自定义逻辑,它们可以用于消息定制、日志记录、监控、业务逻辑集成、性能统计和异常处理等,本文介绍Kafk... 目录前言拦截器的基本概念Kafka 拦截器的定义和基本原理:拦截器是 Kafka 消息传递的不可或缺

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做