Tag: redis

Redis:如何检查while循环中是否存在

我在我的应用程序中使用Redis,有一件事情对我来说并不明确。 我用一个随机生成的string作为关键字保存一个对象。 不过,我想检查一下这个密钥是否存在。 我打算使用while循环,但是我不知道如何根据Redis来构造它。 因为如果我想检查一次,我会做; redisClient.get("xPQ", function(err,result){ if(result==null) exists = false }); 但是我想用while循环作为; while(exists == false) 但是我不能在我的脑海中build立代码结构。 会在function内部还是在function外?

socket.io + redis – 幽灵套接字 – 可能吗?

我做了一个应用程序与node.js,socket.io,群集,redis和它运行8个进程。 每个进程有没有可能有一些幽灵套接字? 我的意思是sockets已经断开,但并不是每个进程都知道它,但仍然有它们。 我的应用程序在连接事件中向客户端发送在线计数(来自两个房间的套接字计数)。 并且每3秒发送一个叫做“HEAD”的进程,也对所有的套接字“在线计数”进行发送。 我为什么要告诉它? 当我在浏览器中连接到应用程序时,首先从8个进程中的一个获得“在线计数”,让它成为60,3秒后,我从HEAD进程获得“在线计数”,但是这是非常不同的数字。 所以我认为有些东西不通过Redis同步到进程。 可能吗?

Node.js / Express / Redis只等待来自通道的一条消息

我有一个redis连接订阅了一个获取请求的频道 app.get('/wait', function (req, res) { redisSub.on('message', function(channel, msg) { console.log('rcv: ' + msg); }); }); 后来用不同的获取请求发送消息 app.get('/done/:msg', function (req, res) { redisPub.publish('message', req.params.msg); }); 问题是我希望这个请求一旦得到就停止收听消息。 否则,当我再次经历时,它仍然在听,并且会再次得到下一个消息。 一旦收到消息,我不确定如何从自身中删除监听器。

NodeJS使用nodejitsu URI进行连接重新configuration

我在nodejitsu上创build了一个Redis数据库,并获得了一个完整的URI,例如: nodejitsu:nodejitsudb11158161232.redis.irstack.com:f327c9sj29sj26e80b8e975fbebb4@nodejitsudb3058169sj32.redis.irstack.com Connect-Redis想要一个主机,端口等等…任何人都知道一个简单的方法,我可以通过这个string? 设置主机时似乎没有工作 – mongodb似乎在这个模式下工作正常。

Redis快速应用程序的结构

我不确定在我正在构build的Express应用程序中,哪里是定义redis客户端的最佳位置。 我正在使用框架作为框架。 看起来像redis的连接应该在boot.coffee或app.coffee ,但是我不能轻易地在application_controller.coffee获得对它的引用,这就是我需要的地方。 如果我将client = redis.createClient放在application_controller.coffee ,是否意味着每个请求都会创build一个新的客户端?

如何在TTL达到0时自动更新EXPIRE

我正在build立一个应用程序,我需要有三个记分板,我正在使用sorting集和列表来实现。 该应用程序在node.js上使用redis客户端的node_redis( https://github.com/mranney/node_redis )模块运行。 第一个记分牌是我使用列表和LPUSH的“最新分数”。 第二个是我使用ZADD命令的sorting列表。 我在本周实施“高分”时遇到了麻烦。 我以为我应该使用另一个sorting列表使用ZADD与EXPIRE设置一个星期。 这一切都可以正常工作,但是在列表第一次过期之后,它会一直添加到新列表中。 是否有一个redis命令过期自动更新? (我现在一直在寻找答案几个小时,但答案似乎是否定的)。 我得出的结论是,我需要以编程方式做到这一点。 在使用该函数的函数调用期间,我可以检查TTL是否为-1,然后在那里重新设置。 这是最佳做法吗? 我错过了一个聪明的把戏吗? 我需要关心额外的数据库请求吗? – 编辑 – 我已经在twitter上回复了这个问题https://twitter.com/redsmin/status/302177241167691777 build议的解决scheme(如果我理解正确的话)是与每个ZADD一起使用EXPIREAT命令 expireat myscoreboard {{timestamp of the end of the week}} zadd myscoreboard 1 "one" 这个“感觉”对我来说是正确的,但是我对redis很陌生,所以会对这个技术或者其他任何解决这个问题的方法进行讨论。

表示没有find它期望的redis结果

我跟着一个快速演示,你用redis存储值,然后检索它们。 当我尝试将代码适配到我设置的快速应用程序时,我无法获得预期的结果。 主要是,当我尝试获取req.online的长度,我得到一个错误,因为它有一个空值。 用下面的代码,我期望req.online.length有一些价值,而不是总是null ,从而引发错误。 这个贴的代码工作( req.online.length将等于2): http : req.online.length 此粘贴中的代码不起作用( req.online.length为空,尝试检查长度时发生错误): http : req.online.length 当我通过redis cli检查使用: ZREVRANGEBYSCORE online +inf -inf 我可以看到按预期存储的各种用户代理值。 我需要做什么才能从redis获得这个值并使用它?

将所有内容存储在Redis中并将其发送到模板

我正在构build一个小的Node.js应用程序,我需要做的一件事是获取Redis数据存储区中的所有数据,并将其显示在此特定页面上。 到目前为止,我的代码如下所示: exports.view = function (req, res) { rclient.keys('*', function (err, reply) { var data = {}; // Get the value for each key for (var i = 0; i < reply.length; i++) { rclient.GET(reply[i], function (err, value) { data[reply[i]] = value; }); } res.render('view', {title: 'Datastore', data: data}); }); }; 我在这里至less有两个问题。 一:由于Node.js的asynchronous特性,当我把它传递给我的渲染函数时,数据variables是空的。 避免这种情况的正确方法是什么? 二:variables我不等于callback中的期望值,因为循环增加了,而且由于范围的限制,当第一次迭代的callback被调用(应该是0)时,i等于1。 […]

JS闭包,Redis,循环,asynchronous::空数组

我放弃了这一点。 可能一些明智的stackoverflow僧侣请修复我的错误? 代码是自我解释。 客户端发送房间名称,服务器执行redis查找并将有效房间推送到arrays。 在添加所有房间之后,该列表应该被发射到客户端。 问题是closures,asynchronous等基础。 我理解这个问题,但不能得到解决方法,因为数组需要保留在函数内。 棘手。 码: function roomList(socket){ var roomlist = [], rooms = getRooms(), p = /pChannel_/; redis.select(7, function(err,res){ for (var k in rooms){ if(rooms[k] != '' && p.test(rooms[k])){ var key = 'channel:'+rooms[k]; redis.hgetall(key, function (err, reply) { if(reply){ var c = io.sockets.manager.rooms[rooms[k]]; roomlist.push( Array(reply['name'],c.length,reply['icon']) ); } else { console.log('nothing found'); […]

Facebook如何知道某人是否在线

我正在做一个Node.js(Express框架)和socket.io的实时网站,在某些时候,它必须检测是否有人在线(这基本上是有人打开网页)。 我认为Facebook聊天就是这样的一个例子。 但是它背后的工程逻辑是什么? 非常感谢!