django的session是存在数据库的session表里,这样会不会对数据库压力过大
对于一般中小型应用而言,Session入库是能满足项目需要的,一旦应用访问量上升,那频繁读写数据库中的Session也容易给系统带来瓶颈。
Session不是最优方案
传统的Session是存储在应用服务器中的,一般是以文件形式存储在服务器硬盘中,这会导致过多Session带来的磁盘I/O压力,另一方面也不利于集群>摆设/span>。在这种背景下,有人就提出将Session存入数据库来解决上述问题,事实上的确也解决了问题,但另一个问题也随之而来,那就是:一旦网站并发过大,也很容易导致数据库瓶颈,>究竟span style="font-weight: bold;">数据库查询也存在耗时的。
建议将Session存入Redis
在实际生产环境中,我们基本上都是基于Redis来实现Session会话保持,这样做的好处有:
易于分布式/集群>摆设/span>时实现Session互通;
Redis读写性能极高,Session频繁读写也不会带来性能压力;
利用Redis Key的过期功能可轻松控制Session的>逾期/span>;
可以将每个用户的session id记录下来,这样就可以查到某个注册用户所有session id, 轻松实现踢出登陆功能。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!
你预计的访问量是多大?脱离这个就开始谈压力,就是耍流氓。
添加一个内存数据库保存session,可以加快速度,但服务器宕机session就没了。
也可以自己写个中间件处理,Django的文档里写有怎么写中间件,学习编程文档都不会看的话,那我真没辙。
做数据库的ha也是可以的。
使用memcached来保存session 这种方式跟数据库类似,不过因为是内存存取的,性能自然要比数据库好多了。但存入memcached中的数据都需要序列化,效率较低; memcached服务器一死,所有session全丢。
也可以terracotta来保存session 跟memcached类似,但是数据不需要序列化,并且是Find-Grained Changes,性能更好。配置对原来的应用完全透明,原有程序几乎不用做任何修改。而且terracotta本身支持HA