faker2/function/cache/index.js
2024-05-22 22:46:38 +08:00

63 lines
1.4 KiB
JavaScript

let DS = require('ds')
try {
if (DS.toString() === '[object Object]') {
DS = DS.DS
}
} catch {}
function Cache(ttl = 0, save_file = null) {
let me = this
me.now = function () {
return new Date().getTime()
}
me.ttl = ttl || 0
if (save_file) {
me.data = new DS(save_file)
} else {
me.data = new DS()
}
let save = function () {
if (save_file) me.data.save(save_file)
return me
}
let nuke = function (key) {
delete me.data[key]
save()
return me
}
me.get = function (key, cb) {
let val = null
let obj = me.data[key]
if (obj) {
if (obj.expires == 0 || me.now() < obj.expires) {
val = obj.val
} else {
val = null
nuke(key)
}
}
if (cb) cb(val)
return val
}
me.del = function (key, cb) {
let oldval = me.get(key)
nuke(key)
if (cb) cb(oldval)
return oldval
}
me.put = function (key, val = null, ttl = 0, cb) {
if (ttl == 0) ttl = me.ttl
let expires = ttl == 0 ? 0 : me.now() + ttl
var oldval = me.del(key)
if (val !== null) {
me.data[key] = {
expires,
val,
}
save()
}
if (cb) cb(oldval)
return oldval
}
}
module.exports = Cache