TimedCache 类的作用和使用

本文介绍了TimedCache类,一个用于实现具有过期时间的缓存,以提高程序性能并减少数据库访问。文章详细讲解了创建、添加、获取、移除和清空缓存的操作方法,以及示例代码演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
TimedCache 类的作用是实现一个带有过期时间的缓存。它允许存储键值对,并在一定时间后自动删除过期的键值对。使用 TimedCache 可以提高程序的性能,减少对数据库或其他资源的访问次数。

使用 TimedCache 类时,可以按照以下步骤进行操作:

  1. 创建一个 TimedCache 对象:可以指定缓存的容量和默认的过期时间。
  2. 向缓存中添加键值对:使用 put(key, value) 方法将键值对添加到缓存中。可以选择性地指定键值对的过期时间,如果没有指定,则使用默认的过期时间。
  3. 从缓存中获取值:使用 get(key) 方法从缓存中获取指定键的值。如果键不存在或已过期,则返回 null。
  4. 从缓存中移除键值对:使用 remove(key) 方法从缓存中移除指定的键值对。
  5. 清空缓存:使用 clear() 方法清空缓存,删除所有的键值对。

以下是一个示例代码:

// 创建一个容量为 100 的 TimedCache 对象,设置默认的过期时间为 10 分钟
TimedCache<String, Integer> cache = new TimedCache<>(100, 10 * 60 * 1000);

// 向缓存中添加键值对,过期时间为 5 分钟
cache.put("key1", 1, 5 * 60 * 1000);

// 从缓存中获取值
Integer value = cache.get("key1");
System.out.println(value); // 输出:1

// 从缓存中移除键值对
cache.remove("key1");

// 清空缓存
cache.clear();

以上是 TimedCache 类的基本使用方法,根据具体需求,可以根据需要进行更多的操作,如设置不同的过期时间、自定义缓存的淘汰策略等。

### STM32 DCACHE 的配置及使用 #### 什么是数据缓存 (Data Cache, DCACHE)? 在 ARM Cortex-M7 架构中,DCACHE 是一种用于加速数据访问的硬件机制。它通过存储最近使用的数据副本减少对外部内存的频繁访问时间[^1]。对于像 STM32H7 这样的高性能微控制器来说,合理利用 DCACHE 可显著提升程序性能。 #### 如何启用配置 DCACHE? STM32CubeMX 提供了一种简单的方式来管理 CPU 缓存设置。以下是关于如何配置 DCACHE 的说明: 1. **打开 STM32CubeMX 工具并加载项目**: 启动 STM32CubeMX 并导入目标 MCU 型号(如 STM32H743VI)。 2. **进入 RCC 系统核心设置页面**: 在 “Clock Configuration” 页面下找到与 D-Cache/I-Cache 相关选项。通常这些选项位于高级设置区域。 3. **激活 Data Cache 功能**: 将 `D-Cache` 设置为 Enabled 或者 Bypassed Based On Address Map 根据具体需求调整[^2]。如果希望完全禁用,则可以选择 Disabled。 4. **生成代码并查看初始化函数**: 完成以上步骤后点击 Generate Code 按钮,在自动生成的 HAL 库文件夹中的 `main.c` 文件里可以看到有关 cache 初始化的部分逻辑实现如下所示: ```c /* Enable I-Cache */ HAL_ICACHE_Enable(); /* Enable D-Cache */ HAL_DCACHE_Enable(); ``` 这段代码片段展示了如何分别使能指令缓存(Instrution Cache)以及数据缓存(Data Cache)[^3]。 #### 注意事项 - 如果应用程序涉及大量 DMA 数据传输或者外部设备接口操作时需特别小心处理cache一致性问题。 - 对于某些特定场合可能还需要手动调用相应的 API 函数来刷新/清理缓存行以确保最新版本的数据被写回到实际物理地址空间之中去比如可以使用下面这样的API来进行局部范围内的清除工作: ```c /* Invalidate entire data cache */ SCB_InvalidateDCache_by_Addr((uint32_t*)&bufferStartAddress, bufferLength); /* Clean and invalidate specific range within the d-cache */ SCB_CleanInvalidateDCache_by_Addr((uint32_t*)&specificBufferAddr, sizeOfRegionToClean); ``` #### 性能优化建议 为了最大化发挥 DCACHE 效益可考虑以下几个方面: - 确保关键变量驻留在 SRAM 中而不是 Flash 上从而避免每次读取都需要经历较慢速度路径; - 设计算法使得相同位置上的连续多次访问能够命中已存在的缓存项而非每次都触发缺失事件; ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽露风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值