Я знаю, как я могу использовать node и redis с функцией промежуточного программного обеспечения для кеширования данных, когда происходит запрос.
Но теперь я хотел бы кэшировать полное состояние моего смартконтракта с интервалом в одну минуту. Поэтому я делаю асинхронный запрос, чтобы получить данные смарт-контракта на бэкэнде в Node. Отсортируйте, сохраните отсортированный массив в Redis. И затем получает доступ к нему из моего промежуточного программного обеспечения. Таким образом, он всегда сохраняется и обновляется, и клиенту никогда не приходится ждать, пока смарт-контракт будет извлечен и отсортирован.
Как бы я это сделал. У меня нет минимального воспроизводимого примера, потому что я не знаю, с чего начать. Мне не нужен весь код, просто быстрый указатель в правильном направлении. Вот как я получаю состояние смарт-контракта:
async function getMessages(req, res, next) {
try {
console.info(`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 после его сортировки. В интервале времени в одну минуту с таймером в узле. Это возможно?
Спасибо за ваше время





Для интервала можно использовать setInterval (). Широко используемый клиентский пакет redis просто называется Redis.
Итак, вместе:
const redis = require("redis");
const redisClient = redis.createClient(); // no arg = default options
const getMessages = async () => {
const arr = [
{'foo': 1},
{'foo': 2}
];
console.info(arr);
redisClient.set("messages", arr);
}
setInterval(getMessages, 60 * 1000); // 60 sec * 1000 milisec
getMessages(); // so that you don't have to wait 60 sec for the first call from `setInterval()`