JavaScript常见缓存数据处理方式 并说明特性

news2024/11/19 1:28:10

在JavaScript中,常见的几种缓存数据的方式:

1、LocalStorage:使用LocalStorage可以将数据以键值对的形式存储在浏览器中,该数据在页面刷新后依然存在,只要不更换浏览器 或 清空缓存 这种缓存就会一直存在
我们执行

localStorage.setItem("name", "小猫猫")

我们存入了一个 键为 name 值为 小猫猫的缓存
这里 键 必须是字符串 但字符串内容顺便定义 值就是缓存什么都可以

之后 我们就可以运行

let name = localStorage.getItem("name");
console.log(name);

运行结果如下
在这里插入图片描述

localStorage.getItem("键名");

这样 就可以通过键 找到值 这就是键值对缓存的意义

然后 我们可以

localStorage.removeItem("name")

通过键删除指定缓存
这样 我们再去获取name 就拿不到了
在这里插入图片描述
LocalStorage还是比较强大的 大家可以试试 你刷新 或者关掉浏览器 再打开 只要还是同一个浏览器 那么这个缓存是会一直存在的
最后 执行

localStorage.clear()

这个东西就比较无脑了 直接将所有的LocalStorage缓存数据都干掉
只要你是缓存在LocalStorage里的 不管什么数据都会被localStorage.clear()清除

2、SessionStorage:与LocalStorage类似,SessionStorage也是将数据以键值对的形式存储在浏览器中,但它的数据只在当前会话中有效,在新窗口打开则取不到缓存,
我们可以执行如下语句

sessionStorage.setItem("age", 22)

加入一个键值对缓存 键为 字符串 age 值为数字 22
然后我们执行

let age = sessionStorage.getItem("age");
console.log(age);

通过get方法获取 运行结果如下
在这里插入图片描述
但大家可以手动测试一下
我们复制地址
然后在一个新的浏览器窗口打开 缓存就拿不到了
概念是只存在当前对话框
然后 我们执行

sessionStorage.removeItem("age")

根据指定的键 清除对应缓存 这里 我们将 age清了

然后 最后就是王牌

sessionStorage.clear()

清理掉所有sessionStorage下的缓存数据

3、Cookie:Cookie是存储在用户计算机上的小型文本文件,可以设置过期时间,在指定时间内数据会一直存在

我们可以这样写
我们设置 键 name 值 小猫猫 时间为 一分钟 这个时间大家要自己算一下
最后处理好之后 缓存进cookie中

// 获取当前时间
var currentTime = new Date();
// 设置Cookie过期时间为1分钟后
var expiryTime = new Date(currentTime.getTime() + 60000);
// 构建Cookie字符串
var cookieString = "name=小猫猫;expires=" + expiryTime.toUTCString() + ";path=/";
// 设置Cookie
document.cookie = cookieString;

然后 我们执行

let cookies = document.cookie;
console.log(cookies);

这里 就会获取到整个cookies对象
在这里插入图片描述
然后 我们执行

document.cookie = "name=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"

指定将我们之前缓存在cookie的name 清除掉
在这里插入图片描述
4 IndexedDB: IndexedDB适用于大批量数据存储缓存,它本身的API就是异步的,不会影响主流程。非常适合配合后台大量的API数据存储

我们先需要在页面加载时 执行

const dbName = "myDB";
const request = indexedDB.open(dbName, 1);

request.onupgradeneeded = function(event) {
  const db = event.target.result;
  const objectStore = db.createObjectStore("cache", { keyPath: "name" });
  console.log(objectStore);
};

创建一个本地数据存储库
然后

request.onsuccess = function(event) {
const db = event.target.result;
  const transaction = db.transaction(["cache"], "readwrite");
  const objectStore = transaction.objectStore("cache");

  const data = { name: "小猫猫" };
  const request = objectStore.add(data);

  request.onsuccess = function() {
    console.log("数据已添加到缓存");
  };

  transaction.oncomplete = function() {
    db.close();
  };
};

这里 我们直接加入一个 对象 objectStore.add(data);
这样 我们就将这个
data存入了缓存中
然后 我们执行

request.onsuccess = function(event) {
  const db = event.target.result;
  const transaction = db.transaction(["cache"], "readonly");
  const objectStore = transaction.objectStore("cache");

  const request = objectStore.get("小猫猫");

  request.onsuccess = function(event) {
    const data = event.target.result;
    console.log("获取到缓存数据:", data);
  };

  transaction.oncomplete = function(event) {
    db.close();
  };
};

