uniapp设置缓存过期时间

幽暗天琴 / 2024-07-18 / 原文

在uni-app中,如果你想要实现数据的缓存并让这个缓存保留24小时,你可以使用uni.setStorageSync(同步存储)或uni.setStorage(异步存储)方法结合JavaScript的日期时间处理来实现。不过,需要注意的是,uni.setStorage系列API本身并不直接支持设置过期时间。因此,你需要自己管理过期时间。

以下是一种可能的实现方式:

  1. 存储数据时附带时间戳:当你存储数据时,同时存储一个时间戳(表示数据被存储的时间)。

  2. 读取数据时检查时间戳:每次从缓存中读取数据时,都先检查这个时间戳,判断数据是否已过期。

  3. 如果数据过期,则清除并重新获取:如果检查发现数据已过期,则使用uni.removeStorageSync(同步删除)或uni.removeStorage(异步删除)清除旧的缓存数据,并根据需要重新获取数据并存储。

下面是一个简单的示例代码:

javascript复制代码
  // 假设你要存储的数据是一个字符串 "hello"
  const data = "hello";
   
  // 当前时间的时间戳(秒)
  const currentTime = Math.floor(Date.now() / 1000);
   
  // 设置缓存,假设key为'myData',同时存储数据和时间戳
  // 这里以uni.setStorageSync为例
  uni.setStorageSync('myData_data', data);
  uni.setStorageSync('myData_timestamp', currentTime);
   
  // 假设这是获取缓存数据的函数
   getCachedData() {
  let data = uni.getStorageSync('myData_data');
  let timestamp = uni.getStorageSync('myData_timestamp');
   
  // 判断数据是否已过期(这里假设过期时间为24小时)
  if (timestamp && (currentTime - timestamp < 24 * 60 * 60)) {
  // 数据未过期,直接返回数据
  return data;
  } else {
  // 数据已过期或不存在,进行相应处理(比如重新获取数据)
  // 这里只是简单地返回null作为示例
  uni.removeStorageSync('myData_data');
  uni.removeStorageSync('myData_timestamp');
  return null; // 或重新获取数据并存储
  }
  }
   
  // 使用示例
  let cachedData = getCachedData();
  if (cachedData) {
  console.log('从缓存中获取的数据:', cachedData);
  } else {
  console.log('缓存数据已过期或不存在,需要重新获取');
  // 在这里实现重新获取数据的逻辑
  }

请注意,这个示例中我们分别存储了数据和它的时间戳,并在获取数据时检查时间戳以确定数据是否过期。如果数据已过期,我们就从缓存中删除这些数据(尽管在实际应用中,如果数据重新获取后立即存储,这一步可能是可选的),并返回null或重新获取数据。

这种方法适用于任何需要设置过期时间的缓存场景,而不仅仅是uni-app小程序。