mirror of
https://github.com/janoside/btc-rpc-explorer.git
synced 2026-08-20 13:28:05 +02:00
76 lines
No EOL
1.4 KiB
JavaScript
76 lines
No EOL
1.4 KiB
JavaScript
"use strict";
|
|
|
|
const LRU = require("lru-cache");
|
|
|
|
function createMemoryLruCache(cacheObj, onCacheEvent) {
|
|
return {
|
|
get: (key) => {
|
|
return new Promise((resolve, reject) => {
|
|
onCacheEvent("memory", "try", key);
|
|
|
|
var val = cacheObj.get(key);
|
|
|
|
if (val != null) {
|
|
onCacheEvent("memory", "hit", key);
|
|
|
|
} else {
|
|
onCacheEvent("memory", "miss", key);
|
|
}
|
|
|
|
resolve(cacheObj.get(key));
|
|
});
|
|
},
|
|
set: (key, obj, maxAge) => {
|
|
cacheObj.set(key, obj, maxAge);
|
|
|
|
onCacheEvent("memory", "set", key);
|
|
},
|
|
del: (key) => {
|
|
cacheObj.del(key);
|
|
|
|
onCacheEvent("memory", "del", key);
|
|
}
|
|
}
|
|
}
|
|
|
|
function tryCache(cacheKey, cacheObjs, index, resolve, reject) {
|
|
if (index == cacheObjs.length) {
|
|
resolve(null);
|
|
|
|
return;
|
|
}
|
|
|
|
cacheObjs[index].get(cacheKey).then((result) => {
|
|
if (result != null) {
|
|
resolve(result);
|
|
|
|
} else {
|
|
tryCache(cacheKey, cacheObjs, index + 1, resolve, reject);
|
|
}
|
|
});
|
|
}
|
|
|
|
function createTieredCache(cacheObjs) {
|
|
return {
|
|
get:(key) => {
|
|
return new Promise((resolve, reject) => {
|
|
tryCache(key, cacheObjs, 0, resolve, reject);
|
|
});
|
|
},
|
|
set:(key, obj, maxAge) => {
|
|
for (var i = 0; i < cacheObjs.length; i++) {
|
|
cacheObjs[i].set(key, obj, maxAge);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function lruCache(size) {
|
|
return new LRU(size);
|
|
}
|
|
|
|
module.exports = {
|
|
lruCache: lruCache,
|
|
createMemoryLruCache: createMemoryLruCache,
|
|
createTieredCache: createTieredCache
|
|
} |