【发布时间】:2021-06-29 23:37:15
【问题描述】:
我知道如何在请求发生时使用 node 和 redis 以及中间件功能来缓存数据。
但现在我想以一分钟的时间间隔缓存我的智能合约的完整状态。所以我发出异步请求以在 Node.js 的后端获取智能合约数据。对其进行排序,将排序后的数组存储在 Redis 中。然后从我的中间件访问它。所以它总是被存储和更新,客户端永远不必等到智能合约被获取和排序。
我会怎么做。我没有最小的可重现示例,因为我不知道从哪里开始。我不需要整个代码,只需要一个指向正确方向的快速指针。这就是我获取智能合约状态的方式:
async function getMessages(req, res, next) {
try {
console.log(`Getting the entire contract state`);
const contract = zilliqa.contracts.at(tokenContract);
const allState = await contract.getState();
var arr = []
var sorted =
Object.keys(allState.texts).forEach(function (key) {
var value = allState.texts[key];
Object.keys(value).forEach(function (key_two) {
var value_two = value[key_two];
Object.keys(value_two).forEach(function (key_three) {
var value_three = parseInt(value_two[key_three]);
var zil = value_three / 1000000000000;
var rank = (parseInt(key_three) / 12000) * zil;
arr.push({ 'zil': zil, 'text': key_two, 'address': key, 'block' : key_three, 'rank' : rank });
});
});
});
arr.sort(function (a, b) {
return parseFloat(b.rank) - parseFloat(a.rank);
}
);
}
我想在排序后将arr 存储在 Redis 中。在节点中带有计时器的一分钟时间间隔内。这可能吗?
感谢您的宝贵时间
【问题讨论】:
标签: node.js caching redis timer blockchain