前端實現設置緩存數據定時失效

1、背景

業務須要在前端進行數據的緩存,到期就刪除再進行獲取新數據。前端

2、實現過程

前端設置數據定時失效的能夠有下面2種方法:npm

一、當數據較大時,能夠利用localstorage,存數據時候寫入一個時間,獲取的時候再與當前時間進行比較

二、若是數據不超過cookie的限制大小,能夠利用cookie比較方便,直接設置有效期便可。

三、更多(請大神指點)

利用localstorage實現

localstorage實現思路:

一、存儲數據時加上時間戳

在項目開發中,咱們能夠寫一個公用的方法來進行存儲的時候加上時間戳緩存

export function setLocalStorageAndTime (key, value) {
  window.localStorage.setItem(key, JSON.stringify({ data: value, time: new Date().getTime() }))
}
複製代碼

項目中應用

存儲bash

// 有數據再進行存儲
     setLocalStorageAndTime('XXX', {name: 'XXX'})
複製代碼

讀取cookie

// 判斷是否返回爲null或者失效
getLocalStorageAndTime('XXX', 86400000)

複製代碼

二、獲取數據時與當前時間進行比較

export function getLocalStorageAndTime (key, exp = 86400000) {
  // 獲取數據
  let data = window.localStorage.getItem(key)
  if (!data) return null
  let dataObj = JSON.parse(data)
  // 與過時時間比較
  if (new Date().getTime() - dataObj.time > exp) {
    // 過時刪除返回null
    removeLocalStorage(key)
    console.log('信息已過時')
    return null
  } else {
    return dataObj.data
  }
}

複製代碼

利用cookie實現

咱們用js-cookie這款插件來設置cookie,比較方便,能夠自行查看文檔。 js-cookie 的示例中只有以天爲單位的有效期:學習

Cookies.set('name', 'value', { expires: 7 }); // 7 天后失效ui

官方文檔只要設置天數,沒有時分秒,這樣咱們想設置更小單位的時候沒法下手,其實也能夠設置時間戳來處理時間的,下面這種方式能夠設置任意單位的有效期:spa

let seconds = 10;
let expires = new Date(new Date() * 1 + seconds * 1000);
Cookies.set('username', 'tanggaowei', { expires: expires }); // 10 秒後失效
複製代碼

貼上利用js-cookie的封裝, 記得 npm i js-cookie插件

import Cookies from 'js-cookie'

/*
* 設置cookies
* */
export function getCookies (key) {
  return Cookies.get(key)
}
/*
* 設置Cookies
* */
export function setCookies (key, value, expiresTime) {
  let seconds = expiresTime
  let expires = new Date(new Date() * 1 + seconds * 1000)
  return Cookies.set(key, value, { expires: expires })
}
/*
* 移除Cookies
* */
export function removeCookies (key) {
  return Cookies.remove(key)
}
複製代碼

3、總結

上面兩個方法各有各的優勢和缺點,若是小夥伴們有更好方法,麻煩留言互相學習localstorage

相關文章
相關標籤/搜索