这样 就获取到了我们的数据
在这里插入图片描述
如果我们想更新内容 可以

request.onsuccess = function(event) {
  const db = event.target.result;
  const transaction = db.transaction(["cache"], "readwrite");
  const objectStore = transaction.objectStore("cache");

  const request = objectStore.get("小猫猫");

  request.onsuccess = function(event) {
    const data = event.target.result;
    data.name = "小狗狗";

    const updateRequest = objectStore.put(data);

    updateRequest.onsuccess = function(event) {
      console.log("缓存数据已更新");
    };
  };

  transaction.oncomplete = function(event) {
    db.close();
  };
};

最后 我们想删除数据可以

request.onsuccess = function(event) {
  const db = event.target.result;
  const transaction = db.transaction(["cache"], "readwrite");
  const objectStore = transaction.objectStore("cache");

  const deleteRequest = objectStore.delete("小猫猫");

  deleteRequest.onsuccess = function(event) {
    console.log("缓存数据已删除");
  };

  transaction.oncomplete = function(event) {
    db.close();
  };
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/946349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java错误处理百科

一、业务开发缺陷 ① 工期紧、逻辑复杂,开发人员会更多地考虑主流程逻辑的正确实现,忽略非主流程逻辑,或保障、补偿、一致性逻辑的实现; ② 往往缺乏详细的设计、监控和容量规划的闭环,结果就是随着业务发展出现各种各…

前端基础---HTML笔记汇总一

HTML定义 HTML超文本标记语言——HyperText Markup Language。 超文本是什么&#xff1f; 链接标记是什么&#xff1f; 标记也叫标签&#xff0c;带尖括号的文本 标签分类 单标签:只有开始标签&#xff0c;没有结束标签(<br>换行 <hr>水平线 <img> 图像标…

K8S-集群管理

目录 一、pod资源限制&#xff08;resources&#xff09; 二、重启策略&#xff08;restartPolicy&#xff09; 三、扩容缩容 1.手动扩容 2.自动扩容 2.1、数据采集组件 2.1.1、部署 2.2、HPA 2.2.1、案例 2.2.1.1、HPA基于cpu自动扩缩容 2.2.1.2、HPA基于内存自动扩…

透过源码理解Flutter InheritedWidget

InheritedWidget的核心是保存值和保存使用这个值的widget&#xff0c;通过对比值的变化&#xff0c;来决定是否要通知那些使用了这个值的widget更新自身。 1 updateShouldNotify和notifyClients InheritedWidget通过updateShouldNotify函数控制依赖其的子组件是否在Inherited…

[Android AIDL] --- AIDL工程搭建

0 AIDL概念 AIDL&#xff08;Android Interface Definition Language&#xff09;是一种 IDL 语言&#xff0c;用于生成可以在 Android 设备上两个进程之间进行进程间通信&#xff08;IPC&#xff09;的代码。 通过 AIDL&#xff0c;可以在一个进程中获取另一个进程的数据和调…

视频汇聚/视频云存储/视频监控管理平台EasyCVR接入海康SDK协议后无法播放该如何解决?

开源EasyDarwin视频监控/安防监控/视频汇聚EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#…

idea自定义提示关键词 switch

idea中希望提示Switch case的快捷键&#xff0c; 比如我想自定义一个输入【mmm】就提示main方法&#xff0c;该怎么做&#xff1f; 1.File - Settings&#xff0c;点击。 2.找Live Templates &#xff0c;可以在搜索里面搜live&#xff0c;找到后点击。 3.先点击号&#xff…

系统架构设计师-计算机系统基础知识(2)

目录 一、存储管理 1、页式存储 2、段式存储 3、段页式存储 二、磁盘管理 1、先来先服务FCFS 2、最短寻道时间优先SSTF 三、文件系统 1、文件基本概念 2、文件的类型&#xff1a; 3、索引文件结构 4、位示图 一、存储管理 1、页式存储 将程序与内存划分为同样大小的块&…

算法面试-深度学习面试题整理(2024.8.29开始,每天下午持续更新....)

一、无监督相关&#xff08;聚类、异常检测&#xff09; 1、常见的距离度量方法有哪些&#xff1f;写一下距离计算公式。 1&#xff09;连续数据的距离计算&#xff1a; 闵可夫斯基距离家族&#xff1a; 当p 1时&#xff0c;为曼哈顿距离&#xff1b;p 2时&#xff0c;为欧…

C++中的 class和struct区别

C 中保留了C语言的 struct 关键字&#xff0c;并且加以扩充。在C语言中&#xff0c;struct 只能包含成员变量&#xff0c;不能包含成员函数。而在C中&#xff0c;struct 类似于 class&#xff0c;既可以包含成员变量&#xff0c;又可以包含成员函数。 C中的 struct 和 class 基…

领英采用 Protobuf 进行微服务开发,网络延迟降低60%

领英采用 Protobuf&#xff0c;以实现其各类平台中更为高效的微服务间数据传递&#xff0c;并将其与开源框架 Rest.li 相集成。在全公司范围的推广完成后&#xff0c;领英将延迟降低了 60%的同时&#xff0c;也提高了资源的利用率。 领英平台所采用的是微服务架构&#xff0c;…

InnoDB表空间

一、页面类型 1.1 页面通用部分 File Header &#xff1a;记录页面的一些通用信息 File Trailer &#xff1a;校验页是否完整&#xff0c;保证从内存到磁盘刷新时内容的一致性。 File Header结构&#xff1a; 二、独立表空间结构 2.1 区 对于16KB的页来说&#xff0c;连续的…

android logcat问题 怎么换成旧版

参考 如果想切换回旧版LOGCAT&#xff0c;按照下方步骤设置即可 File->Settings->Expermental->Logcat->Enable new Logcat tool window&#xff1a;取消勾选 设置好后上方会有一个Toast&#xff0c;询问你是否使用新版logcat&#xff0c;关掉即可 最新测试版移…

如何能使mp3的音量变大?

如何能使mp3的音量变大&#xff1f;我们经常在日常生活中使用的一种音频格式是MP3。许多朋友在下载音乐后&#xff0c;都会选择MP3格式进行播放。然而&#xff0c;在我们的日常生活中&#xff0c;我们有时会遇到音量太小的问题。这时候&#xff0c;我们听歌可能会感到很不舒服。…

分段三次hermit插值

保形三次hermit插值 一、算法实现 一、插值函数建立 设函数 y F ( x ) yF(x) yF(x)在区间 [ a , b ] [a,b] [a,b]上有定义&#xff0c;且已知在离散点 a x 0 < x 1 < . . . < x n b ax_0<x_1<...<x_n b ax0​<x1​<...<xn​b上的值 y 0 , y…

关于Maxwell与Kafka和数据库的监控

1.Maxwell的配置 其实就是配置两端的配置信息,都要能连接上,然后才能去传输数据 config.properties #Maxwell数据发送目的地&#xff0c;可选配置有stdout|file|kafka|kinesis|pubsub|sqs|rabbitmq|redis producerkafka # 目标Kafka集群地址 kafka.bootstrap.servershadoop102…

立创EDA专业版的原理图上器件有一个虚线框

立创EDA专业版的原理图上器件有一个虚线框解决方法 问题分析&#xff1a; 在使用立创EDA专业版 设计电路原理图时&#xff0c;中途莫名其妙就给我的元件添加了下面图片所示的虚线外框。看着就很别扭的样子&#xff0c;而且工程大了和器件稍微布局比较密的时候就导致整体很难看…

Python+selenium等待某个元素消失(如加载中)再继续执行代码

&#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️‍&#x1f308; 博客主页&#xff1a;一晌小贪欢的博客主页 &#x1f44d; 该系列文章专栏&#xff1a;Python办公自动化专栏 文章作者技术和水平有限&#xff0c…

【ASP.NET】LIS实验室信息管理系统源码

LIS系统&#xff0c;即实验室信息管理系统&#xff0c;是一种基于互联网技术的医疗行业管理软件&#xff0c;它可以帮助实验室进行样本管理、检测流程管理、结果报告等一系列工作&#xff0c; 提高实验室工作效率和质量。 一、LIS系统的功能 1. 样本管理 LIS系统可以帮助实验…

用反射实现自定义Java对象转化为json工具类

传入一个object类型的对象获取该对象的class类getFields方法获取该类的所有属性对属性进行遍历&#xff0c;并且拼接成Json格式的字符串&#xff0c;注意&#xff1a;通过属性名来推断方法名获取Method实例通过invoke方法调用 public static String objectToJsonUtil(Object o…