import shelve
import time
from typing import Any def cache_data(key: str, data: Any, shelf_file: str = 'cache.db') -> None:
"""将数据缓存到本地 shelve 文件"""
with shelve.open(shelf_file) as shelf:
shelf[key] = {
'data': data,
'timestamp': time.time()
} def get_cached_data(key: str, max_age: int = 3600, shelf_file: str = 'cache.db') -> Any:
"""
从缓存中获取数据
max_age: 缓存有效期(秒), 默认1小时
返回: 缓存数据或 None(如果缓存不存在或过期)
"""
try:
with shelve.open(shelf_file) as shelf:
if key in shelf:
cached = shelf[key]
if time.time() - cached['timestamp'] <= max_age:
return cached['data']
else:
del shelf[key] # 删除过期缓存
except Exception as e:
print(f"缓存读取错误: {e}")
return None # 示例用法
if __name__ == "__main__":
# 模拟获取数据的函数
def get_expensive_data():
print("执行昂贵的数据获取操作...")
return {"result": "一些复杂计算的结果", "value": 42} cache_key = "expensive_data" # 尝试从缓存中获取数据
cached_result = get_cached_data(cache_key) if cached_result is None:
# 缓存不存在或过期, 获取新数据并缓存
result = get_expensive_data()
cache_data(cache_key, result)
print(f"已缓存新数据: {result}")
else:
# 使用缓存数据
print(f"使用缓存数据: {cached_result}")

shelve 的使用的更多相关文章

  1. python模块(shelve,xml,configparser,hashlib,logging)

    1.1shelve模块 shelve 模块比pickle模块简单,只有一个open函数,返回类似字典对象,可读可写:key必须为字符串, 而值可以是python所支持的数据类型. shelve模块主要 ...

  2. Shelve Instance 操作详解 - 每天5分钟玩转 OpenStack(38)

    Instance 被 Suspend 后虽然处于 Shut Down 状态,但 Hypervisor 依然在宿主机上为其预留了资源,以便在以后能够成功 Resume. 如果希望释放这些预留资源,可以使 ...

  3. python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re正则表达式)

    1.tiim模块,因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ print("time".ce ...

  4. shelve模块理解

    import shelve import sys def store_person(db): pid = input("Enter unique ID mnumber:") per ...

  5. pickle与shelve

    pickle Example 写入文件 import pickle integers = [1, 2, 3, 4, 5] with open('pickle-example.p', 'wb') as ...

  6. Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)

    OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")  改变当前脚本工作目 ...

  7. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  8. python pickle 和 shelve模块

    pickle和shelve模块都可以把python对象存储到文件中,下面来看看它们的用法吧 1.pickle 写: 以写方式打开一个文件描述符,调用pickle.dump把对象写进去 dn = {'b ...

  9. shelve模块

    #coding:utf-8 __author__ = 'similarface' #email:similarface@outlook.com ''' shelve模块: 映射容器 存储对象,被存储的 ...

  10. python(6)- shelve模块

    前面学习了pickle,这两个可以将数据持久化存储到硬盘上,在实际应用中,我们可能会多次将数据dump到同一文件里,试一下: import pickle data = {'k1':123, 'k2': ...

随机推荐

  1. ro在xe10.3上的安装

    在学习研究RO. RO9.2.101.1295在xe10.3上安装遇到新问题.记录处理的办法: 没有采用执行exe安装的方法.而是采用复制源代码后编译安装. 1.把生成的bpl.dcp安装到默认目录, ...

  2. WCHNET_SocketSend返回0x11原因及解决方法

    问题描述: TCPCLIENT模式使用WCHNET_SocketSend发送有概率会返回0x11 按wchnet.h定义为内存溢出错误. 异常分析: 通过WCHNET_QueryUnack查看,发现异 ...

  3. 从 Excel 到你的表格应用:数据验证功能的嵌入实践指南

    前言: 随着信息化的不断发展,传统表格软件已无法满足用户对便携性.数据自动化管理等日益复杂的要求,将电子表格与其他系统结合.开发自己的表格应用已成为愈发火热的趋势. 然而,当企业需要将 Excel 的 ...

  4. 为什么在 MySQL 中不推荐使用多表 JOIN?

    为什么在 MySQL 中不推荐使用多表 JOIN? 在 MySQL 中,虽然 JOIN 操作是关系型数据库的重要特性,用于从多个表中获取数据,但在某些场景下不推荐频繁使用多表 JOIN.以下是一些主要 ...

  5. 揭秘AI自动化框架Browser-use(二),如何构造大模型提示词

    在上一篇技术分析中,我们探讨了Browser-use框架如何实现页面元素标注.本文将聚焦于其提示词构造流程,揭示AI如何理解浏览器界面的核心机制. 上一篇-揭秘AI自动化框架Browser-use(一 ...

  6. 记录一次SpringBoot + Vue前后分离项目的部署流程

    前言 本教程使用黑马 SpringBoot3+Vue3全套视频教程 大事件项目作为前后端代码. 前置需要: mysql jdk redis nginx linux环境 打包 前端 构建项目命令 npm ...

  7. Spring JdbcTemplate操作数据库

    Spring JdbcTemplate操作数据库 源码 代码测试 pom.xml <?xml version="1.0" encoding="UTF-8" ...

  8. 自定义工具类之”判断两个集合中是否有一个相同的值-》CollectionUtils.containsAny(集合1,集合2)“

    判断两个集合中是否有一个相同的值 CollectionUtils.containsAny(集合1,集合2)就可以满足以下条件 两个集合中,只要有一个值相同就直接返回true 如:集合1:"1 ...

  9. 解决更新WIFI驱动后出现网络适配器黄色三角警告

    更新WIFI驱动后出现网络适配器黄色三角警告问题的解决方案 在更新 Intel 无线网卡驱动后,遇到了网络适配器异常的问题,尤其是在曾经安装/卸载过 VMware 的电脑上.本篇文章将详细介绍这个问题 ...

  10. 私有网盘部署-Cloudreve网盘

    前言 关于私有网盘,企业级网盘可选可道云,filebroser,seafile等.关于私有网盘,笔者推荐Cloudreve. 无论是从使用角度看,WebDa.离线下载.分享管理.文件检索,还是管理角度 ...