完成网络音乐、工具页面与安装器体验升级
This commit is contained in:
+107
@@ -0,0 +1,107 @@
|
||||
/**
|
||||
* @fileoverview 基于内存的缓存实现
|
||||
*
|
||||
* 提供简单的键值对缓存,支持:
|
||||
* - 按时间自动过期(通过 setTimeout 实现)
|
||||
* - 过期回调通知
|
||||
* - 批量清除
|
||||
*
|
||||
* 作为 apicache 的底层存储引擎使用。
|
||||
*
|
||||
* @module memory-cache
|
||||
*/
|
||||
|
||||
/**
|
||||
* MemoryCache 构造函数
|
||||
*
|
||||
* 初始化空的缓存存储和计数器。
|
||||
* @constructor
|
||||
*/
|
||||
function MemoryCache() {
|
||||
this.cache = {}; // 缓存数据存储 { key: { value, expire, timeout } }
|
||||
this.size = 0; // 当前缓存条目数
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加缓存条目
|
||||
*
|
||||
* @param {string} key - 缓存键
|
||||
* @param {*} value - 缓存值(任意类型)
|
||||
* @param {number} time - 过期时间(毫秒)
|
||||
* @param {function} [timeoutCallback] - 过期时的回调函数 (value, key) => void
|
||||
* @returns {Object} 创建的缓存条目 { value, expire, timeout }
|
||||
*/
|
||||
MemoryCache.prototype.add = function (key, value, time, timeoutCallback) {
|
||||
const old = this.cache[key];
|
||||
const instance = this;
|
||||
|
||||
const entry = {
|
||||
value, // 缓存的值
|
||||
expire: time + Date.now(), // 过期时间戳(毫秒)
|
||||
timeout: setTimeout(function () {
|
||||
// 自动过期:删除条目并触发回调
|
||||
instance.delete(key);
|
||||
return timeoutCallback && typeof timeoutCallback === 'function' && timeoutCallback(value, key);
|
||||
}, time),
|
||||
};
|
||||
|
||||
this.cache[key] = entry;
|
||||
this.size = Object.keys(this.cache).length;
|
||||
|
||||
return entry;
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除缓存条目
|
||||
*
|
||||
* @param {string} key - 缓存键
|
||||
* @returns {null} 始终返回 null
|
||||
*/
|
||||
MemoryCache.prototype.delete = function (key) {
|
||||
const entry = this.cache[key];
|
||||
if (entry) clearTimeout(entry.timeout); // 清除自动过期定时器
|
||||
|
||||
delete this.cache[key];
|
||||
|
||||
this.size = Object.keys(this.cache).length;
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取缓存条目(包含元数据)
|
||||
*
|
||||
* @param {string} key - 缓存键
|
||||
* @returns {Object|undefined} 缓存条目 { value, expire, timeout },不存在返回 undefined
|
||||
*/
|
||||
MemoryCache.prototype.get = function (key) {
|
||||
return this.cache[key];
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取缓存的值(仅返回 value 部分)
|
||||
*
|
||||
* @param {string} key - 缓存键
|
||||
* @returns {*} 缓存的值,不存在返回 undefined
|
||||
*/
|
||||
MemoryCache.prototype.getValue = function (key) {
|
||||
const entry = this.get(key);
|
||||
|
||||
return entry && entry.value;
|
||||
};
|
||||
|
||||
/**
|
||||
* 清除所有缓存条目
|
||||
*
|
||||
* 遍历所有键并逐个删除(会清除对应的定时器)。
|
||||
* @returns {true} 始终返回 true
|
||||
*/
|
||||
MemoryCache.prototype.clear = function () {
|
||||
Object.keys(this.cache).forEach(function (key) {
|
||||
this.delete(key);
|
||||
}, this);
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
module.exports = MemoryCache;
|
||||
Reference in New Issue
Block a user