什么是单宿主Node.js生产应用程序的良好会话存储?

我使用Node的Express w / Connect中间件。 Connect的内存会话存储不适合生产:

06000

对于较大的部署,mongo或redis是有意义的。

但是什么是单一主机应用程序在生产中的一个很好的解决方案?

解决方法

花了一天来看这个。这里是我发现的选项。请求/秒通过ab -n 100000 -c 1 http://127.0.0.1:9778/在我的本地机器上执行。

>无会话 – 快(438 req /秒)
> cookieSession:不需要外部服务,速度影响小(311 req / sec) – 速度最快,会话将随cookie过期(由maxAge自定义)
> connect-redis:需要redis服务器,大速度影响(4 req / sec with redis2go和redisgreen) – 比mongo更快,会话将被删除一段时间(由ttl定制)
> connect-mongo – 需要mongodb服务器,大速度影响(2 req / sec与mongohq) – 慢于redis,需要手动clear_interval设置为清理会话

这里是我用于cookieSession的coffeescript:

server.use express.cookieSession({
    secret: appConfig.site.salt
    cookie: maxAge: 1000*60*60
})

这里是我用于redis的coffeescript:

RedisSessionStore ?= require('connect-redis')(express)
redisSessionStore ?= new RedisSessionStore(
    host: appConfig.databaseRedis.host
    port: appConfig.databaseRedis.port
    db: appConfig.databaseRedis.username
    pass: appConfig.databaseRedis.password
    no_ready_check: true
    ttl: 60*60  # hour
)
server.use express.session({
    secret: appConfig.site.salt
    cookie: maxAge: 1000*60*60
    store: redisSessionStore
})

这里是我的mouo coffeescript:

server.use express.session({
    secret: appConfig.site.salt
    cookie:
        maxAge: 100*60*60
    store: new MongoSessionStore({
        db: appConfig.database.name
        host: appConfig.database.host
        port: appConfig.database.port
        username: appConfig.database.username
        password: appConfig.database.password
        auto_reconnect: appConfig.database.serverOptions.auto_reconnect
        clear_interval: 60*60  # hour
    })
})

现在当然,远程redis和mongo数据库将慢于他们的本地等同。我只是不能得到当地的等效工作,特别是考虑到安装和维护时间,远远超过我愿意投资,而不是托管的远程替代品,我觉得是真的为其他人,因此为什么这些托管远程数据库服务存在的第一位!

对于本地数据库benhmarks,请参阅@Mustafa’s answer

很高兴有人来edit this answer将他们的本地数据库基准添加到组合中。

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...