221 lines
3.9 KiB
JavaScript
Raw Normal View History

2026-01-20 19:36:49 +08:00
const env = __VITE_ENV__;
const PREFIX = env.MP_CACHE_PREFIX
const EXPIRE_PREFIX = `${PREFIX}_expire_`
/**
* 生成缓存key
*/
function getKey(key) {
return PREFIX + key
}
/**
* 生成过期时间key
*/
function getExpireKey(key) {
return PREFIX + EXPIRE_PREFIX + key
}
/**
* 检查是否过期
*/
function isExpired(key) {
try {
const expireTime = uni.getStorageSync(getExpireKey(key))
if (expireTime && Date.now() > expireTime) {
// 过期了,删除缓存
uni.removeStorageSync(getKey(key))
uni.removeStorageSync(getExpireKey(key))
return true
}
return false
} catch (e) {
return false
}
}
/**
* 设置缓存
* @param {string} key 缓存key
* @param {any} value 缓存值
* @param {number} expire 过期时间0表示永不过期
*/
function set(key, value, expire = 0) {
try {
// 序列化数据
let serializedValue
if (typeof value === 'object' && value !== null) {
// 对象和数组需要JSON序列化
serializedValue = JSON.stringify(value)
} else {
// 基本类型直接存储
serializedValue = value
}
uni.setStorageSync(getKey(key), serializedValue)
// 设置过期时间
if (expire > 0) {
const expireTime = Date.now() + expire * 1000
uni.setStorageSync(getExpireKey(key), expireTime)
}
return true
} catch (e) {
console.error('缓存设置失败:', e)
return false
}
}
/**
* 获取缓存
* @param {string} key 缓存key
* @param {any} defaultValue 默认值
*/
function get(key, defaultValue = null) {
try {
// 检查是否过期
if (isExpired(key)) {
return defaultValue
}
const value = uni.getStorageSync(getKey(key))
if (value === '') {
return defaultValue
}
// 尝试反序列化JSON
if (typeof value === 'string') {
try {
// 尝试解析JSON
const parsed = JSON.parse(value)
return parsed
} catch (e) {
// 如果解析失败,说明是普通字符串,直接返回
return value
}
}
return value
} catch (e) {
console.error('缓存获取失败:', e)
return defaultValue
}
}
/**
* 删除缓存
* @param {string} key 缓存key
*/
function remove(key) {
try {
uni.removeStorageSync(getKey(key))
uni.removeStorageSync(getExpireKey(key))
return true
} catch (e) {
console.error('缓存删除失败:', e)
return false
}
}
/**
* 检查缓存是否存在
* @param {string} key 缓存key
*/
function has(key) {
try {
if (isExpired(key)) {
return false
}
const value = uni.getStorageSync(getKey(key))
return value !== ''
} catch (e) {
return false
}
}
/**
* 清空所有缓存
*/
function clear() {
try {
uni.clearStorageSync()
return true
} catch (e) {
console.error('缓存清空失败:', e)
return false
}
}
/**
* 获取缓存信息
*/
function getInfo() {
try {
const info = uni.getStorageInfoSync()
return {
keys: info.keys || [],
currentSize: info.currentSize || 0,
limitSize: info.limitSize || 0
}
} catch (e) {
return {
keys: [],
currentSize: 0,
limitSize: 0
}
}
}
/**
* 批量设置缓存
* @param {object} data key-value对象
* @param {number} expire 过期时间
*/
function setBatch(data, expire = 0) {
let success = true
for (const [key, value] of Object.entries(data)) {
if (!set(key, value, expire)) {
success = false
}
}
return success
}
/**
* 批量获取缓存
* @param {array} keys key数组
*/
function getBatch(keys) {
const result = {}
for (const key of keys) {
result[key] = get(key)
}
return result
}
// 导出所有函数
export {
set,
get,
remove,
has,
clear,
getInfo,
setBatch,
getBatch
}
// 默认导出对象
export default {
set,
get,
remove,
has,
clear,
getInfo,
setBatch,
getBatch
}