mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-08-31 03:18:03 +02:00
* feat: #8824, cache refactor ability to disable caches ability to download contents of cache refactor cache modules to remove duplicated code * fix: remove duplicate hit/miss tracking check cacheEnabled in getUncachedKeys
This commit is contained in:
committed by
GitHub
parent
bcbc085497
commit
f1f9b225b0
@@ -1,56 +1,11 @@
|
||||
'use strict';
|
||||
|
||||
module.exports.create = function (name) {
|
||||
var LRU = require('lru-cache');
|
||||
var pubsub = require('../pubsub');
|
||||
|
||||
var cache = new LRU({
|
||||
const cacheCreate = require('../cacheCreate');
|
||||
return cacheCreate({
|
||||
name: name + '-object',
|
||||
max: 40000,
|
||||
length: function () { return 1; },
|
||||
maxAge: 0,
|
||||
});
|
||||
|
||||
cache.misses = 0;
|
||||
cache.hits = 0;
|
||||
|
||||
pubsub.on(name + ':hash:cache:del', function (keys) {
|
||||
keys.forEach(key => cache.del(key));
|
||||
});
|
||||
|
||||
pubsub.on(name + ':hash:cache:reset', function () {
|
||||
cache.reset();
|
||||
});
|
||||
|
||||
cache.delObjectCache = function (keys) {
|
||||
if (!Array.isArray(keys)) {
|
||||
keys = [keys];
|
||||
}
|
||||
pubsub.publish(name + ':hash:cache:del', keys);
|
||||
keys.forEach(key => cache.del(key));
|
||||
};
|
||||
|
||||
cache.resetObjectCache = function () {
|
||||
pubsub.publish(name + ':hash:cache:reset');
|
||||
cache.reset();
|
||||
};
|
||||
|
||||
cache.getUnCachedKeys = function (keys, cachedData) {
|
||||
let data;
|
||||
let isCached;
|
||||
const unCachedKeys = keys.filter(function (key) {
|
||||
data = cache.get(key);
|
||||
isCached = data !== undefined;
|
||||
if (isCached) {
|
||||
cachedData[key] = data;
|
||||
}
|
||||
return !isCached;
|
||||
});
|
||||
|
||||
var hits = keys.length - unCachedKeys.length;
|
||||
var misses = keys.length - hits;
|
||||
cache.hits += hits;
|
||||
cache.misses += misses;
|
||||
return unCachedKeys;
|
||||
};
|
||||
return cache;
|
||||
};
|
||||
|
||||
@@ -29,7 +29,7 @@ module.exports = function (module) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
cache.delObjectCache(key);
|
||||
cache.del(key);
|
||||
};
|
||||
|
||||
module.setObjectField = async function (key, field, value) {
|
||||
@@ -164,7 +164,7 @@ module.exports = function (module) {
|
||||
});
|
||||
|
||||
await module.client.collection('objects').updateOne({ _key: key }, { $unset: data });
|
||||
cache.delObjectCache(key);
|
||||
cache.del(key);
|
||||
};
|
||||
|
||||
module.incrObjectField = async function (key, field) {
|
||||
@@ -191,13 +191,13 @@ module.exports = function (module) {
|
||||
bulk.find({ _key: key }).upsert().update({ $inc: increment });
|
||||
});
|
||||
await bulk.execute();
|
||||
cache.delObjectCache(key);
|
||||
cache.del(key);
|
||||
const result = await module.getObjectsFields(key, [field]);
|
||||
return result.map(data => data && data[field]);
|
||||
}
|
||||
|
||||
const result = await module.client.collection('objects').findOneAndUpdate({ _key: key }, { $inc: increment }, { returnOriginal: false, upsert: true });
|
||||
cache.delObjectCache(key);
|
||||
cache.del(key);
|
||||
return result && result.value ? result.value[field] : null;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -8,7 +8,7 @@ module.exports = function (module) {
|
||||
|
||||
module.emptydb = async function () {
|
||||
await module.client.collection('objects').deleteMany({});
|
||||
module.objectCache.resetObjectCache();
|
||||
module.objectCache.reset();
|
||||
};
|
||||
|
||||
module.exists = async function (key) {
|
||||
@@ -47,7 +47,7 @@ module.exports = function (module) {
|
||||
return;
|
||||
}
|
||||
await module.client.collection('objects').deleteMany({ _key: key });
|
||||
module.objectCache.delObjectCache(key);
|
||||
module.objectCache.del(key);
|
||||
};
|
||||
|
||||
module.deleteAll = async function (keys) {
|
||||
@@ -55,7 +55,7 @@ module.exports = function (module) {
|
||||
return;
|
||||
}
|
||||
await module.client.collection('objects').deleteMany({ _key: { $in: keys } });
|
||||
module.objectCache.delObjectCache(keys);
|
||||
module.objectCache.del(keys);
|
||||
};
|
||||
|
||||
module.get = async function (key) {
|
||||
@@ -96,7 +96,7 @@ module.exports = function (module) {
|
||||
|
||||
module.rename = async function (oldKey, newKey) {
|
||||
await module.client.collection('objects').updateMany({ _key: oldKey }, { $set: { _key: newKey } });
|
||||
module.objectCache.delObjectCache([oldKey, newKey]);
|
||||
module.objectCache.del([oldKey, newKey]);
|
||||
};
|
||||
|
||||
module.type = async function (key) {
|
||||
|
||||
@@ -33,7 +33,7 @@ module.exports = function (module) {
|
||||
await module.client.async.hmset(key, data);
|
||||
}
|
||||
|
||||
cache.delObjectCache(key);
|
||||
cache.del(key);
|
||||
};
|
||||
|
||||
module.setObjectField = async function (key, field, value) {
|
||||
@@ -48,7 +48,7 @@ module.exports = function (module) {
|
||||
await module.client.async.hset(key, field, value);
|
||||
}
|
||||
|
||||
cache.delObjectCache(key);
|
||||
cache.del(key);
|
||||
};
|
||||
|
||||
module.getObject = async function (key) {
|
||||
@@ -146,7 +146,7 @@ module.exports = function (module) {
|
||||
return;
|
||||
}
|
||||
await module.client.async.hdel(key, field);
|
||||
cache.delObjectCache(key);
|
||||
cache.del(key);
|
||||
};
|
||||
|
||||
module.deleteObjectFields = async function (key, fields) {
|
||||
@@ -158,7 +158,7 @@ module.exports = function (module) {
|
||||
return;
|
||||
}
|
||||
await module.client.async.hdel(key, fields);
|
||||
cache.delObjectCache(key);
|
||||
cache.del(key);
|
||||
};
|
||||
|
||||
module.incrObjectField = async function (key, field) {
|
||||
@@ -182,7 +182,7 @@ module.exports = function (module) {
|
||||
} else {
|
||||
result = await module.client.async.hincrby(key, field, value);
|
||||
}
|
||||
cache.delObjectCache(key);
|
||||
cache.del(key);
|
||||
return Array.isArray(result) ? result.map(value => parseInt(value, 10)) : parseInt(result, 10);
|
||||
};
|
||||
};
|
||||
|
||||
@@ -9,7 +9,7 @@ module.exports = function (module) {
|
||||
|
||||
module.emptydb = async function () {
|
||||
await module.flushdb();
|
||||
module.objectCache.resetObjectCache();
|
||||
module.objectCache.reset();
|
||||
};
|
||||
|
||||
module.exists = async function (key) {
|
||||
@@ -45,7 +45,7 @@ module.exports = function (module) {
|
||||
|
||||
module.delete = async function (key) {
|
||||
await module.client.async.del(key);
|
||||
module.objectCache.delObjectCache(key);
|
||||
module.objectCache.del(key);
|
||||
};
|
||||
|
||||
module.deleteAll = async function (keys) {
|
||||
@@ -53,7 +53,7 @@ module.exports = function (module) {
|
||||
return;
|
||||
}
|
||||
await module.client.async.del(keys);
|
||||
module.objectCache.delObjectCache(keys);
|
||||
module.objectCache.del(keys);
|
||||
};
|
||||
|
||||
module.get = async function (key) {
|
||||
@@ -77,7 +77,7 @@ module.exports = function (module) {
|
||||
}
|
||||
}
|
||||
|
||||
module.objectCache.delObjectCache([oldKey, newKey]);
|
||||
module.objectCache.del([oldKey, newKey]);
|
||||
};
|
||||
|
||||
module.type = async function (key) {
|
||||
|
||||
Reference in New Issue
Block a user