Tag: redis

你应该让Redis打开,还是在每次使用节点后打开并退出?

我有一个使用redis的socket.io服务器,名为“server.js”,它启动了一个节点服务器。 目前它是这样的: var client = redis.createClient() var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { client.set(); // do something with redis }); 然后我启动我的服务器,它只是活着。 这是错的吗? 应该是这样吗? var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { var client = redis.createClient() client.set(); // do something with redis client.quit(); }); 我应该继续打开和closuresredis,或者我可以打开一次,并打开它? 上面哪个片段是启动服务器的正确方法?

我应该在文件/模块之间共享Redis连接吗?

我正在开发一个node.js应用程序,我需要沉重的Redis使用。 该应用程序将跨8个CPU核心进行cluster 。 现在我有100个并发连接到Redis,因为每个CPU的每个工作者有几个运行require('redis').createClient() 。 情景A: file1.js: var redis = require('redis').createClient(); file2.js var redis = require('redis').createClient(); 情景B: redis.js var redis = require('redis').createClient(); module.exports = redis; file1.js var redis = require('./redis'); file2.js var redis = require('./redis'); 哪种方法更好:在我介绍的每个新文件(schemeA)中创build新的Redis实例,或者在全局范围内创build一个Redis连接(schemeB),并在我拥有的所有模块之间共享此连接。 每个解决scheme的缺点/好处是什么? 提前致谢!

具有高读取性能的NoSQL数据库(写入访问不重要)?

我正在使用Nodejs在“实时”网站上工作 。 目前,我正在使用Redis,因为我需要高性能的读取权限。 写入访问对我的用例来说并不重要。 另外,Redis没有search的查询语言。 所以,我手动创build我的索引,并使用一些联合/交叉点/ …来查找一些值。 我认为使用embedded式查找系统和类似ORM的MongoDB会比较容易(例如Mongoose )。 问题是我不确定MongoDB是否是我的用例的最佳select。 你对NoSQL DB的build议是什么? Redis? CouchDB ? MongoDB? 卡桑德拉 ? 等等 我再说一遍:我希望读取访问和search (写入访问不重要),最简单的可能(orm-like?查找系统等) 谢谢。

nodejs redis Q promise,如何使它工作?

我正在尝试从redis获取一些值,并将它们结合起来并最终发送。 但我不能使这些承诺工作。 这是从redis get简单的function client.get('user:1:id',function(err,data){ // here I have data which contains user ID }); client.get('user:1:username',function(err,data){ // here I have data which contains username }); 现在我想获得ID和username ,并发送给他们,但我不知道如何做到这一点。 我设法使它与callback工作,但它是非常混乱的结果,所以然后我试图将匿名函数包装到Q.fcall ,然后调用。然后.then看起来像这样 client.get('user:1:id',Q.fcall(function(err,data){ return data; }).then(function(val) { // do something })); 但是这让我错误了太多的论点被传递,我甚至不知道这是否会帮助我,即使它会工作。

使用node-redis和节点8 util.promisify

节点-v:8.1.2 我使用redis客户端node_redis与节点8 util.promisify,没有blurbird。 callbackredis.get是好的,但promisifytypes获取错误消息 TypeError:无法读取未定义的属性'internal_send_command' get(D:\ Github \ redis-test \ node_modules \ redis \ lib \ commands.js:62:24) 在get(internal / util.js:229:26) 在D:\ Github \ redis-test \ app.js:23:27 在对象。 (d:\ Github上\ redis的testing\ app.js:31:3) 在Module._compile(module.js:569:30) 在Object.Module._extensions..js(module.js:580:10) 在Module.load(module.js:503:32) 在tryModuleLoad(module.js:466:12) 在Function.Module._load(module.js:458:3) 在Function.Module.runMain(module.js:605:10) 我的testing代码 const util = require('util'); var redis = require("redis"), client = redis.createClient({ host: "192.168.99.100", port: 32768, }); let […]

如何使用节点在redis中存储二进制对象?

我正在尝试在redis中保存一个二进制对象,然后将其作为图像提供回来。 这里是我用来保存数据的代码: var buff=new Buffer(data.data,'base64'); client.set(key,new Buffer(data.data,'base64')); 以下是转储数据的代码: client.get(key,function(err,reply){ var data = reply; response.writeHead(200, {"Content-Type": "image/png"}); response.end(data,'binary'); }); 数据的前几个字节似乎已损坏。 幻数是不正确的。 做了一些实验: 当我做到以下几点: var buff=new Buffer(data.data,'base64'); console.log(buff.toString('binary')); 我得到这个: 0000000:c289 504e 470d 0a1a 0a00 0000 0d49 4844 当我这样做 var buff=new Buffer(data.data,'base64'); console.log(buff); 我得到以下内容: 缓冲液89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 […]

Node.js,(Hi)Redis和multi命令

我正在玩node.js和redis,并通过这个命令安装了hiredis库 npm install hiredis redis 我看了这里的多个例子: https://github.com/mranney/node_redis/blob/master/examples/multi2.js 它在第17行说 // you can re-run the same transaction if you like 这意味着一旦命令执行完成,内部的multi.queue对象就不会被清除。 我的问题是:你将如何处理在http环境中的情况? 例如,跟踪最后一个连接的用户(这不是真的需要多个,因为它只是执行一个命令,但很容易遵循) var http = require('http'); redis = require('redis'); client = redis.createClient() multi = client.multi(); http.createServer(function (request, response) { multi.set('lastconnected', request.ip); // won't work, just an example multi.exec(function(err, replies) { console.log(replies); }); }); 在这种情况下,multi.exec将为第一个连接的用户执行1个事务,并为第100个用户执行100个事务(因为内部multi.queue对象从不清除)。 选项1:我应该在http.createServercallback函数中创build多对象,这将在函数执行结束时有效地终止它? 在CPU周期方面是多么昂贵的创build和销毁这个对象是? […]

聆听Redis的变化?

我希望能够在我的redis集合中进行任何更改时运行callback。 callback将把关键和价值作为input。 是这样的可能吗? 谢谢?

想要通过Node.js存储在Redis中

我想在Redis中存储用户的哈希/ JSON数据,并希望在用户中添加这样的用户数据。 例如, users = {} ; 当用户rahullogin时, users将成为。 users = { rahul: { username: 'rahul', } } 而当用户namitalogin然后 users = { rahul: { username: 'rahul', }, namita: { username: 'namita', } } Redis的代码是什么? 我将如何初始化关键users并添加rahul ? 在这个集合中,hset等等,我需要使用哪个函数? 而我将如何通过Redis检索users['rahul']的数据users['rahul'] ?

MongoDB和Redis作为caching层架构

假设我们有一个社交networking应用(使用NodeJS,Express)和MongoDB作为主数据库引擎。 在大多数来自客户端(移动应用程序,Web应用程序等)的API调用中,我不想为每个请求进行复杂的查询。 例如,这些请求可以从caching层回复,例如Redis。 但我的问题是如何/何时应该更新caching层,因为所有写操作都在MongoDB数据库中执行,而不是caching层(Redis)。 解决这个问题的正确方法/架构是什么?