2015-01-21 108 views
3

我初学者使用Redis的服务器在我申请的NodeJS我使用Redis的服务器作为会话存储我的应用程序为:如何使用Redis作为多个aws实例或ELB的会话存储?

var RedisStore = require('connect-redis')(express); 

var admin_session = express.session({ 
    key: 'admin_token', 
    store: new RedisStore({ 
     host: 'localhost', 
     port: 6379, 
     db: 2 
     // pass: 'RedisPASS' 
    }), 
    secret: '[email protected]#$32sfas2342' 
}); 

这是工作的罚款单实例。但我的查询是从aws elb提供多个实例。

其实我希望redis服务器作为一个集群,清除所有实例的会话,如果任何实例内有任何更改并清除所有代码级别的高速缓存。

如果可能的话,任何人都可以帮助我如何做到这一点,什么是步骤?

由于提前, 维杰

+0

您需要在一个地方运行Redis并从各个节点服务器连接到它。您可以运行亚马逊的托管redis,这使您可以在整个集群中使用dns端点。 – tedder42 2015-01-21 13:28:43

+0

是否有可能在每个aws实例上都有redis服务器,并且所有这些服务器都处于同步模式或群集模式,这些模式会根据单个实例的更改清除缓存或会话?如果可能的话,你可以给我一些想法或链接到我看到的步骤。 – user1903724 2015-01-22 08:21:15

+0

你有多台服务器吗?或者你只是在一个盒子里运行一个节点集群? – Yousef 2015-01-24 01:27:47

回答

2

这是会议一个相当标准的做法,当你有负载平衡器后面的多个Web服务器。

如果您在每个Web实例上运行Redis服务器,则需要在负载均衡器上启用粘性会话。这将工作正常,直到你开始自动扩展:一旦你的网络实例之一被从池中删除,任何具有该实例的会话将失去它。

因此,您希望为缓存和/或会话运行共享的redis(或memcached)服务器。通过弹性缓存,您可以选择运行单个节点“集群”,并使用标准连接方式或运行真实集群并使用AWS库连接它。

对于会话,我可能只是使用单个节点,不用担心elasticache客户端。

如果要在部署时清除缓存,则必须具有挂接并编写代码才能执行此操作。或者您可以简单地启动一个新的Elasticache服务器,更新您的配置并销毁旧的。