Tag: node redis

我应该如何在节点js中使用db + http调用的promise

我需要执行哪个系统 从父集合获取数据。 检查在redis中find的特定密钥 如果没有,然后做一个http调用并获取json数据,然后设置caching 如果是,则从caching中获取数据 将数据保存到父标识的子集合中。 我有使用callback这样的工作解决scheme。 MongoClient.connect(dsn).then(function(db) { parentcollection.findOne({"_id" : new ObjectId(pid)}, function(err, data) { var redis = require("redis"), client = redis.createClient(); client.on("error", function (err) { console.log("Error " + err); }); // If not set client.get(cacheKey, function(err, data) { // data is null if the key doesn't exist if(err || data === null) { […]

使用nodeJS的sentinal识别Redis Master

我有2个Redis服务器一个主机和另一个从机(复制)。 一旦师父由于某些原因被closures,奴隶将成为主人,并继续作为主人,直到该服务器发生错误。 我有一个nodeJS服务器,我想将数据推送到当前以Master身份运行的Redis。 我有一个监控Redis服务器的哨兵,但我的问题是如何使用nodeJS从sentinel获取主信息? 如果有办法,它是否会自动将数据推送到备用的redis服务器,而无需重启服务?

如何在节点应用程序中实时提供给所有跟随者

我正在开发node.js和MongoDB中的社交networkingtypes的应用程序。 我想添加一个function,如 – 如果用户A已经跟随用户B,那么当用户B发布的东西,它应该自动来到他的墙上的用户A! 方法1 – 这是我研究到现在创build一个用户B的频道,所有其他用户订阅该频道,当用户B张贴的东西,然后发射与所有用户socket.io。 所以对于这种方法,我们正在考虑在每次新用户注册时创build一个频道。 但问题是 – 这是可行的方法,我怎么知道哪个通道是哪个用户或者是否有方法在MongoDB中存储通道。 如果我创build了太多频道,会导致我的服务器崩溃? 方法2 – 我得到的另一个方法是 在数据库中查找源用户的追随者。 并使用socket.io发送饲料给所有的追随者如何扩大这个,如果我有100个追随者的每个用户,当每次用户发布,将search在数据库中创build一个开销。 使用Rediscaching会更好地存储追随者? 而不是检查追随者 – 从Redis中find并使用socket.io发出消息 方法3 – 我听说Redis pub / sub的名字,但无法find它在我的应用程序中的工作原理。 请build议一些创build这样的最好的标准! 如果上面的方法是好的,你可以请build议我的stream程或如何创build一个代码! 如果你给我一个例子,我会很棒。

node.js中的Redis错误

我在Node.js中使用Redis,并且在实时服务器上部署时,它开始崩溃,出现以下错误消息: 请求的数量是每秒更多。 at Object.replyToObject [as reply_to_object] (/home/ubuntu/webservices/node_modules/redis/lib/utils.js:7:15) at RedisClient.handle_reply (/home/ubuntu/webservices/node_modules/redis/index.js:319:23) at multi_callback (/home/ubuntu/webservices/node_modules/redis/lib/multi.js:79:43) at Command.callback (/home/ubuntu/webservices/node_modules/redis/lib/multi.js:116:9) at normal_reply (/home/ubuntu/webservices/node_modules/redis/index.js:726:21) at RedisClient.return_reply (/home/ubuntu/webservices/node_modules/redis/index.js:824:9) at JavascriptRedisParser.returnReply (/home/ubuntu/webservices/node_modules/redis/index.js:192:18) at JavascriptRedisParser.execute (/home/ubuntu/webservices/node_modules/redis/node_modules/redis-parser/lib/parser.js:553:10) Socket.<anonymous> (/home/ubuntu/webservices/node_modules/redis/index.js:274:27) emitOne (events.js:116:13) Socket.emit (events.js:211:7) addChunk (_stream_readable.js:263:12) readableAddChunk (_stream_readable.js:250:11) at Socket.Readable.push (_stream_readable.js:208:10) at TCP.onread (net.js:594:20) 我编写了通用代码来打开和closuresRedis连接,并尝试重新使用连接。 (不知道这是重复使用它的正确方法)。 我正在使用Redis“^ 2.7.1”并在Ubuntu上本地安装Redis。 我能够进入Redis控制台并查看存储的密钥。 但不知道为什么它非常频繁地给出上述错误信息。 我正在使用pm2模块,所以一旦崩溃就重新启动。 以下是Node.js中的Redis代码 var Promise = […]

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 […]

Node-redis非常长的初始连接

有时我的node-redis客户端需要很长时间才能初始连接到redis服务器。 我在这里login.on('error'),.on('end'),.on('connect')和.on('ready')事件: Redis: storage#0 <localhost:6381> end Redis: error storage#0 <localhost:6381> [Error: Redis connection to localhost:6381 failed – getaddrinfo ENOTFOUND] /*… much of same errors, sometimes up to 5minutes …*/ Redis: error storage#0 <localhost:6381> [Error: Redis connection to localhost:6381 failed – getaddrinfo ENOTFOUND] Redis: storage#0 <localhost:6381> connect Redis: storage#0 <localhost:6381> ready 当发生这种情况时,我通常可以使用redis-cli连接到redis服务器。 有没有人有关于这个原因的任何想法?

在哪里运行redis-sentinel

为了pipe理主从故障转移,redis手头上有sentinel。 我正在使用两台服务器。 一个用于主服务器,另一个用于从服务器。 主机和从机都是远程服务器,并作为后台进程运行。 如何configuration主站和从站IP的标记。 哨兵需要运行的地方。 如何运行哨兵守护进程。 详细信息: 我的主人在跑 Port: 6379 IP: 192.168.56.101 我的奴隶跑进去了 Port: 6379 IP: 192.168.56.102 我的节点正在运行 IP: 192.168.0.140 注意 :Redis服务器在Windows的虚拟机中运行。 节点也在同一台机器上本地运行。 更新该文档指定运行sentinel的命令。 我的问题是哨兵需要在我的本地机器上运行,或者在主机正在运行的虚拟机上运行,​​或者作为单独的哨兵服务器运行。 就像一个redis服务器的主人,一个奴隶,另一个哨兵。

Redis:添加到一定的长度数组?

我想在Redis中使用一个数组(使用Node),我可以在其中添加值并指定我希望它留在那里的时间。 在这个时间限制之后,他们应该被删除,并且理想地能够打电话给我,所以我知道刚刚离开的东西。 恩。 我可能会收到120秒的请求,所以我想把这个值添加到地图上,然后把它删除。 有一个更好的方法吗? 我想过使用EXPIRE,但似乎只是为了键,而不是数组中的元素? 任何想法都会很棒。 这就是我所做的: app.get('/session/:length', function(req, res) { var length = parseInt(req.param('length'), 10); addToArray(length, ip) var ip = req.connection.remoteAddress; res.json({ip: ip, length: length}); }); 基本上,当我将它添加到数组中时,我希望它只在传入的时间内保持它在数组中。所以如果你说30秒,它在该数组中30秒,然后消失,并调用回电话。 也许有更好的方法来解决这个问题? 我现在所做的是保持时间添加和ip,时间在一个数组中,并周期性地通过数组检查和删除循环,但也许可以在redis中自动执行此操作。

在Node中创build唯一的API密钥以存储在Redis中

我在Node中构build一个API,并在Redis中存储API密钥/访问令牌。 如何才能最好地生成一个唯一的API密钥/访问令牌,以在Redis中存储密钥和电子邮件地址作为值? Redis是否有一个内置函数来生成一定长度和字符集的唯一ID,或者我应该如何解决这个问题? 谢谢!

如何用Heroku / RedisCloud / Node.js远程检查数据

我有RedisCloud与Heroku上的Node.js运行,并希望远程检查数据,理想情况下使用OS X命令行。我已经看到这样的: 如何远程检查我的RedisCloud数据库中的数据? 但这是为了Ruby,不适合我。 (我没有findredis-cli:command 。) 我正在使用node_redis客户端: https://github.com/mranney/node_redis 在我的服务器应用程序的要求是这样的: var express = require('express'), app = express(), http = require('http'), server = http.createServer(app), io = require('socket.io').listen(server), redis = require('redis'), ioredis = require('socket.io-redis'), url = require('url'), redisURL = url.parse(process.env.REDISCLOUD_URL),