<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
<script>
// 惰性删除版本
function localStorageSetOrGet(self) { // 个人喜欢这种方式来写
if(!self){
self = {};
}
let prefix = 'one_more_lsc_'; // 键值的前缀
/**
* 增加一个键值对数据
* @param key 键
* @param val 值
* @param expires 过期时间,单位为秒
*/
self.set = function (key, val, expires){
key = prefix + key;
val = JSON.stringify({'val': val, 'expires': new Date().getTime() + expires * 1000});
localStorage.setItem(key,val);
}
/**
* 读取对应键的值数据
* @param key 键
* @returns {null|*} 对应键的值
*/
self.get = function(key){
key = prefix + key;
let val = localStorage.getItem(key);
if(!val){
return null;
}
val = JSON.parse(val);
if(val.expires < new Date().getTime()){
localStorage.removeItem(key); // 清除
return null;
}
return val;
}
return self;
};
// 惰性删除测试
// let temp = localStorageSetOrGet();
// temp.set('L12','123456789',1000);
// let str1 = temp.get('L12');
// temp.set('L12tg','23456789',1000);
// let str2 = temp.get('L12tg');
// temp.set('L12tg','23456789',-1000); // 设置过期的时间,将访问不到,过期了会在上面清除掉
// let str3 = temp.get('L12tg');
// console.log(str1,str2,str3);
// 定时删除测试
let temp = localStorageSetOrGet();
temp.set('L1','123456789',-1);
temp.set('L2','223456789',1);
temp.set('L3','323456789',-1);
temp.set('L4','423456789',12);
temp.set('L5','523456789',1000);
// 定时删除版本
function intervalClearLocalStorage(self) {
if(!self){
self = {};
}
let prefix = 'one_more_lsc_';
let list = [];
self.init = function() {
let keys = Object.keys(localStorage);
let reg = new RegExp('^'+prefix);
let temp = [];
for(let i of keys){
if(reg.test(i)){
temp.push(i);
}
}
list = temp;
}
self.init();
self.check = function() {
if(list.length === 0){
return ;
}
let checkCount = 0;
while(checkCount < 500){
let expireCount = 0;
for(let i = 0; i < 20; i++){
if(list.length === 0){
break;
}
let index = Math.floor(Math.random() * list.length);
let key = list[index];
let val = localStorage.getItem(key);
if(!val){
list.splice(index,1);
localStorage.removeItem(key);
expireCount++;
continue;
}
val = JSON.parse(val);
if(val.expires < new Date().getTime()){
console.log('过期:',key,val)
list.splice(index,1);
localStorage.removeItem(key);
expireCount++;
}
}
if(expireCount <= 5 || list.length === 0){
break;
}
checkCount++;
}
}
window.setInterval(self.check,1000);
return self;
};
let tempClear = intervalClearLocalStorage();
</script>
localStorage惰性删除和定时删除
最新推荐文章于 2023-02-10 13:40:11 发布