鸿蒙三方库 | harmony-utils之CacheUtil缓存管理详解

📅 2026/7/24 8:11:36 👁️ 阅读次数 📝 编程学习
鸿蒙三方库 | harmony-utils之CacheUtil缓存管理详解

前言

缓存是提升应用性能的重要手段,合理的缓存策略可以减少网络请求和重复计算。@pura/harmony-utilsCacheUtil封装了内存缓存管理方法,支持过期时间和容量控制。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

一、CacheUtil核心API

CacheUtil提供了以下缓存管理方法:

方法说明返回类型使用场景
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 安装依赖

ohpminstall@pura/harmony-utils

2.2 写入缓存

import{CacheUtil}from'@pura/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{letvalue=CacheUtil.get('user_info');this.result=value?`缓存命中 ✅\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}from'@pura/harmony-utils';@Entry@Componentstruct 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(()=>{letv=CacheUtil.get('test');this.result=v?`命中:${v}`:'未命中';});Text(this.result).fontSize(14).fontColor('#333333')}.padding(16)}}

四、进阶用法

4.1 API响应缓存

import{CacheUtil}from'@pura/harmony-utils';asyncfunctionfetchWithCache(url:string,expireMs:number=60000):Promise<Object>{letcached=CacheUtil.get(url);if(cached)returncached;letresponse=awaitfetch(url);letdata=awaitresponse.json();CacheUtil.put(url,data,expireMs);returndata;}

4.2 缓存预热

functionwarmUpCache():void{CacheUtil.put('config',loadConfig(),300000);CacheUtil.put('dictionary',loadDictionary(),600000);}

五、注意事项

  1. 内存缓存:CacheUtil为内存缓存,应用退出后数据丢失
  2. 过期时间:过期时间单位为毫秒
  3. 容量控制:注意监控缓存数量,避免内存溢出
  4. 初始化依赖:使用前需确保AppUtil.init()已调用
  5. 线程安全:多线程访问需注意并发安全

六、常见问题

Q1: 缓存数据在应用重启后还在吗?

不在,CacheUtil是内存缓存,应用退出后数据丢失。持久化请使用Preferences或数据库。

Q2: 如何设置永不过期的缓存?

不传expireMs参数或设置为0,缓存将不会自动过期。

Q3: 缓存占用内存过大怎么办?

定期调用clear()清理,或使用LRUCacheUtil替代。

Q4: get()返回null是什么原因?

可能是缓存已过期、已被删除、或从未写入。



总结

CacheUtil的缓存管理方法为应用性能优化提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。合理使用缓存,可以显著提升应用响应速度。

本文基于@pura/harmony-utils工具库,更多功能请参考官方文档与后续系列文章。