前言
缓存是提升应用性能的重要手段,合理的缓存策略可以减少网络请求和重复计算。@pura/harmony-utils的CacheUtil封装了内存缓存管理方法,支持过期时间和容量控制。本文将从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-utils2.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);}五、注意事项
- 内存缓存:CacheUtil为内存缓存,应用退出后数据丢失
- 过期时间:过期时间单位为毫秒
- 容量控制:注意监控缓存数量,避免内存溢出
- 初始化依赖:使用前需确保
AppUtil.init()已调用 - 线程安全:多线程访问需注意并发安全
六、常见问题
Q1: 缓存数据在应用重启后还在吗?
不在,CacheUtil是内存缓存,应用退出后数据丢失。持久化请使用Preferences或数据库。
Q2: 如何设置永不过期的缓存?
不传expireMs参数或设置为0,缓存将不会自动过期。
Q3: 缓存占用内存过大怎么办?
定期调用clear()清理,或使用LRUCacheUtil替代。
Q4: get()返回null是什么原因?
可能是缓存已过期、已被删除、或从未写入。
总结
CacheUtil的缓存管理方法为应用性能优化提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。合理使用缓存,可以显著提升应用响应速度。
本文基于
@pura/harmony-utils工具库,更多功能请参考官方文档与后续系列文章。