Я новичок в магазинах ключевых ценностей, но я хотел бы научиться. В качестве личного проекта я пытаюсь создать систему управления запасами с помощью Node.js и Redis. Давайте предположим, что это правильная технология для использования на данный момент.
Если бы у меня была простая система, которая должна отслеживать количество виджетов в определенном месте, с возможностью поиска деталей по виджету или по местоположению, мое понимание согласно https://matt.sh/Thinking-in-redis-part-one предназначен для хранения отдельных "настраиваемых индексов" для поиска по местоположению. и по пункту.
В node.js, чтобы сохранить новую запись, мы создадим запись с помощью hmset, добавим запись в 2 индекса с помощью sadd:
redis.hmset([
key,
'attr1', entry.attr1,
'attr2', entry.attr2,
'attr3', entry.attr3,
],
function(err) {
// add entry to location set
var locationKey = 'location:' + entry.location;
redis.sadd(locationKey, key, function(err) {
redis.expire(locationKey, 900);
});
// add entry to widget set
var widgetKey = 'widget:' + widget.id;
redis.sadd(widgetKey, key, function(err) {
redis.expire(widgetKey, 900);
});
redis.expire(key, 900);
}
);
Теперь, если мы хотим переместить все виджеты из одного места в другое, нам нужно будет получить все записи из набора виджетов, добавить запись в индекс нового местоположения и удалить ее из старого индекса:
// move all widgets to another location
redis.smembers('widget:' + widget.id, function(err, entryKeys) {
entryKeys.forEach(function(entryKey) {
// get entry for rebroadcast
redis.hgetall(entryKey, function(err, result) {
if (result) {
// add entry to new location's index
var locationKey = 'location:' + location;
redis.sadd(locationKey, entryKey, function(err) {
redis.expire(locationKey, 900);
});
// remove entry from old location's index
redis.srem('location:' + result.location, entryKey);
}
});
});
});
Меня беспокоит количество запросов, которые необходимо сделать для каждой команды. Добавление записи будет стоить 3 вставки для самих данных и еще 3, если мы хотим истечь срок действия данных. Для перемещения всех виджетов потребуется 1+n вставок, n чтений и n удалений.
Если бы это была игра в реальном времени с сотнями или тысячами запросов в секунду, нормально ли, чтобы каждая команда требовала столько вызовов? Это нормально для реализации Redis?