Tag: redis

node_redis:在forEach中使用client.multi

我有下面的代码,应该检索设备列表,并获得他们每个人的状态和标签: app.get('/test', function(req, res){ db.smembers("devices", function(err1, devices){ var jsonObj = {}; if(!err1) { var i = 0; devices.forEach(function(id){ db.multi([ ["get", id + ":label"], ["get", id + ":status"], ]).exec(function (err, replies) { jsonObj[id] = {"label":replies[0], "status":replies[1]}; console.log(jsonObj); // stuff is added on each loop }); i = i + 1; if(i == devices.length){ console.log(jsonObj); // jsonObj […]

将CouchDB和Redis一起用于交易数据

当我读到关于couchdb的时候,我偶然发现了一个关于事务和couchdb的问题。 显然,在沙发上处理交易的方式是拉取最新版本,并将其与您当前使用的版本进行比较。 如果数据快速变化,这可能会出现问题。 另一种方式是缩小地图并将交易数据分成多个文档。 这似乎也不是最佳的。 我正在考虑使用redis来处理这类数据。 增量和减量function对于这种目的来说似乎相当惊人。 所以我可以写一些事务性的关键字的string,如: //some user document { name: "guy", id: 10, page_views: "redis user:page_views:10" } 那么如果我在一些交易数据里面读到类似“redis”的东西,我就知道从redis获取这些信息。 我想我可以事先决定这些东西,但是由于面向文档的数据库的主要任务是灵活的,而不是将数据绑定到列上,我认为可能有一个更简单的方法? 有没有一种简单的方法将redis数据链接到couchdb? 我应该手动完成这一切,并为less数领域? 任何其他的想法? 在用户文档中“最终”更新这个事务性数据还是只是不在那里存储?

Express,node.js和redis:分离函数来访问数据

我试图创build一个文件'users.js'在哪里id喜欢pipe理所有的redis访问用户数据。 在这个文件中,我有下一个function,在那里我得到的用户保存在列表中,然后加载他们的所有钥匙: exports.getUsers = function(){ var usrs; client.lrange('users', 0, -1, function(err, rep){ client.mget(rep, function(e,r){ usrs = r; }); }); return usrs; }; 我有另一个文件“admin.js”,我尝试pipe理我的pipe理面板的路线。 在这个文件中我需要users.js文件,并且我调用了users.getUsers()函数。 我期望得到一个用户对象的数组,或者至less是所有的string。 问题是它总是返回“未定义”。 据我了解,发生了什么事情是,我试图在callback之前mget完成之前返回usrsvariables。 但我不知道如何解决这个问题。 问题是…我如何使返回语句等待mget? 有没有其他的方式来组织代码,并保持数据库访问由字段分隔?

在Express 2.x中访问Redis insdie路由处理程序

我已经使用CLI创build了一个Express 2.x应用程序。 所以我有一个路由目录和一个index.js。 现在,在app.js中,我已连接到Redis,并且正常工作。 我从app.js的routes / index.js文件中调用函数: app.post('/signup', routes.myroute); myroute函数包含从Redis获取密钥的代码。 现在,我得到了redis没有定义的错误。 如何将redis对象从app.js传递到routes / index.js?

移动所有的redislogging

我在这些服务器的dynamic实例化集群中使用Node + Redis。 当这些服务器实例化(在单独的虚拟机上)我想切断数据库。 我有一个哈希环函数来将键指向适当的服务器。 如何迭代商店中的所有密钥? 然后,当通过散列环推送该密钥时,如何处理被推回到当前服务器的密钥,而不会导致无限循环? 我需要一个新的redis实例吗? 然后在操作完成后杀掉旧的? 有没有办法让节点的redis客户端做这个操作?

按值查找redis散列

我使用node.js(与coffee ),这是我如何保存到redis: hash = "tweet:#{twitterResult.id}" hashset = tweet_id: twitterResult.id screenname: twitterResult.user.screen_name gender: gender client.hmset hash, hashset, -> console.log "SAVED IN REDIS" 我如何检索所有保存的女性与查询?

通过socket.io使用backbone.js

我试图进入node.js世界,并想build立一个简单但完整的testing应用程序来连接node.js与socket.io和backbone.js使用redis作为商店。 我发现了一些教程和一些例子。 不知何故,我只是对我必须使用的整个架构感到困惑。 通常你会用express来定义你的server.js中的所有路由。 所以你可以完全控制服务器端的路由。 现在连接骨干,你必须重新定义路线? 这似乎是一个模范的方面,但对我来说,这似乎是我不知何故不喜欢的双重工作。 所以我只是感到困惑,事情完全不同? 也许有人链接到一个很好的教程或例子,它更清晰。

使用Node&Redis获取10个随机项目

我试图找出如何从一个Mongo集合中获得一组10个随机项目。 我的计划是在Redis中存储一组Mongo ID,使用Redis SRANDMEMBER命令获取10个随机ID,然后从Mongo集合中获取它们。 由于我正在使用Node,所以我无法使用SRANDMEMBER 10,因为节点“redis”包不接受可选的第二个参数。 我真正绊倒的是如何以asynchronous友好的方式做到这一点。 我曾尝试使用由节点asynchronous库提供的几个工具,如Waterfall和While,但Redis调用总是比数据晚。 编辑#2: 为了回应下面的帮助,我已经完善了我的function: client.send_command("SRANDMEMBER", ["album_id_set", "10"], function(err, results) { if (err) console.log('Redis error: ' + err); Album.find({ '_id' : { $in: results } }, function(err, result){ if (err) console.log('Mongo error: ' + err); response.json(result); }); });

比较两个值的结果是false而不是true

我正在使用Express.js和Redis的Node.js。 我通过增加一个redis键来logging站点组件的正常运行时间。 我想更新uptimerecord:tracker键一旦当前正常运行时间>当前正常运行时间logging,但不知何故它不更新它,并评估uptimeTracker> uptimeRecordTracker与false即使它是真实的。 有什么我失踪? 谢谢! db.get("uptime:tracker", function(err, uptimeTracker) { db.get("uptimerecord:tracker", function(err, uptimeRecordTracker) { console.log("[Stats] uptimeTracker: " + uptimeTracker) console.log("[Stats] uptimeRecordTracker: " + uptimeRecordTracker) console.log("[Stats] Compare: " + (uptimeTracker > uptimeRecordTracker)) if(uptimeTracker > uptimeRecordTracker) { console.log("[Stats] Tracker Records updated") db.set('uptimerecord:tracker', uptimeTracker) } }); }); 控制台输出: [Stats] uptimeTracker: 213 [Stats] uptimeRecordTracker: 99 [Stats] Compare: false

redis zunionstoredynamic传递集合

我想在运行时定义的集合上使用zunionstore命令,它们是dynamic获取的,所以我永远不知道集合是什么,我必须传递给函数。 zunionstore的语法: ZUNIONSTORE目标numkeys键[键…] [权重[weight …]] [AGGREGATE SUM | MIN | MAX] parsed数组包含集合的名称。 client.zunionstore ( 'out', parsed.length, parsed, function (err, res) { console.log(err); if(!err) { client.zrevrange('out', 0, -1, 'withscores', function (err, res) { console.log(res); if(!err) { //do stuff } }); } } ); 你可以看到我试图传递包含名称的数组,但这不起作用。 我得到的错误: [Error: ERR syntax error] 任何想法如何解决这个问题?