首先希望大家不要争议使用什么数据库保存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表中,为了方便当跟踪当前在线用户。
目前碰到的问题是当用户首次打开速度有点慢。
提问: 这种方案是可行? 如何测试这种方案的性能?
你每次建立一个DB连接,当然慢喽, 还是执行SP, 更慢。。。。。显然用这种关系型数据库保存session太划不来, 要么memory要么用redis之类键值数据库。用Redis的话你都不用定时清理, 设置超时时间TTL就可以了
有没有办法解决这个问题(DB链接)
##解决上面链接问题的话可以用连接池,像你说的那样先不讨论使用哪种数据库来保存session的话,我是这样做的:先把session保存到内存中,然后采用一种机制来把session存储到数据库,我是十分钟去检查一下哪些session在十分钟内没有更新过,没有更新过的就写会数据库,至于这个时间间隔你要自己去把握,甚至你可以采取别的更复杂的机制去写会数据库。
nodejs 配合链接池怎么实践
@xiaowu 你可以去看看这个包
@showen “这个包”指的是?
@xiaowu 不好意思 是这个 generic-pool