mirror of
https://github.com/shufflewzc/faker2.git
synced 2025-04-22 18:28:45 +08:00
63 lines
1.4 KiB
JavaScript
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
|