基于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—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...
随机推荐
- 算法题:求一个序列S中所有包含T的子序列(distinct sub sequence)
题: 给定一个序列S以及它的一个子序列T,求S的所有包含T的子序列.例: S = [1, 2, 3, 2, 4] T = [1, 2, 4] 则S的所有包含T的子序列为: [1, 2, 3, 2, 4 ...
- Oracle事务的ACID特性
Oracle事务的ACID特性 1.原子性(Atomicity) 事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的. 例如:A帐户向B帐户划账1000,则先将A减少1000 ...
- Java里的常用运算符及其优先级顺序
知道了八种基本数据类型后,在使用中弄清运算符的优先级是很有必要的.具体如下图: 这里需要注意的是,强制类型转换的优先级是位于乘除前面而处于单目运算符后面的,这是比较容易出错的地方.比如用Math.R ...
- Thread.setDaemon详解
Thread.setDaemon详解 线程分为两种类型:用户线程和守护线程.通过Thread.setDaemon(false)设置为用户线程:通过Thread.setDaemon(true)设置为守护 ...
- 【BZOJ】1218: [HNOI2003]激光炸弹(前缀和)
题目 题目描述 输入输出格式 输入格式: 输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi . 输出格式: 输出文件名为 ...
- Entity Framework API介绍 -- DbSet<>().Find()
过去我们常常使用Where或First(FirstOrDefault)方法来查找对应的实体,比如: var query = context.CertInfoMakeDetails.ToList().W ...
- 07_java之练习题
01奇数求和练习 * A: 奇数求和练习 * a: 题目分析 * 为了记录累加和的值,我们需要定义一个存储累加和的变量 * 我们要获取到1-100范围内的数 * 判断当前数是否为奇数,是奇数,完成累加 ...
- Spring实战之通过XML装配bean
尽管Spring长期以来确实与XML有着关联,但现在需要明确的是,XML不再是配置Spring的唯一可选方案.Spring现在有了强大的自动化配置和基于Java的配置,XML不应该再是你的第一选择了. ...
- vue-cli 自定义过滤器的使用
vue-cli 自定义过滤器的使用 vue2.0将内置过滤器去除,所以过滤器需要自己编写. Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化.过滤器可以用在两个地方:mustache 插 ...
- CSS——操作css文件
//动态 css文件内容. 修改鼠标经过时行.单元格的背景颜色 function header_rowOrcell_over(divGrid) { var gridopts = divGrid.dat ...