Skip to content
大纲

实现管理本地缓存过期的方法

实现本地缓存处理有多种方法,cookielocalStoragesessionStorageIndexedDB 甚至是 window.name

这里比较常用的是 localStorage,但它没有过期时间

一种实现思路是:

将数据有效截止时间与数据一同存入 localStorage,当获取数据时,判断当前时间是否超过数据有效截止时间,以此实现过期时间管理

js
// 实现思路示例
// 存数据
function saveData(key, value, maxAge = 0) {
  try {
    localStorage.setItem(
      key,
      JSON.stringify({
        data: value,
        time: Date.now() + maxAge * 1000
      })
    )
  } catch (e) {
    console.error(e)
  }
}

// 取数据
function getData(key) {
  try {
    const cacheData = JSON.parse(localStorage.getItem(key))

    if (cacheData.time < Date.now()) {
      // 删除数据
      localStorage.removeItem(key)
      return
    }
    return cacheData.data
  } catch (e) {
    console.error(e)
  }
}

getData('name', 'cloudyan', 10)
getData('name') // cloudyan

// 10s 后
getData('name') // undefined

用于生产

上面实现了思路,但要用于生产环境,还需要设计封装一下

你可以选择使用 @deepjs/storage

适用于 web,封装 localStoragesessionStorage,简单好用。

独立包,无依赖,语义化,使用简单

你也可以选择更为强大的 localforage

localForage 是一个快速而简单的 JavaScript 存储库。localForage 通过使用异步存储(IndexedDB 或 WebSQL)和简单的类似 localStorageAPI 来改善 Web 应用程序的离线体验。

localForage 在不支持 IndexedDBWebSQL 的浏览器中使用 localStorage