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.mzph.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&…