第二二课:HarmonyOS Next本地存储与缓存策略开发指南‌

87 阅读2分钟

一、LocalStorage:页面级状态共享

1. 核心特性与使用场景

功能定位‌:LocalStorage用于实现UIAbility实例内多个页面间的数据共享,支持组件树内状态同步‌
‌装饰器机制‌:
@LocalStorageProp:实现单向绑定,仅从LocalStorage同步数据至组件‌
@LocalStorageLink:实现双向绑定,组件与LocalStorage数据实时互相同步‌

// 创建LocalStorage实例  
let storage = new LocalStorage();  
storage.setOrCreate('theme', 'light');  

@Entry(storage)  
@Component  
struct HomePage {  
  @LocalStorageLink('theme') theme: string;  // 双向绑定  

  build() {  
    Column() {  
      Text(this.theme)  
        .onClick(() => { this.theme = 'dark'; })  
    }  
  }  
}  


2. 开发注意事项

‌数据类型限制‌:LocalStorage的键值必须为字符串类型,值支持除Function外的常用数据类型‌
‌跨页面共享‌:通过LocalStorage.GetShared()实现不同页面访问同一实例‌

二、SessionStorage:会话级临时存储

1. 核心特性与生命周期

‌功能定位‌:存储临时会话数据(如用户登录凭证),生命周期与应用程序会话绑定‌
‌数据特性‌
会话结束时自动清除数据
支持键值对存储,数据未加密

// 存储会话数据  
SessionStorage.setOrCreate('sessionId', '123456');  
// 获取数据  
let sessionId = SessionStorage.get('sessionId');  


2. 典型应用场景

用户登录态临时保存
页面跳转参数传递

三、数据缓存策略优化

1. 多级缓存架构

层级 技术方案 适用场景
‌内存缓存‌ LRU策略 高频访问小数据(如配置项)‌
‌本地存储‌ Preferences/SQLite 结构化业务数据 ‌
‌持久化存储‌ PersistentStorage 关键配置持久化 ‌

2. 性能优化策略

‌缓存淘汰机制‌:

// LRU缓存示例  
class LRUCache {  
  private cache = new Map<string, any>();  
  private maxSize = 100;  

  get(key: string) {  
    if (this.cache.has(key)) {  
      const value = this.cache.get(key);  
      this.cache.delete(key);  
      this.cache.set(key, value);  
      return value;  
    }  
    return null;  
  }  
}  


‌缓存失效控制‌:
时间戳验证:为缓存数据设置TTL(Time To Live)‌
版本号校验:数据版本变更时主动刷新缓存

3. 缓存监控与管理

‌查询缓存大小‌:

import { storageStatistics } from '@ohos.file.storageStatistics';  
let stats = storageStatistics.getCurrentBundleStats();  
console.log('缓存大小:', stats.cacheSize);  

‌清理缓存‌:

// 删除指定缓存文件  
let cacheDir = globalThis.context.cacheDir;  
fileio.unlinkSync(`${cacheDir}/temp_data`);  


四、总结

‌存储方案选择‌
页面级共享选LocalStorage‌
会话级临时数据用SessionStorage‌
‌缓存策略核心‌
内存+本地+持久化三级架构提升性能‌
LRU淘汰与TTL机制保障数据有效性‌
‌安全建议‌:敏感数据需结合@ohos.security加密存储‌