【Python系列】Python 缓存机制

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 1. 环境准备
    • 2. 使用`functools.lru_cache`
    • 3. 使用`cachetools`
    • 4. 文件系统缓存
    • 5. 注意事项
    • 6. 结语

在软件开发中,缓存是一种常见的技术,用于存储重复请求的结果,以减少对原始数据源的访问次数,从而提高应用的性能和响应速度。Python 作为一种灵活的编程语言,提供了多种实现本地缓存的方法。本文将探讨 Python 中实现本地缓存的几种策略,并提供具体的代码示例。
在这里插入图片描述

1. 环境准备

在 Python 中实现缓存,我们可能会用到标准库中的functools.lru_cache装饰器,或者使用第三方库如cachetools。以下是安装cachetools的方法:

pip install cachetools

2. 使用functools.lru_cache

Python 标准库中的functools模块提供了一个非常有用的装饰器lru_cache,它可以实现最近最少使用(Least Recently Used,LRU)缓存。这意味着它会缓存最近调用的函数的结果,当缓存满了之后,会淘汰掉最久未被使用的缓存项。

以下是一个使用lru_cache的示例:

import functools@functools.lru_cache(maxsize=128)
def fibonacci(n):if n < 2:return nreturn fibonacci(n-1) + fibonacci(n-2)# 计算斐波那契数列的第10项
print(fibonacci(10))

在这个示例中,fibonacci函数的结果会被缓存,当再次请求相同的参数时,会直接从缓存中获取结果,而不是重新计算。

3. 使用cachetools

cachetools是一个提供多种缓存策略的第三方库。它支持 LRU、LFU(Least Frequently Used,最少使用频率)和 RR(Random Replacement,随机替换)等策略。

以下是一个使用cachetools实现 LRU 缓存的示例:

from cachetools import LRUCachedef expensive_function(x):# 模拟一个耗时的操作return x * xcache = LRUCache(maxsize=100)def cached_expensive_function(x):if x not in cache:cache[x] = expensive_function(x)return cache[x]# 使用缓存的函数
print(cached_expensive_function(4))
print(cached_expensive_function(4))  # 第二次调用将使用缓存的结果

在这个示例中,我们创建了一个LRUCache对象,并使用它来缓存expensive_function函数的结果。

4. 文件系统缓存

在某些情况下,我们可能需要将缓存数据持久化到文件系统中。这可以通过将数据序列化并存储到文件中来实现。以下是一个简单的文件系统缓存示例:

import json
import osCACHE_FILE = 'cache.json'def load_cache():if os.path.exists(CACHE_FILE):with open(CACHE_FILE, 'r') as f:return json.load(f)return {}def save_cache(cache):with open(CACHE_FILE, 'w') as f:json.dump(cache, f)cache = load_cache()def get_data(key):if key in cache:return cache[key]else:# 模拟获取数据的过程data = f"data for {key}"cache[key] = datasave_cache(cache)return data# 使用文件系统缓存
print(get_data("key1"))
print(get_data("key1"))  # 第二次调用将使用缓存的数据

在这个示例中,我们使用 JSON 文件作为缓存存储,并在需要时加载和保存缓存数据。

5. 注意事项

  • 缓存可以显著提高性能,但也需要合理配置缓存大小,避免占用过多内存或磁盘空间。
  • 缓存数据的一致性非常重要,特别是在多线程或多进程环境中,需要确保缓存的线程安全或进程安全。
  • 对于需要持久化的缓存,需要考虑数据的序列化和反序列化过程,以及文件 I/O 的性能。
    在这里插入图片描述

6. 结语

缓存是提高应用性能的有效手段之一。Python 提供了多种实现缓存的方法,从简单的内存缓存到复杂的分布式缓存系统。本文介绍的几种本地缓存实现方法,可以根据不同的需求和场景进行选择和应用。希望本文能够帮助读者更好地理解和使用 Python 中的缓存机制。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【一刷《剑指Offer》】面试题 49(案例):把字符串转换成整数

