使用redis来实现tornado session的分布式存储

前言:

   话说文章转自我的51cto博客里的,xiaorui.cc !

   前两天有人问我tornado到c10,先声明下,我也不知道tornado官方是咋测试的,我自己是没到那种牛逼的抗链接能力,不然咋说,该优化还是优化,EFI要这么较真,可以试着用nginx来处理tornado不太擅长的静态文件及用多app方案来提高负载均衡的能力。


   我人比较的懒,把接口和平台的页面都做成一个py了,用upstream不好做负载,如果你用ip_hash,或者insert cookie的方式,虽然保证了针对后端服务器的命中,但是哥还就不想命中。

   我还就想rr轮训,为啥? 因为页面上大量的耗时间的io和计算请求,这个时候我总是命中调度到一台服务器,那我就会一直的等待,后面还有一堆的任务也都在同步堵塞着。。。太痛快啦,这个时候就需要rr轮训,session如何的一致性,这个时候就需要一个快速的存储来保证session cookie的存储。

   以前更多是用tornado memcached来存储session或者cookie,因为报警平台中已经在用redis、mongodb这些nosql数据库,没必要再配置memcached了。 这次用我钟爱的redis了。


这里导入了相关的类和库,login_required是装饰器,专门来判断用户登录了没有,没有的话把访问扔给login.html页面。



关联的两个类:

处理session的主要文件

这个文章的原文是在 http://blog.xiaorui.cc ,我的文章总是被爬来爬去的。

tornado每个控制器相关的class ~

对于登录注册session:

对于退出登录:

其实就改成None就行了,匹配都在装饰器那边搞好了。

偶了,这就可以了。用之前要配置下相关的组件!
pip install ujson redis
pip install tornado

session.py 代码来自:

git clone https://github.com/zs1621/tornado-redis-session

这老外写的有点简陋,说明几乎没有,还好tornado redis session本身就是不难的东西,看看就能搞定。

单个tornado我现在已经可以顶到1500个长连接不崩溃了,如果加上ngixn做tornado的分发负载,估计连接在6k问题不大。



对Golang感兴趣的朋友可以加群: 278517979 !!!
另外如果大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码, 感谢!
另外再次标注博客原地址  xiaorui.cc

9 Responses

  1. Pegasus 2016年5月3日 / 下午6:07

    用异步的redis库会不会好些

  2. Pegasus 2016年5月3日 / 下午6:04

    这里应该使用异步的redis吗

  3. 半人间1895 2015年5月12日 / 下午3:17

    发现tornado的secure_cookie和flask的session是一个意思。还是tornado这点强点。

  4. fuckoff 2015年4月2日 / 上午10:32

    哪行代码是你写的?

    • 峰云就她了 2015年4月2日 / 下午1:47

      从segmentfault中抓下来,测试跑不通,自己又改得

  5. 鲁金达 2015年2月8日 / 下午6:05

    你好,是不是在Session中少了一个save方法?

    • 峰云就她了 2015年2月9日 / 上午10:22

      哪里? 这篇博客是我以前在51cto写的…. 估计会有些纰漏,我一会测试下

      • 鲁金达 2015年2月9日 / 下午12:27

        不好意思 save方法在的。只是排版乱了。在“处理session的主要文件” 30行的最后面了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">