基于redis实现分布式Session
- asp.net mvc 默认的session模式mode为InProc。很多向我这样的菜鸟是没有意识去修改它的。这模式下的话是session的保存的东西是存储在服务器内存的。而服务器的资源是有限的,当用户访问量大的时候,对服务器的内存压力会比极大,很可能会导致内存溢出。
- Session 支持其它模式。mode="SQLServer",mode="StateServer".这两种模式下,会比默认的方式减低了服务压力,但在每次请求时,不管你用不用session,都会为你准备好,这其实是很浪费时间的。
- 如果你没有关闭session,SessionStateModule就一直在工作,会对每个请求执行一系列的调用,浪费资源。
- 当iis或服务器重启,session会丢失。为防止内存溢出,服务器会长时间把没有活跃的session从内存删除。这在用户体验的角度来说,是非常不好的。而且session产出之后,需要服务器一直来维护(比如过期,从内存中删掉),这也是需要消耗服务器资源的。本身windows服务器的成本就不低了。这么耗着,是挺浪费的。
- 不能保证过期时间。session默认设置过期时间为20分钟。但我在实际的应用中经常会出现不到20分钟就不能使用的状况。session里面存的容量太大导致的。
- 不能跨服务器访问。session是存在服务器内存的。不能为其他服务器所访问。对部署分布式系统是非常不利的。
- 操作非常的方便,容易上手。跟它同类型的有memcached。但服务器断电后数据并不会丢失,这是redis好的一个点。
- 其次,redis支持分布式拓展,且方便。关于两者比较,这里不做细说。
- userid需要进行可逆加密。原因:虽说userid被选择来暴露的,但还是得保护一下咯。为什么是可逆加密呢。这个数据是需要使用的,当然是需要可逆的。我在哪里使用到呢。这个userid与redis的key有相关。
- 既然说不需要使用内置session了。那就关闭它。要不然就这样让它在那里耗着服务器资源是太好了。怎么关闭呢。全局关闭session的方法:在web.config的<system.web></system.web>中加入 <sessionState mode="Off"></sessionState>。这就成功关闭咯。哈哈哈。。。
- 准备好RedisHelper。这主要是对redis相关操作的封装。还是很容易理解和包装的。要注意程序池的分配。
- 在用户登录的时候,把加密后的userid写入cookie.设置有效期为7天。
- 写入cookie后,把用户数据写入redis。redis的可以值为“u”+userid,value为user实体。同时也要设置key-value的有效期为7天。这就完成了基本的存储。
- 用户拥有cookie之后,每次访问,用户都会把cookie发送到服务器。这个时候需要对cookie进行实时刷新有效期。这里该怎么做是最好的呢。还要想。特性吧。为什么要这步呢?用户cookie的有效期是7天,但是用户在7天内登录的话,是要刷新cookie的有效期的喔。
- 实时刷新redis中"u"+userid键值对的有效期。在刷新cookie时,随后就去刷新redis吧。
- 判断cookie是否过期或有效。先判断cookie的有效期,其次获取redis对应的键值对。如果redis中查找不到对应的键值对,也就是过期的节奏了。
基于redis实现分布式Session的更多相关文章
- Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架
Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...
- 基于Redis的分布式锁真的安全吗?
说明: 我前段时间写了一篇用consul实现分布式锁,感觉理解的也不是很好,直到我看到了这2篇写分布式锁的讨论,真的是很佩服作者严谨的态度, 把这种分布式锁研究的这么透彻,作者这种技术态度真的值得我好 ...
- Spring+Shiro搭建基于Redis的分布式权限系统(有实例)
摘要: 简单介绍使用Spring+Shiro搭建基于Redis的分布式权限系统. 这篇主要介绍Shiro如何与redis结合搭建分布式权限系统,至于如何使用和配置Shiro就不多说了.完整实例下载地址 ...
- 170222、使用Spring Session和Redis解决分布式Session跨域共享问题
使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...
- 基于Redis的分布式锁到底安全吗(下)?
2017-02-24 自从我写完这个话题的上半部分之后,就感觉头脑中出现了许多细小的声音,久久挥之不去.它们就像是在为了一些鸡毛蒜皮的小事而相互争吵个不停.的确,有关分布式的话题就是这样,琐碎异常,而 ...
- 基于redis的处理session的方法
一个基于redis的处理session的方法,如下. <?php class Session_custom { private $redis; // redis实例 private $prefi ...
- 基于redis 实现分布式锁的方案
在电商项目中,经常有秒杀这样的活动促销,在并发访问下,很容易出现上述问题.如果在库存操作上,加锁就可以避免库存卖超的问题.分布式锁使分布式系统之间同步访问共享资源的一种方式 基于redis实现分布式锁 ...
- 基于redis的分布式锁
<?php /** * 基于redis的分布式锁 * * 参考开源代码: * http://nleach.com/post/31299575840/redis-mutex-in-php * * ...
- 基于ZooKeeper的分布式Session实现(转)
1. 认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...
随机推荐
- [欢乐赛]班服 状压DP
班服 (shirt.pas/.c/.cpp) 时间限制:1s:内存限制 128MB 题目描述: 要开运动会了,神犇学校的n个班级要选班服,班服共有100种样式,编号1~100.现在每个班都挑出了一些样 ...
- eclipse Mars(4.5.2)安装pydev后不出现
一.环境 windows 7 64bit eclipse 4.5.2 pydev jdk7u55 二.安装步骤 1. 安装JDK eclipse依赖于java环境,所以需要安装java运行环境JRE. ...
- 二、Spark在Windows下的环境搭建
由于Spark是用Scala来写的,所以Spark对Scala肯定是原生态支持的,因此这里以Scala为主来介绍Spark环境的搭建,主要包括四个步骤,分别是:JDK的安装,Scala的安装,Spar ...
- log4j示例-Daily方式(log4j.properties)
log_home=./log log4j.rootLogger=info log4j.category.com.ai.toptea.collection=Console,DailyFile,Daily ...
- 1123 Is It a Complete AVL Tree
1123 Is It a Complete AVL Tree(30 分) An AVL tree is a self-balancing binary search tree. In an AVL t ...
- Linux命令-chmod、chown和chgrp
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁 ...
- 【Oracle】Oracle改变日志归档模式
一.确认工作模式: 1.查询V$DATABASE SQL>select log_mode from v$database; 归档日志:ARCHIVELOG 2.执 ...
- 批处理运行Python脚本
创建 在某个目录下创建script.bat文件 比如在D:\Code\VimCode\Python_auto\Script中 编辑script.bat文件 写入 @python.exe D:\Code ...
- delphi 浮点 精度
double 没有问题, Single有问题 '0.7' 0.69999999999999996 Single; // 4 byte real Double; // 8 byte real
- e s6 知识点
http://es6.ruanyifeng.com/#docs/reflect 1.资料对es6箭头函数中的this总结:箭头函数中的this指向的是 定义时的this,而不是 执行时的this.