Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session

        import tornado.ioloop
import tornado.web
from myhash import ring create_session_id = 'sasd' # 随机生成的 session 函数 class SessionGen(object):
container = {} def __init__(self,handler):
self.handler = handler
random_str = self.handler.get_cookie('session_id')
if not random_str:
random_str = create_session_id # 生成session随机字符串
else:
if random_str not in self.container: # 伪造的session随机字符串
random_str = create_session_id
self.container[random_str]={} # session 字典
self.random_str = random_str
self.handler.set_cookie('session_id',random_str,max_age=10) def __setitem__(self, key, value):
# 基于redis 分布式 设置 session
# import redis
# result = ring.get_node('ascf') # 获取分布式 分配的 ip端口 ;split
# conn = redis.Redis(host='ip',port=232)
# conn.hset('ascf',key,value) self.container[self.random_str][key] = value def __getitem__(self, item):
# 基于redis 分布式 获取 session
# import redis
# result = ring.get_node('ascf') # 获取分布式 分配的 ip端口 ;split
# conn = redis.Redis(host='ip',port=port)
# return conn.hget('ascf',item)
return self.container[self.random_str].get(item) def __delitem__(self, key):
if self.container[self.random_str].get(key):
del self.container[self.random_str][key]
# 基于redis 分布式 删除 session
# import redis
# ip,port = ring.get_node('ascf').split(':') # 获取分布式 分配的 ip端口 ;split
# conn = redis.Redis(host='ip',port=232)
# conn.hdel('ascf',key) class LoginHandler(tornado.web.RequestHandler): def initialize(self):
self.session = SessionGen(self) def get(self):
self.render('login.html',msg='') # 渲染template def post(self):
username = self.get_argument('username')
pwd = self.get_argument('pwd')
if username == 'root' and pwd == '123':
self.set_cookie('user',username)
self.session['user'] = username
self.redirect('/index')
return self.render('login.html',**{'msg':'用户密码有误'}) class IndexHandler(tornado.web.RequestHandler): def initialize(self):
self.session = SessionGen(self) def get(self):
if self.session['user']:
self.write('ojbk') settings = {
'template_path':'templates',
'static_path':'static',
'static_url_prefix':'/static/', # 静态文件 url
# 'xsrf_cookies':True, # csrf } # 配置模板文件路径 application = tornado.web.Application([
(r"/login",LoginHandler),
(r"/index",IndexHandler), ],**settings # 配置文件
) if __name__ == '__main__':
# 创建socket对象
application.listen(8000)
# conn,add = socket.accept()
tornado.ioloop.IOLoop.instance().start()

Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架的更多相关文章

  1. 从零到一手写基于Redis的分布式锁框架

    1.分布式锁缘由 学习编程初期,我们做的诸如教务系统.成绩管理系统大多是单机架构,单机架构在处理并发的问题上一般是依赖于JDK内置的并发编程类库,如synchronize关键字.Lock类等.随着业务 ...

  2. 基于redis实现分布式Session

    学习到好的知识还是需要记录下来的. 开发环境 asp.net mvc4,iis.asp.net 自带的session机制存在诸多不好的地方.先只要列出几点. asp.net mvc 默认的sessio ...

  3. 基于ZooKeeper的分布式Session实现(转)

    1.   认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...

  4. 基于ZooKeeper的分布式Session实现

    1.   认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...

  5. Java Web学习总结(20)——基于ZooKeeper的分布式session实现

    1.   认识ZooKeeper ZooKeeper-- "动物园管理员".动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始 ...

  6. 基于redis的处理session的方法

    一个基于redis的处理session的方法,如下. <?php class Session_custom { private $redis; // redis实例 private $prefi ...

  7. 基于Redis缓存的Session共享(附源码)

    基于Redis缓存的Session共享(附源码) 在上一篇文章中我们研究了Redis的安装及一些基本的缓存操作,今天我们就利用Redis缓存实现一个Session共享,基于.NET平台的Seesion ...

  8. 基于Dubbo的分布式事务框架(LCN)

    原文地址:http://原文地址:https://github.com/1991wangliang/transaction 基于Dubbo的分布式事务框架(LCN) 该框架依赖Redis/dubbo/ ...

  9. Spring+Shiro搭建基于Redis的分布式权限系统(有实例)

    摘要: 简单介绍使用Spring+Shiro搭建基于Redis的分布式权限系统. 这篇主要介绍Shiro如何与redis结合搭建分布式权限系统,至于如何使用和配置Shiro就不多说了.完整实例下载地址 ...

随机推荐

  1. tomcat和apache的区别

    1. Apache是web服务器,Tomcat是应用(java)服务器(也可作web服务器),它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的we ...

  2. spring项目gitignore

    target/ ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans ### Intel ...

  3. TCP协议三次握手过程分析(改)

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  4. CSS控制滚动条的样式

    到今天(2018年10月25日)为止, 这还是chrome上的一个实验性特性: ::-webkit-scrollbar{width:4px;height:4px;} ::-webkit-scrollb ...

  5. Swift学习笔记 - URL编码encode与解码decode

    使用swift有一段时间了,api的变换造成了很多困扰,下面是关于url编码和解码问题的解决方案 在Swift中URL编码 在Swift中URL编码用到的是String的方法 func addingP ...

  6. CentOS 6.2配置本地yum源

    转载自http://www.cnblogs.com/centoser/articles/2411694.html#undefined 一.挂载本地光盘到系统:把Cent6.2安装光盘放入光驱,在终端命 ...

  7. tomcat监控,自动重启shell脚本

    tomcat监控,自动重启shell脚本如下,取名 monitor_tomcat.sh: #!/bin/sh # func:自动监控tomcat脚本并且执行重启操作 # 获取tomcat进程ID(其中 ...

  8. 【bzoj1369】[Baltic2003]Gem(树形dp+结论)

    题目传送门:bzoj1369 这题其实有个结论:节点数为n的树,对其染色使相邻节点颜色不同,且总颜色权值最小,所需的颜色数量是$ O(\log n) $的. 所以我们就可以愉快的dp了:$ f[i][ ...

  9. 爬虫框架Scrapy之CrawlSpiders

    CrawlSpiders 通过下面的命令可以快速创建 CrawlSpider模板 的代码: scrapy genspider -t crawl tencent tencent.com 上一个案例中,我 ...

  10. Android studio 2.3安装遇到的问题

    我的安装系统环境:windows 10+jdk1.8.0_111 . 1.在安装Android studio 2.3之前,请安装最新的java jdk.Android studio的安装包里是不包含j ...