vue2前端日志數據存儲(indexedD)自動清理3天前的數據

前言:關于Dexie.js這個前端本地數據庫,如何使用IndexedDB來存儲數據,并且設置到期自動清理的機制。首先,我需要回憶一下Dexie.js的基本用法,以及IndexedDB的特性。IndexedDB是瀏覽器中的一種非關系型數據庫,適合存儲大量結構化數據,而Dexie.js是對它的一個封裝,簡化了操作。

????????用戶的需求是在數據存儲后,能夠根據設定的時間自動清理過期數據。這涉及到兩個主要部分:一是如何在存儲數據時記錄存儲時間,并設置過期時間;二是如何定期或在訪問時檢查并刪除過期的數據。

首先,在數據模型設計上,需要為每個數據條目添加兩個字段,比如createdAt和timestamp。記錄數據創建的時間戳,這樣,當需要檢查數據是否過期時,可以通過這兩個字段來計算。

?

先上效果圖:

以下是使用 Dexie.js 實現 IndexedDB 數據到期自動清理的步驟詳解:

1. 安裝 Dexie

首先,確保你已經安裝了 Dexie:

npm install dexie
# 或
yarn add dexie

2. 完整組件封裝實現代碼 db.js

// db.js - IndexedDB 數據庫配置和清理工具
import Dexie from 'dexie';
// 定義數據庫結構
class AppDatabase extends Dexie {constructor() {super('C3AppDatabase');// 定義數據庫版本和表結構this.version(1).stores({channelIdLogs: '++id, channelId, createdAt',  // 示例表//   cache: '++id, key, value, timestamp',  // 示例緩存表loadApiParms: '++id, timestamp',importSocketList: '++id, dataType, timestamp'// 添加其他表...});// 綁定表到this對象以便直接訪問this.channelIdLogs = this.table('channelIdLogs');// this.cache = this.table('cache');this.loadApiParms = this.table('loadApiParms');this.importSocketList = this.table('importSocketList');}// 清理所有表中超過指定天數的數據async cleanupOldData(days = 3) {try {const cutoffDate = new Date();cutoffDate.setDate(cutoffDate.getDate() - days);// 清理channelIdLogs表await this.channelIdLogs.where('createdAt').below(cutoffDate.getTime()).delete();// 清理cache表// await this.cache//     .where('timestamp')//     .below(cutoffDate.getTime())//     .delete();// 清理loadApiParms表await this.loadApiParms.where('timestamp').below(cutoffDate.getTime()).delete();// 清理importSocketList表await this.importSocketList.where('timestamp').below(cutoffDate.getTime()).delete();console.log(`成功清理${days}天前的數據`);return true;} catch (error) {// console.error('清理舊數據時出錯:', error);return false;}}// 定期清理(例如每天一次)startAutoCleanup(days = 3, intervalHours = 24) {// 先立即執行一次清理this.cleanupOldData(days);// 然后設置定時器setInterval(() => {this.cleanupOldData(days);}, intervalHours * 60 * 60 * 1000);}
}// 創建數據庫實例
const db = new AppDatabase();// 導出數據庫實例和清理方法
export { db };// 初始化數據庫并啟動自動清理
export async function initDatabase() {try {// 打開數據庫await db.open();// console.log('數據庫已打開')// 啟動自動清理(3天前的數據,每天檢查一次)db.startAutoCleanup(3, 24);return db;} catch (error) {// console.error('數據庫初始化失敗:', error)throw error;}
}

? ?注:cache表? 我沒有用到所以注釋了。

?

3. 使用示例

import { initDatabase, db } from '@/utils/db';async getChannelId(channelId) {try {// 初始化數據庫await initDatabase();// 添加測試數據await db.channelIdLogs.add({content: '這是一條測試日志',createdAt: new Date('2020-01-01').getTime() // 舊數據,會被清理});await db.channelIdLogs.add({channelId: channelId,time: nowTime(new Date()),createdAt: Date.now()});// 手動觸發清理(可選)await db.cleanupOldData(3);// 查詢剩余日志// const allLogs = await db.channelIdLogs.toArray()// console.log('channelId當前日志:', allLogs)} catch (error) {// console.error('應用出錯:', error)}},

注:然后別忘了調用方法: 我這里是 傳值了, 你隨意傳,只要是字符串就可以。?
我這只是給?
channelIdLogs 這個表 添加數據, 如果想給其他表添加數據, 同樣的方法 改下表明就可以。

mounted() {this.getChannelId(channelId)
}

4?.最佳實踐建議

  1. 備份重要數據:在執行清理前,考慮對重要數據進行備份

  2. 用戶通知:清理大量數據前通知用戶

  3. 性能監控:監控清理操作的性能,特別是對于大型數據庫

  4. 錯誤處理:完善錯誤處理,確保清理失敗不會影響應用主要功能

  5. 測試:編寫單元測試驗證清理邏輯

這個完整實現提供了基本清理功能、自動定期清理、進度報告和Web Worker支持,你可以根據實際需求進行調整和擴展。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73407.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【MySQL篇】索引特性,索引的工作原理以及索引的創建與管理

目錄 一,初識索引 二,MySQL與磁盤交互的基本單位 三,MySQL中數據文件的特性 四,理解page和索引 五,聚簇索引和非聚簇索引 六,索引操作 查詢索引 創建主鍵索引 唯一索引的創建 普通索引的創建 全文…

springboot項目啟動常見的問題以及配置以及一些使用技巧

1.配置倉庫 這里要把xml文件從國外的鏡像源改成國內的鏡像源。改鏡像源可以查看這篇文章 點擊查看 2.更改文件類型 方法一:右鍵文件找到Mark Dircetory as可以更改文件類型 方法二: 3.springboot本地Maven倉庫的位置 4.pom.xml文件報紅錯誤怎么辦 這…

【初探數據結構】二叉樹的順序結構——堆的實現詳解(上下調整算法的時間復雜度分析)

💬 歡迎討論:在閱讀過程中有任何疑問,歡迎在評論區留言,我們一起交流學習! 👍 點贊、收藏與分享:如果你覺得這篇文章對你有幫助,記得點贊、收藏,并分享給更多對數據結構感…

流量分析2

一,webshell流量 [GKCTF 2021]簽到 先看協議分級,大部分是tcp,里面有http的基于的行文本數據占了很大的比重,看看里面有什么 過濾http的流量 點擊一條流量,里面的內容進去后面有基于行的文本數據, 先解he…

頭歌實踐教學平臺--【數據庫概論】--SQL

一、表結構與完整性約束的修改(ALTER) 1.修改表名 USE TestDb1; alter table your_table rename TO my_table; 2.添加與刪除字段 #語句1:刪除表orderDetail中的列orderDate alter table orderDetail drop orderDate; #語句2:添加列unitPrice alter t…

在 React 中,組件之間傳遞變量的常見方法

目錄 1. **通過 Props 傳遞數據**2. **通過回調函數傳遞數據**3. **通過 Context API 傳遞數據**4. **通過 Redux 管理全局狀態**5. **通過事件總線(如 Node.js 的 EventEmitter)**6. **通過 Local Storage / Session Storage**7. **通過 URL 查詢參數傳…

Redis + 布隆過濾器解決緩存穿透問題

Redis 布隆過濾器解決緩存穿透問題 1. Redis 布隆過濾器解決緩存穿透問題 📌 什么是緩存穿透? 緩存穿透指的是查詢的數據既不在緩存,也不在數據庫,導致每次查詢都直接訪問數據庫,增加數據庫壓力。 例如&#xff1…

Vue動態添加或刪除DOM元素:購物車實例

Vue 指令系列文章: 《Vue插值:雙大括號標簽、v-text、v-html、v-bind 指令》 《Vue指令:v-cloak、v-once、v-pre 指令》 《Vue條件判斷:v-if、v-else、v-else-if、v-show 指令》 《Vue循環遍歷:v-for 指令》 《Vue事件處理:v-on 指令》 《Vue表單元素綁定:v-model 指令》…

vue h5實現車牌號輸入框

哈嘍,大家好,最近鵬仔開發的項目是學校校內車輛超速方面的統計檢測方面的系統,在開發過程中發現有個小功能,就是用戶移動端添加車牌號,剛開始想著就一個輸入框,提交時正則效驗一下格式就行,最后…

硬件基礎(5):(3)二極管的應用

文章目錄 [toc]1. **整流電路****功能**:**工作原理**:**應用實例**:電路組成:整流過程:電路的應用: 2. **穩壓電路****功能**:**工作原理**:**應用實例**:電路組成及功能…

Wireshark網絡抓包分析使用詳解

序言 之前學計網還有前幾天備考華為 ICT 網絡賽道時都有了解認識 Wireshark,但一直沒怎么專門去用過,也沒去系統學習過,就想趁著備考的網絡相關知識還沒忘光,先來系統學下整理點筆記~ 什么是抓包?抓包就是將網絡傳輸…

安心聯車輛管理平臺源碼價值分析

安心聯車輛管理平臺源碼的價值可從技術特性、功能覆蓋、市場適配性、擴展潛力及商業化支持等多個維度進行分析。以下結合實際應用進行詳細解讀: 一、技術架構與開發優勢 主流技術棧與高性能架構 源碼采用成熟的前后端分離架構,后端基于Java技術&#xff…

【操作系統】Docker如何使用-續

文章目錄 1、概述2、鞏固知識2.1、基礎命令2.2、容器管理2.3、鏡像管理2.4、網絡管理2.5、Compose 3、常用命令 1、概述 在使用Docker的過程中,掌握常用的命令是至關重要的。然而,隨著時間的推移,我們可能會遺忘一些關鍵的命令或對其用法變得…

ElementUI el-menu導航開啟vue-router模式

有沒有小伙伴遇到這么一種情況:ElementUI el-menu導航中,開啟vue-router 的模式后,點擊觸發事件而不進行路由跳轉? 別慌!下面直接說解決方案: 借助路由守衛進行判斷 給el-menu綁定切換事件,給…

【leetcode hot 100 17】電話號碼的字母組合

分析:當設計關鍵字“所有組合”時,要考慮深度優先遍歷、廣度優先遍歷(層次遍歷),其中: 深度優先搜索: 自頂向下的遞歸實現深搜定義子問題在當前遞歸層結合子問題結果解決原問題 廣度優先搜索 利…

Vue 2 探秘:visible 和 append-to-body 是誰的小秘密?

🚀 Vue 2 探秘:visible 和 append-to-body 是誰的小秘密?🤔 父組件:identify-list.vue子組件:fake-clue-list.vue 嘿,各位前端探險家!👋 今天我們要在 Vue 2 的代碼叢林…

C++學習之路:從頭搞懂配置VScode開發環境的邏輯與步驟

目錄 編輯器與IDE基于vscode的C開發環境配置1. 下載vscode、淺嘗編譯。番外篇 2. 安裝插件,賦能編程。3. 各種json文件的作用。c_cpp_properties.jsontask.jsonlaunch.json 總結&&彩蛋 編輯器與IDE 上一篇博客已經介紹過了C程序的一個編譯流程,從…

PPT 轉高精度圖片 API 接口

PPT 轉高精度圖片 API 接口 文件處理 / 圖片處理,將 PPT 文件轉換為圖片序列。 1. 產品功能 支持將 PPT 文件轉換為高質量圖片序列;支持 .ppt 和 .pptx 格式;保持原始 PPT 的布局和樣式;轉換后的圖片支持永久訪問;全…

VSCode 抽風之 兩個conda環境同時在被激活

出現了神奇的(toolsZCH)(base) 提示符,如下圖所示: 原因大概是:conda 環境的雙重激活:可能是 conda 環境沒有被正確清理或初始化,導致 base 和 toolsZCH 同時被激活。 解決辦法就是 :conda deactivate 兩次…

git | 回退版本 并保存當前修改到stash,在進行整合。[git checkout | git stash 等方法 ]

目錄 一些常見命令: git 回退版本 一、臨時回退(不會修改歷史,可隨時回到當前版本) 方法1:git checkout HEAD~1 問題:處于 detached HEAD 狀態下提交的,無法直接 git push ? 選項 1&…