发布时间:2026/7/24 8:08:39
鸿蒙三方库 | harmony-utils之CacheUtil缓存管理详解 前言缓存是提升应用性能的重要手段合理的缓存策略可以减少网络请求和重复计算。pura/harmony-utils的CacheUtil封装了内存缓存管理方法支持过期时间和容量控制。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解帮助开发者快速掌握并应用到实际项目中。一、CacheUtil核心APICacheUtil提供了以下缓存管理方法方法说明返回类型使用场景put(key, value, expireMs)写入缓存void数据缓存get(key)读取缓存Object缓存查询remove(key)删除缓存void缓存清理clear()清空缓存void全量清理size()获取缓存数量number容量监控1.1 核心特性简洁易用封装复杂API为一行调用降低使用门槛类型安全完整的TypeScript类型定义编译期即可发现错误异常处理内置异常捕获机制避免运行时崩溃过期控制支持设置缓存过期时间1.2 缓存策略对照策略说明适用场景定时过期设置过期时间API响应缓存手动清理调用clear()数据刷新容量控制监控size()内存管理二、完整使用步骤2.1 安装依赖ohpminstallpura/harmony-utils2.2 写入缓存import{CacheUtil}frompura/harmony-utils;Button(写入缓存).width(100%).onClick((){try{CacheUtil.put(user_info,{name:张三,age:25},60000);this.result缓存写入成功 ✅\n有效期: 60秒;}catch(e){this.result异常: e;}})2.3 读取缓存Button(读取缓存).width(100%).onClick((){try{letvalueCacheUtil.get(user_info);this.resultvalue?缓存命中 ✅\n${JSON.stringify(value)}:缓存未命中 ❌\n已过期或不存在;}catch(e){this.result异常: e;}})2.4 清空缓存Button(清空缓存).width(100%).onClick((){try{CacheUtil.clear();this.result缓存已清空 ;}catch(e){this.result异常: e;}})三、完整页面示例import{CacheUtil}frompura/harmony-utils;EntryComponentstruct CacheDemo{Stateresult:string;build(){Column({space:12}){Button(写入缓存).width(100%).onClick((){CacheUtil.put(test,Hello Cache!,30000);this.result写入成功数量:${CacheUtil.size()};});Button(读取缓存).width(100%).onClick((){letvCacheUtil.get(test);this.resultv?命中:${v}:未命中;});Text(this.result).fontSize(14).fontColor(#333333)}.padding(16)}}四、进阶用法4.1 API响应缓存import{CacheUtil}frompura/harmony-utils;asyncfunctionfetchWithCache(url:string,expireMs:number60000):PromiseObject{letcachedCacheUtil.get(url);if(cached)returncached;letresponseawaitfetch(url);letdataawaitresponse.json();CacheUtil.put(url,data,expireMs);returndata;}4.2 缓存预热functionwarmUpCache():void{CacheUtil.put(config,loadConfig(),300000);CacheUtil.put(dictionary,loadDictionary(),600000);}五、注意事项内存缓存CacheUtil为内存缓存应用退出后数据丢失过期时间过期时间单位为毫秒容量控制注意监控缓存数量避免内存溢出初始化依赖使用前需确保AppUtil.init()已调用线程安全多线程访问需注意并发安全六、常见问题Q1: 缓存数据在应用重启后还在吗不在CacheUtil是内存缓存应用退出后数据丢失。持久化请使用Preferences或数据库。Q2: 如何设置永不过期的缓存不传expireMs参数或设置为0缓存将不会自动过期。Q3: 缓存占用内存过大怎么办定期调用clear()清理或使用LRUCacheUtil替代。Q4: get()返回null是什么原因可能是缓存已过期、已被删除、或从未写入。总结CacheUtil的缓存管理方法为应用性能优化提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。合理使用缓存可以显著提升应用响应速度。本文基于pura/harmony-utils工具库更多功能请参考官方文档与后续系列文章。

相关新闻

2026/7/24 8:08:39

AI视觉烟雾检测系统:基于YOLOv5的实时预警方案

1. 项目背景与核心价值在工业生产和日常生活场景中,早期烟雾检测一直是安全防护的重点难点。传统烟雾传感器依赖物理接触式检测,存在响应延迟、安装位置受限等固有缺陷。我们团队开发的这套AI视觉识别系统,通过普通监控摄像头即可实现非接触式…

2026/7/24 8:08:39

2026年AI Agent开发:从入门到生产级落地

1. 为什么2026年的AI Agent值得现在开始学习? 三年前我接手第一个企业级AI Agent项目时,光调试对话流程就花了两个月。现在回头看,当时的开发方式就像用算盘做数据分析——工具原始、效率低下。但到2026年,这个领域将迎来三个关键…

2026/7/24 8:03:38

强化学习中的ROLL伊步:分层rollout与渐进式优化策略

1. 项目背景与核心概念 "ROLL伊步"这个看似简单的标题背后,其实蕴含着当前强化学习(RL)领域一个极具潜力的研究方向。作为一名在机器学习领域深耕多年的从业者,我最初看到这个标题时,立刻联想到的是强化学习中的策略滚动(rollout)与…

2026/7/24 9:28:45

MSP430FR2676电容触摸开发实战:从硬件连接到软件调优

1. 从零上手电容触摸:MSP430FR2676评估板深度解析与实战如果你正在寻找一种可靠、低成本且易于集成的触摸交互方案,那么电容触摸技术绝对值得你投入时间研究。不同于传统的机械按键,电容触摸无需物理接触压力,仅通过检测人体手指带…

2026/7/24 9:28:45

AIGC平台实战测评:高效选型与避坑指南

1. 项目概述:为什么我们需要AIGC平台测评?最近两年,AIGC(AI生成内容)平台如雨后春笋般涌现,从文案创作到图像生成,从代码编写到视频剪辑,几乎覆盖了所有内容生产场景。但面对市面上几…

2026/7/24 9:28:45

YOLO11多GPU训练实战:PyTorch分布式优化与性能提升

1. YOLO11多GPU训练的必要性与挑战 当我在实验室第一次尝试用8块V100训练YOLO11时,batch_size从256提升到2048,训练时间从12小时缩短到2.5小时,这种效率提升让我彻底理解了分布式训练的价值。torch.distributed作为PyTorch的分布式训练框架&a…

2026/7/24 9:28:45

企业级RAG与Agent技术实战:构建智能自动化解决方案

1. 项目概述"企业级RAGAgentSkillsOpenClaw智能体实战内训"这个标题涵盖了当前AI领域最前沿的四大技术方向。作为一名长期从事企业智能化转型的技术顾问,我发现越来越多的企业开始将检索增强生成(RAG)、智能体(Agent&am…

2026/7/24 9:23:45

舞蹈视频数据处理:从网盘资源到元数据管理的完整指南

1. 先搞清楚这个项目到底能做什么 从标题“scail2-舞蹈-人间惊鸿宴-历史网盘看简介”来看,这应该是一个与舞蹈视频相关的项目,可能涉及某个特定舞蹈作品或舞蹈数据的整理、分析或展示。关键词“scail2”可能是项目代号或工具名称,“人间惊鸿宴…

2026/7/23 12:54:51

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/24 0:03:10

不同品牌斜齿行星减速机如何替换?以PX与PAG系列为例

不同品牌斜齿行星减速机如何替换?以 PX 与 PAG 系列为例 一、系列对应不等于型号直接互换 PX 与 PAG 都属于斜齿、方法兰、输出轴式精密行星减速机,结构形式和应用方向具有对应关系。 原设备使用PX系列时,可以优先从PAG系列中寻找替换型号。但…

2026/7/24 0:03:10

jdk8 把list 扁平化成String 多个以逗号分隔

在 JDK 8 中&#xff0c;将 List 扁平化为以逗号分隔的 String&#xff0c;有几种非常简洁且高效的方法。&#x1f680; 推荐方案&#xff1a;使用 Collectors.joining()这是最标准的 Java 8 写法&#xff0c;适用于 List<String>。javaimport java.util.stream.Collecto…

2026/7/24 0:03:10

java 两个 long id 怎么合并成一个long id 并且不重复

“把两个 Long ID 合并成一个唯一的 Long ID&#xff0c;且保证不重复”这个需求&#xff0c;在 Java 里直接做数学上的“完美合并”是不可能的。因为两个 Long&#xff08;各 64 位&#xff09;要合并成一个 Long&#xff08;64 位&#xff09;&#xff0c;在信息论上是有损压…

2026/7/23 23:42:43

3个高效策略:快速掌握Axure中文界面配置

3个高效策略&#xff1a;快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…