• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 4年前 (2022-01-09) 12次浏览 已收录 0个评论

前言: 话说文章转自我的51cto博客里的,xiaorui.cc ! 前两天有人问我tornado到c10,先声明下,我也不知道tornado官方是咋测试的,我自己是没到那种牛逼的抗链接能力,不然咋说,该优化还是优化,EFI要这么较真,可以试着用nginx来处理tornado不太擅长的静

前言:

话说文章转自我的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页面。


插入一个广告,最近文章总是被爬虫爬走,这边标记下原文的地址 blog.xiaorui.cc 。 说来也郁闷,我本人也是负责业务爬虫业务的,而且爬虫采用的一些技术也相当的强悍,但是没招呀 。 对方有时候还伪装 spider 。你咋办,你不认真分析,有可能封杀了真正的spider bot 。


#xiaorui.ccfrom base import BaseHandlerfrom tornado.web import HTTPErrordef login_required(f):    def _wrapper(self,*args, **kwargs):        print self.get_current_user()        logged = self.get_current_user()        if logged == None:            self.write('no login')            self.finish()        else:            ret = f(self,*args, **kwargs)    return _wrapperclass Application(tornado.web.Application):    def __init__(self):        settings = dict(            cookie_secret = "e446976943b4e8442f099fed1f3fea28462d5832f483a0ed9a3d5d3859f==78d",   <i>本文来源gaodai$ma#com搞$$代**码)网@</i>         session_secret = "3cdcb1f00803b6e78ab50b466a40b9977db396840c28307f428b25e2277f1bcc",            session_timeout = 60,            store_options = {            'redis_host': 'localhost',                'redis_port': 6379,                'redis_pass': '',        },        )        handlers = [            (r"/", MainHandler),            (r"", MainHandler),            (r"/login", LoginHandler)        ]        tornado.web.Application.__init__(self, handlers, **settings)        self.session_manager = session.SessionManager(settings["session_secret"], settings["store_options"], settings["session_timeout"])

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:使用redis来实现tornado session的分布式存储
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址