力扣对应题目链接&#xff1a;8. 字符串转换整数 (atoi) - 力扣&#xff08;LeetCode&#xff09; 一、《剑指Offer》对应内容 二、分析题目 根据题意&#xff0c;有以下四种字符需要考虑&#xff1a; 首部空格&#xff1a; 删除之即可。符号位&#xff1a; 三种情况&#xf…

计算机网络知识点面试总结3

#来自ウルトラマンゼロ&#xff08;赛罗&#xff09; 1 数据链路层功能 数据链路层在物理层提供的服务的基础上向网络层提供服务&#xff0c;其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层&#xff0c;其主要作用是加强物理层传输原始比特流的功能。…

【Day12】登录认证、异常处理

1 登录 先创建一个新的 controller 层&#xff1a;LoginController RestController public class LoginController {Autowiredprivate EmpService empService;// 注入PostMapping("/login")public Result login(RequestBody Emp emp) { // 包装对象Emp e empServic…

PyTorch的自动微分模块【含梯度基本数学原理详解】

文章目录 1、简介1.1、基本概念1.2、基本原理1.2.1、自动微分1.2.2、梯度1.2.3、梯度求导1.2.4、梯度下降法1.2.5、张量梯度举例 1.3、Autograd的高级功能 2、梯度基本计算2.1、单标量梯度2.2、单向量梯度的计算2.3、多标量梯度计算2.4、多向量梯度计算 3、控制梯度计算4、累计…

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.3 管理信息系统(MIS)-解读

系统架构设计师教程 第3章 信息系统基础知识-3.3 管理信息系统(MIS) 3.3.1 管理信息系统的概念3.3.1.1 部件组成3.3.1.2 结构分类3.3.1.2.1 开环结构3.3.1.2.2 闭环结构3.3.1.3 金字塔结构3.3.2 管理信息系统的功能3.3.3 管理信息系统的组成3.3.3.1 销售市场子系统3.3.3.2…

x86+FPGA+AI:地铁全线刷脸过闸,地铁智慧票务系统专用计算机

地铁全线刷脸过闸 | 可提供地铁智慧票务系统专用计算机 近日&#xff0c;成都地铁在全线网地铁车站正式上线“智慧票务”系统&#xff0c;全通道无接触式“戴口罩刷脸乘车”的通行方式优化了乘客出行效率、降低了疫情交叉感染风险&#xff0c;因此备受好评&#xff01; 01、地铁…

Unity UGUI 之 Image和Rawimage

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.Image是什么 Unity - 手册&#xff1a;图像 精灵格式是什么&#xff1f; 1.2重要参数 …

Linux的热插拔UDEV机制和守护进程

目录 一、Linux的热插拔UDEV机制 二、守护进程 2.1 守护进程概念和基本特点&#xff1a; 2.2 显示进程信息&#xff1a; 2.3 守护进程和后台进程的区别&#xff1a; 2.4 创建守护进程的步骤和守护进程的特征&#xff1a; 2.4.1 创建守护进程的步骤&#xff1a; 2.4.2 守…

系统级联调联试方案模板

目录 系统级联调联试方案 1. 引言 2. 准备工作 3. 测试策略 4. 测试案例设计 5. 测试执行 6. 缺陷管理 7. 风险评估 8. 测试总结 9. 后续行动 10. 附录 联调联试&#xff08;Integration and Testing&#xff09;是指在系统开发过程中&#xff0c;将各个子系统或模块…

查找多个关键词在单元格出现的位置(find函数)并且统计(count函数)和显示(lookup函数)对应的关键词

目的:从交易用途中统计E列中的村名出现的次数,并且分离出村和村小组。其中F列是所有村的名称(不重复),F列是所有小组的名称 1.使用find函数查询关键词在单元格中对应的位置 在G4单元格中输入如下公式:参数解释说明: Find_text:要查找的字符串即目标字符。 Within_text …

内网隧道——隧道技术基础

