我是关键价值商店的新手,但我想学习。作为个人项目,我尝试使用Node.js和Redis构建库存管理系统。让我们假设这是目前使用的正确技术。
如果我有一个简单的系统,需要跟踪特定位置的小部件数量,能够按小部件或按位置查找详细信息,我根据https://matt.sh/thinking-in-redis-part-one的理解是存储单独的& #34;自定义索引"按地点和项目查询。
在node.js中保存一个新条目然后,我们将使用hmset创建条目,使用sadd将条目添加到2个索引中:
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);
}
);
现在,如果我们想将所有小部件从一个位置移动到另一个位置,我们需要从小部件集中获取所有条目,将条目添加到新位置索引,并将其从旧索引中删除:< / p>
// 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实现是否正常?
答案 0 :(得分:1)
是
Redis就是那么快。但是在你的机器或类似的生产机器上做一个运行redis的基准测试。 It is included in redis itself.。 (在此发布回来,我也感兴趣。)
Redis有很多commands可供您使用,而您的数据组织可能会允许更便宜的通话或更少的通话。这取决于您如何布置数据模型。实际上没有&#34;查询语言&#34;像SQL一样可以在查询中做很多事情或者将查询组合成一个查询。 你打算经常使用redis,这是一种与SQL 不同的哲学(在某种程度上)。
这个个人项目将让您了解哪些方面有效,哪些方面可以做得更好,所以对此努力的赞誉。祝你好运!