Tag: redis

使用AWS的节点Redis

AWS通过ElastiCache服务支持Redis支持。 我的问题是,我可以使用以下方法连接到来自节点的AWS Elasticache上的Redis: var client = require('redis').createClient(6379, 'elastichache endpoint string', {no_ready_check: true}); 还是必须使用NodeJS AWS SDK? 我意识到我可以在EC2实例上设置自己的Redis服务器,但是我想使用ElastiCache。 这可能吗?

JavaScriptdevise模式 – 处理不需要的asynchronous

我很新的基于事件的编程(使用node.js)。 我相信有一点我不太在意,因为我遇到了一个又一个问题。 总之,这个问题在处理asynchronous性问题的时候似乎正在妨碍你。 在我的情况下,最常见的情况是使用第三方库,这些库在devise时没有阻塞,并且推广了基于callback的API。 例如:现在我正在写一些大量使用mranney的node-redis库的东西 。 我的程序正在抓取RSS源并将结果放入redis。 我正在使用我认为是re​​dis常见的策略: 抓取feed,将结果存储为一个redis hash,其中包含一个类似feed:<feedId>:results:<timestamp>的键feed:<feedId>:results:<timestamp> 。 在feed:<feedId>:latest存储对最新结果的引用feed:<feedId>:latest 。 var redis = require(“redis”); var client = redis.createClient(); var get_latest_results = function(feedId){ client.get('feed:+ feedId +':latest',function(err,res){ var latest_reading_key = res.toString(); client.hgetall(latest_reading_key,function(err,res){ var latest_reading = res; }); }); //如何为这个函数指定一个返回值? } 在get_latest_results函数的底部放置return latest_reading失败,因为在函数准备好退出之前,不会定义latest_reading。 在hgetall调用中放置return latest_reading失败,因为return指向callback,并被get_latest_results忽略。 这只是我似乎不断写入自己的方式的一个例子。 也许我正在试图把这个方块塞进圆孔里,因为我不知道更好。 这似乎应该有一个解决这类问题的不速之客的方法。

正确的方法来cachingAPI调用与nodejs的数据

我正在使用node.js来编写一个Web服务,它调用了一些API的数据,但是我被API限制为每月多次调用,所以我希望caching从API中检索的数据,这样我就可以服务它与caching的数据一起,并以一定的时间间隔从API重新获取数据。 这是这个问题的好方法吗? 我应该使用哪种caching框架? 我看着node-redis,但我不认为一个关键的价值存储是适合的数据。 谢谢!

Node&Redis:Redis客户端

假设您在Redis中有多个数据库,您希望插入和/或删除数据。 你有一个像 将数据插入到DB#1 在第一次插入的callback后,做一些东西,并将数据插入到数据库#2 第二次插入callback后,再次做一些事情,最后插入数据到数据库#3 我使用一个名为redisClient的variables,它基本上被创build为; redisClient = redis.createClient(); 而select一个新的数据库,我使用select命令与额外的预警callback,所以我的select命令就像; redisClient.select(1, function(err) { //Some programming logic (Insertion, deletion and stuff) redisClient.select(2, function(err) { //Do some additional programming logic (Insertion, deletion and stuff) } }); 然而事情总是混合在一起。 我想指出的是,redisClientvariables已经被分配了一次,后来在整个应用程序中使用。 现在我想知道, 为 Redis中的每个数据库使用单独的redisClient是多合理的。 所以会是这样的; redisClientForDB1 = redis.createClient(); redisClientForDB2 = redis.createClient(); redisClientForDB3 = redis.createClient(); 我想知道这样做是否合理,或者对于每秒能接收4K请求并即将进入生产模式的应用程序来说,这是一个正确的方法。 这个模型可能面临什么问题 ?

Node_redis – 如何删除密钥?

有什么办法通过键删除/删除一个条目,使用Node_redis ? 我看不到任何这样的文件选项..

我是否实现序列化和反序列化NodesJS + Passport + RedisStore?

我是否实现序列化和反序列化? RedisStore被设置为我的会话存储与Express。 这是否意味着我不执行序列化和反序列化? 会自动发生吗? 当我不执行这些方法时,我得到以下快速错误 – 500错误:无法序列化用户进入会话。 当我执行它们时,我不确定要在反序列化中放置什么。 下面的代码似乎工作,但会议不坚持。 我每次访问该网站时都需要login。 在NodeJS + Passport + RedisStore的任何地方都有一个很好的例子吗? var sessionStore = new RedisStore({ host: rtg.hostname, port: rtg.port, db: redisAuth[0], pass: redisAuth[1] }); passport.use(new ForceDotComStrategy({ clientID: clientId, clientSecret: clientSecret, callbackURL: myurl }, function(token, tokenSecret, profile, done) { console.log(profile); return done(null, profile); } )); appSecure.configure('production', function(){ appSecure.use(allowCrossDomain); appSecure.use(express.cookieParser(expressSecret)); appSecure.use(express.bodyParser()); appSecure.use(express.methodOverride()); […]

Postgres Hstore vs. Redis – performance明智

我在Postgres上阅读了Redis提供的HStore。 我们的应用程序是用NodeJS编写的。 两个问题: 性能方面,Postgres HStore与Redis相当? 对于会话存储,你会推荐什么–Redis,或Postgres与其他types的数据types(如HStore,或者甚至通常的关系表)? 一个选项与另一个选项有多差? 另一个限制是,我们需要使用PostgreSQL中已经存在的数据,并将其与活动会话(如果在Redis或PostgreSQL中,我们不确定在哪里存储)结合使用。 根据我们所读到的,我们已经指出要使用Redis作为会话pipe理器,但是由于PostgreSQL的限制,我们不确定如何将这两者结合起来,以及可能出现的性能问题。 谢谢!

如何在使用express / connect和会话存储时查找会话ID?

如果用户已经login并尝试在新实例中重新login,我希望它注销另一个用户实例。 我不希望同一个用户在我的应用程序上login两次。 目前会话存储在Redis存储中,我使用快速/连接来处理会话存储。 可用于破坏会话的function之一如下: .destroy(sid, callback) 但是,我需要find该会话ID,然后再调用.destroy()。 在Redis中,用户名被存储为会话的一部分。 问题:是否可以通过查询Redis来获取基于用户名的会话ID?

垂直和水平地缩放Socket.io – 什么是“正确的”方式?

我想纵向和横向扩展我的Node.js套接字应用程序,我还没有find一个复杂的解决scheme。 我的应用程序有两个用例: 将消息从一个用户广播到所有其他用户 将消息从一个用户推送到一部分用户 一方面,我已经读过,我需要Redis和socket.io-redis 另一方面,我观看了这个video ,看到这个回答说Redis不可靠,并且不能保证发布的消息到达 ,所以你只能用它来进行聚类/垂直缩放 使用ServiceBus的 Microsoft Azure解决scheme是没有问题的,因为我不想使用Azure。 这个人不是Redis,而是推荐使用RabbitMQ进行水平缩放。 对于垂直缩放,还有一个用于节点进程的IPC,即socket.io- clusterhub ,但它似乎只能在Socket.io <= v0.9.0 然后有这个人 ,他已经实现了自己的方法通过HTTP请求传递消息到其他节点,这是有道理的。 但为什么HTTP请求,如果你也可以build立服务器之间的直接套接字连接,同时推送消息到所有的服务器,克服从一个服务器到另一个延迟? 作为一个结论,我想也许我可以在每个服务器上使用Redis ,只是为了在多个进程中集中我的应用程序时交换消息,以及RabbitMQ作为S2S通信解决scheme。 但是有一个Redis per Server和另外一个RabbitMQ似乎有些过火了。 是否有任何已知的更短/更好的解决scheme来双向可靠地扩展Socket.io? 编辑:我已经尝试使用单个Redis服务器多个Node.js服务器,其中每个服务器通过所有核心上的粘滞会话使用群集。 虽然群集在自己的作品像redis的魅力,使用多个服务器似乎有问题。 消息不会到达其他节点 。

使用Express / Redis进行会话存储时,“会话”未定义

我正在尝试在快速应用程序中使用redis进行会话。 我做了以下几点: var express = require('express'); var RedisStore = require('connect-redis')(express); app.configure('development', function(){ app.use(express.session({ secret: "password", store: new RedisStore({ host: "127.0.0.1", port: "6379", db: "mydb" }) })); 后来,在我的应用程序中,如果我做了这样的事情: var whatever = req.session.someProperty; 我得到: 无法读取未定义的属性“someProperty” 这表明req.session是未定义的(我可以从configuration节中的console.log条目中看到这一点) 我肯定有redis运行,并可以看到我的应用程序连接到它最初(使用redis-cli显示器)