文章目录 一、正向连接与反向连接1.1 正向连接1.2 反向连接 二、端口转发三、端口映射四、端口复用五、代理和隧道的区别六、常见隧道穿透分类 环境&#xff1a; kali&#xff1a;192.168.92.6&#xff0c;MSF v6.3.25 win7&#xff1a;192.168.92.7 一、正向连接与反向连接 1…

androidkiller重编译apk失败的问题

androidkiller重编译apk失败 参考&#xff1a; https://blog.csdn.net/qq_38393271/article/details/127057187 https://blog.csdn.net/hkz0704/article/details/132855098 已解决&#xff1a;“apktool” W: invalid resource directory name:XXX\res navigation 关键是编译…

【Pytorch】RNN for Name Classification

参考学习来自&#xff1a; https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.htmlRNN完成姓名分类https://download.pytorch.org/tutorial/data.zip 导入库 import glob # 用于查找符合规则的文件名 import os import unicodedata import stri…

计算机网络参考模型与5G协议

目录 OSI七层参考模型OSI模型vsTCP/IP模型TCP/IP协议族的组成 OSI七层参考模型 分层功能应用层网络服务与最终用户的一个接口表示层数据的表示,安全,压缩会话层建立,管理,终止会话传输层定义传输数据的协议端口号,以及流控和差错校验网络层进行逻辑地址寻址,实现不同网路之间的…

【QT】窗口|菜单栏|菜单项|工具栏|状态栏|浮动窗口

目录 ​编辑 QT窗口 窗口分类 菜单栏 创建菜单栏&#xff0c;菜单&#xff0c;菜单项 菜单栏 菜单 菜单项 添加分割线 添加槽函数 ​编辑 添加快捷键 工具栏 停靠位置 浮动属性 移动属性 添加快捷项 ​编辑 状态栏 ​编辑 添加标签 添加进度表 ​编辑…

TIA博途中FBD功能块图和LAD梯形图进行相互转换的具体方法示例

TIA博途中FBD功能块图和LAD梯形图进行相互转换的具体方法示例 如下图所示&#xff0c;添加一个FC块&#xff0c;编程语言选择FBD&#xff0c;简单的编写一段程序&#xff0c; 如下图所示&#xff0c;右击该FC块&#xff0c;选择属性&#xff0c;进入&#xff0c; 如下图所示&am…

python运维实战-ssh工具

1. 功能描述 1.1 系统具有的功能描述 &#xff08;1&#xff09;连接服务器&#xff1a;用户可以通过系统连接到远程服务器&#xff0c;系统支持多个服务器配置&#xff0c;并且可以方便地管理这些配置。 &#xff08;2&#xff09;执行命令&#xff1a;用户可以在连接成功后…

RabbitMQ发布确认及交换机类型

RabbitMQ发布确认机制详解 一、引言 在消息队列&#xff08;MQ&#xff09;技术中&#xff0c;RabbitMQ因其稳定性、可靠性和易用性而受到广泛欢迎。为了确保消息的可靠传递&#xff0c;RabbitMQ提供了一系列高级特性&#xff0c;其中发布确认&#xff08;Publisher Confirms&…

配置kali 的apt命令在线安装包的源为国内源

目录 一、安装VMware Tools 二、配置apt国内源 一、安装VMware Tools 点击安装 VMware Tools 后&#xff0c;会加载一个虚拟光驱&#xff0c;里面包含 VMware Tools 的安装包 鼠标右键单击 VMware Tools 的安装包&#xff0c;点击复制到 点击 主目录&#xff0c;再点击选择…

C语言 ——— 写一个函数,调整 整型数组 中 奇数偶数的顺序

目录 题目要求 代码实现 题目要求 创建一个整型数组 自定义函数实现&#xff1a;调整该数组中数字的顺序&#xff0c;使得数组中所有的奇数位于数组的前半部分&#xff0c;数组中所有的偶数位于数组的后半部分 举例&#xff1a; 输入的整型数组为&#xff1a;[234,24,45,…