大家讨论使用以下存储Session方案
发布于 2年前 作者 xiaowu 897 次浏览

首先希望大家不要争议使用什么数据库保存Session更好。假如使用SQLSERVER2008来保存的话如何才能达到最高执行速度。

本人思路如下:首先有人问题困扰本人很久,就是如何使用sqlserver来保存Session,这里感谢本站的youxiachai,通过修改mysql保存session方案,原理很简单就是用户每次链接网站更新用户最近一次访问时间。使用sql语句更新表内容,再定时清理过期的Session。

可惜的SQLSERVER的计划任务没有mysql创建那么方便,又不想去开启SQLSERVER计划任务,于写了一大堆SQL代码。为保证执行速度与逻辑,决定使用存储过程。当访客打开网页时执行这个带参数储过程,更新sessions表。

MSSQL.csql('exec onsession ?,?,?’, [sid,uid,session], function (err) { callback(err); })

执行存储过程onsession,uid就是登录用户的ID,如何用户登录就能够知道用户ID,保存在Session表中,为了方便当跟踪当前在线用户。

目前碰到的问题是当用户首次打开速度有点慢。

提问: 这种方案是可行? 如何测试这种方案的性能?

7 回复

你每次建立一个DB连接,当然慢喽, 还是执行SP, 更慢。。。。。显然用这种关系型数据库保存session太划不来, 要么memory要么用redis之类键值数据库。用Redis的话你都不用定时清理, 设置超时时间TTL就可以了

有没有办法解决这个问题(DB链接)

##解决上面链接问题的话可以用连接池,像你说的那样先不讨论使用哪种数据库来保存session的话,我是这样做的:先把session保存到内存中,然后采用一种机制来把session存储到数据库,我是十分钟去检查一下哪些session在十分钟内没有更新过,没有更新过的就写会数据库,至于这个时间间隔你要自己去把握,甚至你可以采取别的更复杂的机制去写会数据库。

nodejs 配合链接池怎么实践

@xiaowu 你可以去看看这个包

@showen “这个包”指的是?

@xiaowu 不好意思 是这个 generic-pool

回到顶部