Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架
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框架的更多相关文章
- 从零到一手写基于Redis的分布式锁框架
1.分布式锁缘由 学习编程初期,我们做的诸如教务系统.成绩管理系统大多是单机架构,单机架构在处理并发的问题上一般是依赖于JDK内置的并发编程类库,如synchronize关键字.Lock类等.随着业务 ...
- 基于redis实现分布式Session
学习到好的知识还是需要记录下来的. 开发环境 asp.net mvc4,iis.asp.net 自带的session机制存在诸多不好的地方.先只要列出几点. asp.net mvc 默认的sessio ...
- 基于ZooKeeper的分布式Session实现(转)
1. 认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...
- 基于ZooKeeper的分布式Session实现
1. 认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...
- Java Web学习总结(20)——基于ZooKeeper的分布式session实现
1. 认识ZooKeeper ZooKeeper-- "动物园管理员".动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始 ...
- 基于redis的处理session的方法
一个基于redis的处理session的方法,如下. <?php class Session_custom { private $redis; // redis实例 private $prefi ...
- 基于Redis缓存的Session共享(附源码)
基于Redis缓存的Session共享(附源码) 在上一篇文章中我们研究了Redis的安装及一些基本的缓存操作,今天我们就利用Redis缓存实现一个Session共享,基于.NET平台的Seesion ...
- 基于Dubbo的分布式事务框架(LCN)
原文地址:http://原文地址:https://github.com/1991wangliang/transaction 基于Dubbo的分布式事务框架(LCN) 该框架依赖Redis/dubbo/ ...
- Spring+Shiro搭建基于Redis的分布式权限系统(有实例)
摘要: 简单介绍使用Spring+Shiro搭建基于Redis的分布式权限系统. 这篇主要介绍Shiro如何与redis结合搭建分布式权限系统,至于如何使用和配置Shiro就不多说了.完整实例下载地址 ...
随机推荐
- 巨坑:jqgrid竟然取不到编辑模式下input的值
今天遇到最奇葩的问题,竟然取不到input的值,感觉世界观都颠覆了.后来一搜资料,又是jqgrid框架搞的鬼,真搞不明白,开发框架就好好开发框架,留这么多坑有意思吗? jqgrid编辑模式下不要调用g ...
- Python3.x:pytesseract识别率提高(样本训练)
Python3.x:pytesseract识别率提高(样本训练) 1,下载并安装3.05版本的tesseract 地址:https://sourceforge.net/projects/tessera ...
- Docker 的一些使用心得
Docker 的使用心得 预备知识·必备· bash(bsd) Net ,ip know hot to search in Google and Baidu 安装 一般找一个不错的网络环境...不然玩 ...
- [CF960F]Pathwalks
题目大意:给你一张$n$个点$m$条边的带权有向图,可能有重边和自环.边会按照顺序给出.让你求出一条最长的路径,使得路径上的边满足边权和出现的时间严格递增.路径可以重复经过同一个点. 想办法把它转化成 ...
- Mysql binlog设置
一:Binlog文件信息 1. binlog基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中: 2. 作用:MySQL的作用类似于Ora ...
- 爬虫之xpath
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- webservice用cxf发布SOAP
cxf的安装,就是把文件解压,然后配置环境变量 http://cxf.apache.org/download.html这是官网下载 解压到这里 环境变量 wsdl2java命令测试 1.新建java项 ...
- 素数分布 - nefu 117
素数个数的位数 - nefu 117 普及一个公式: 位数公式:要求一个数x的位数,用公式:lg(x)+1 素数分布:n/ln(n) 所以直接求解n/ln(n)的位数就可以了 代码如下: #inclu ...
- C#代码实现 Excel表格与Object互相转换,Excel表格导入数据库(.NET2.0 .NET4.0)
前些天在工作上遇到这个需求,在GitHub找到一个开源代码可以用,Fork了一个版本,整理一下发出来. ①.Net项目中使用Nuget安装一个 NPOI 包 https://github.com ...
- Win10配Theano环境和Keras框架
网络上有各种各样的win7 64bit安装theano的方法,我也试过好多,各种各样的问题.因为之前没了解过MinGw等东西,所以安装起来比较费劲,经过不断的尝试,最终我按照以下过程安装成功. 其实过 ...