Tag: redis

Redis中的多租户为node.js

我们有一个多租户NodeJS应用程序,现在我们正在为我们的一些数据添加一个caching层。 我们的目标是使用Redis 包中的 Rediscaching,我们正在努力检查我们支持多租户的选项,主要考虑两点: 保护数据。 清除租户级别的旧数据。 我们目前的调查结果是,我们可以为每个租户使用单独的Redis实例 – 这对我们来说不是一个好的解决scheme。 我们发现的另一个select是使用“tenant_id:”前缀命名空间。 这个选项解决了第一点 – 数据现在是安全的,但我们仍然有第二点要解决。 我们的使用案例是,一个租户可以投入大量的数据来填充caching并推出其他租户的数据。 我们希望在租户级别定义我们的LRU,也就是说,当新数据添加到caching时,它只会驱逐同一租户最近使用的最后一个数据。 有什么build议么?

为什么async在循环中的node.js中给出错误

我在我的应用程序中有这部分代码。 card.getcard(command, function(toproceed,resultscard) { console.log('entry other cards api result'+sys.inspect(resultscard)); if (resultscard.length==0) { return proceed(false,{errno:'011','queueno' : request.queueno, message:'there is no access card for particular gib'}); } for (var i=0; i<resultscard.length;i++) { console.log('card owner'+resultscard[i].owner); //checking that any users is in inside of gib server.wrap(function(){ server.getchannel("channels."+request.gibid+'-I', function(err, channel) { if (channel.users) { var arr=channel.users.split(','); if (functions.in_array(resultscard[i].owner, arr)) { […]

在redis.conf中使用requirepass时,将express.js应用程序连接到redis服务器时出错

我是新来的节点和redis,并build立一个简单的服务器快递与redis通信。 启动redis-server之后,我启动节点服务器app.js 当我使用redis.conf文件而不使用requirepass时,app.js启动并运行,但是当我添加requirepass时,应用程序在启动时崩溃。 我可以在terminal运行redis-cli,密码在那里工作。 运行app.js时,我得到这个Uncaught错误堆栈: throw e; // process.nextTick error, or 'error' event on first tick ^ Error: Uncaught, unspecified 'error' event. at RedisClient.emit (events.js:47:15) at Command.callback (/node_modules/redis/index.js:232:29) at RedisClient.return_error (/node_modules/redis/index.js:382:25) at RedisReplyParser.<anonymous> (/node_modules/redis/index.js:78:14) at RedisReplyParser.emit (events.js:64:17) at RedisReplyParser.send_error (/node_modules/redis/lib/parser/javascript.js:265:14) at RedisReplyParser.execute (/node_modules/redis/lib/parser/javascript.js:124:22) at RedisClient.on_data (/node_modules/redis/index.js:358:27) at Socket.<anonymous> (/node_modules/redis/index.js:93:14) at Socket.emit (events.js:64:17) 以下是app.js中的相关代码 var REDIS_PASS […]

使用redis和socket.io – 如何更新每个客户端?

我使用socket.io和Redis以及node.js – 下面的代码。 我肯定在这里很愚蠢,但是我不明白为什么Redis事件只会与连接的第一个用户激发。 每个打开页面的用户都会再次看到NEW CONNECTION控制台消息,但是我只能看到第一个用户的REDIS控制台消息。 io = io.listen(app); client.flushall(); io.sockets.on('connection', function (socket) { // Update Redis with information about this connection. console.log('*************** NEW CONNECTION'); client.multi() .hmset("user:" + user_id, "nickname", nick) .sadd("chatroom:" + room_id, user_id) .exec(); // Check that the Redis record was set. client.smembers("chatroom:" + room_id, function (err, data) { if (err) { console.log(err); […]

更清洁的方式在node.js中执行多个redis查询

我做了一些node.js代码来检索在Redis数据库中的数据,但我不是很高兴,我想改善它… 基本上,我在redis db中有一个“人”的logging。 从“人”我得到“人:我”(我是一个整数)的列表,并为每个“人:我”,我做了一个额外的查询来检索密钥“人:我”散列。 这是我如何做到的: db.smembers("people", function(err1, people){ var jsonObj; var jsonArr = []; if(!err1) { var i = 0; res.writeHead(200, {'content-type': 'application/json'}); // people will provide a list like [person:1, person:2, …, person:n] people.forEach(function(person){ // In redis I get the hash with key "person:i" db.hgetall(person, function(err2,obj){ if(!err2){ // Add person into array jsonArr.push({ "id" […]

为OS X构build重复数据删除应用程序,我应该如何使用它作为文件的哈希值

我即将开始编程之旅,毫无疑问,它将以失败告终,并且/或者将我的鼠标通过我的Mac投掷出去,但这是一个有趣的问题。 我想要构build一个应用程序,该应用程序从基本目录开始扫描,然后循环遍历每个文件,如果find完全相同的重复文件,则将其删除,并在其位置上创build符号链接。 基本上穷人重复数据删除。 这实际上解决了一个真正的问题,因为我的Mac上有一堆重复的文件,我需要释放磁盘空间。 从我所读到的,这是战略: 通过recursion循环,并为每个文件生成一个散列。 散列需要非常独特。 这是第一个问题。 我应该使用什么散列? 我如何通过这个神奇的散列运行每个文件的整个二进制内容? 将每个文件散列和全path存储在键/值存储中。 我认为redis是一个非常好的select,因为它的速度。 遍历键/值存储区,查找重复的哈希值,删除重复的文件,创build符号链接,并将键/值存储区中的行标记为副本。 因此我的问题是: 我应该为每个文件使用什么散列algorithm? 这是怎么做的? 我在考虑使用node.js,因为节点通常在I / Otypes的东西上很快。 问题是节点吸取CPU密集的东西,所以哈希可能是瓶颈。 我还有什么其他的缺点?

Incr似乎运行两次 – 为什么?

我很难得到节点,redis和async做我想要的。 我正在尝试非常基本的事情来掌握redirect控制stream的模式。 在这里,如果比较key0 > key1为真,我保存一个计数器variables“success”。 它们现在是静态的,所以它总是如此。 我唯一希望改变的是增加success 。 我刷新浏览器重新运行比较,并再次增加success 。 我的麻烦是:刷新页面时, success跳转2.我试着用incr进行callback,但看起来只有get -type命令有callback。 我有一个client.end(); 在我的脚本,但它阻止我重新加载页面,所以我评论它。 我怀疑这是我的问题的来源。 如果是这样, client.end属于哪里? var http = require("http"); var redis = require("redis"); var async = require("async"); client = redis.createClient(); http.createServer(function(request, response) { // key "success" set to 0 externally, through redis-cli; client.set("key0", "19"); client.set("key1", "11"); response.writeHead(200, {"Content-Type": "text/plain"}); async.series([ shortcut("key0"), shortcut("key1"), […]

为什么redis SADD不能将数组作为node.js中的input?

我正在使用https://github.com/mranney/node_redis并尝试一次更新多个值的集(在redis cli "SADD myset val1 val2"工作正常)。 我正在使用的确切命令是: var cmd_array = ['myset', 'val1', 'val2']; client.sadd(cmd_array); 基于他们的文件这应该工作。 任何想法,为什么不呢? 谢谢

Node.js多服务器集群:如何在多个节点集群中共享对象

我想创build一个node.js服务器的集群,以同时支持多个并发,为一个聊天室应用程序。 服务器保存需要在所有节点之间共享的信息,我试图找出保持所有服务器同步的最佳方法。 我希望共享对象具有尽可能大的灵活性,因为我打算在将来添加更多function。 到目前为止,我有两个解决scheme: 订阅NoSQL密钥(例如, redis发布 – 订阅 ) 节点使用套接字互相更新。 哪个更好? 我错过了什么?

使用Redis更新sorting集

目前我正在尝试更新已sorting的集合成员。 看看文档,使用ZADD似乎应该更新成员,如果它的分数已经存在。 但是,使用此代码尝试更新成员时, db.zadd("users", parseInt(key, 10) + 1, JSON.stringify(newData)); ….即使乐谱已经存在,也会添加新的条目! 如何使用redis更新已sorting集的成员?