zoukankan      html  css  js  c++  java
  • 前端本地缓存:封装localStorage支持设置过期时间、命名空间 吴小明

          - 当选中项目后,每隔5秒缓存一次当前页面所填内容
          - 缓存至localStorage中,过期时间为7日,到期后自动删除当前项目的缓存,namespace为【visitPlanList】
          - 中途退出软件时,下次进入新增页,选中之前的项目,会回显对应的内容
          - 如果手动点击【放弃】按钮,并确认退出,那么会根据当前选中的项目id,删除对应的缓存
          - 新增提交时,以本次提交时的项目id为依据,将visitPlanList中对应的缓存删除
          - 缓存仅针对新增,编辑时不操作缓存,具体代码见@/views/Application/VisitManage/Plan/Add/index.vue

    1、utils/index.js中定义myLocalStorage ,支持设置、获取、删除

    // 拜访管理-前端缓存 namespace:命名空间,visitPlanList=拜访计划  visitFeedbackList=拜访反馈
    export const myLocalStorage = {
      set(namespace = 'visitPlanList', key, data, time) {
        const storage = JSON.parse(localStorage.getItem(namespace)) || {}
        storage[key] = {
          data,
          createTime: Date.now(),
          lifeTime: time || 1000 * 60 * 60 * 24 * 7 // 默认设置过期时间:7天
        }
        localStorage.setItem(namespace, JSON.stringify(storage))
      },
      get(namespace = 'visitPlanList', key) {
        const storage = JSON.parse(localStorage.getItem(namespace)) || {}
        if (!storage[key]) return
        const { data, createTime, lifeTime } = storage[key]
        // 当前时间 - 存入时间 > 过期时间
        if (Date.now() - createTime > lifeTime) {
          delete storage[key]
          localStorage.setItem(namespace, JSON.stringify(storage))
          return null
        } else {
          return data
        }
      },
      delete(namespace = 'visitPlanList', key) {
        const storage = JSON.parse(localStorage.getItem(namespace)) || {}
        if (!storage[key]) return
        delete storage[key]
        localStorage.setItem(namespace, JSON.stringify(storage))
      }
    }

    2、页面使用

    import { myLocalStorage } from '@/utils'
        // 存储缓存数据
        setStorage() {
          if (this.id) return
          const timer = setInterval(() => {
            const page1Data = this.$refs.page1Ref.page1Data
            if (page1Data.projectId <= 0) return
            const params = { page1Data, page2Data: this.page2Data }
            myLocalStorage.set('visitPlanList', page1Data.projectId, params)
          }, 5000)
          this.$once('hook:beforeDestroy', () => {
            clearInterval(timer)
          })
        },
        // 获取缓存数据
        getStorage(projectId) {
          if (this.id) return
          const params = myLocalStorage.get('visitPlanList', projectId)
          if (!params) return
          this.$refs.page1Ref.page1Data = params.page1Data
          this.page2Data = params.page2Data
        },
        // 删除缓存数据
        deleteStorage() {
          if (this.id) return
          const projectId = this.$refs.page1Ref.page1Data.projectId
          const params = myLocalStorage.get('visitPlanList', projectId)
          if (params) myLocalStorage.delete('visitPlanList', projectId)
        }

    存储的数据结构:

  • 相关阅读:
    Aurora 数据库支持多达五个跨区域只读副本
    Amazon RDS 的 Oracle 只读副本
    Amazon EC2 密钥对
    DynamoDB 读取请求单位和写入请求单位
    使用 EBS 优化的实例或 10 Gb 网络实例
    启动 LAMP 堆栈 Web 应用程序
    AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS
    使用 Amazon S3 阻止公有访问
    路由表 Router Table
    使用MySQLAdmin工具查看QPS
  • 原文地址:https://www.cnblogs.com/wuqilang/p/15634619.html
Copyright © 2011-2022 走看看