使用Redis共享用户登录成功的信息
一、问题
比如CSDN,开源中国等等网站,用户登录后不一定什么时候就会把你T了,意思就是不一定哪天在打开网站的时候就让你重新登录。这是怎么回事呢?
再比如:如果存到将用户信息存到Redis了,不清除的话,会一直堆积到Redis,像BATJ等大公司,那种亿万用户的产品,该怎么办呢?肯定要清除,什么时候清除呢?
二、解决思路
1、登录成功后放到Redis,用Redis的String类型,key是token,value是用户信息的JSON串。在设置个过期时间,然后用户每次请求一次就更新过期时间。貌似很完美。问题是:如果真的亿级用户了,那么都将在redis里存储,尚未过期,这样redis承受的住吗?性能会严重下降,而且redis可能也会导致崩溃等奇怪现象。
2、登录成功后放到Redis,用Redis的Hash类型和ZSET类型混合使用。Hash类型存储用户信息:login:token:entity;ZSET存储token和以时间作为分数:recent:token:timestamp;这时候也可以增加用户最近浏览的商品,List存储:view+token:商品entity(作为大数据分析用)。每次用户活跃都刷新ZSET的分数。在单独起一个线程一直轮训ZSET的个数,若大于我们心中的个数(比如10万),则进行删除不活跃的用户,删除哪些呢?删除ZSET里的【0,min(个数-10万,100)】,因为ZSET是按照分数升序排序的,所以从0-N去删除(删除ZSET和Hash),貌似复杂了,但是能很好的解决问题。但是存在另一个新的问题?就是你线程在进行清除工作的同时,用户操作了,这时候岂不是需要让他重新登录一次?这个问题后面在解决。
作者:编程界的小学生
链接:https://www.jianshu.com/p/168b94cf353b
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
使用Redis共享用户登录成功的信息的更多相关文章
- spring security实现记录用户登录时间等信息
目录 spring security实现记录用户登录时间等信息 一.原理分析 二.实现方式 2.1 自定义AuthenticationSuccessHandler实现类 2.2 在spring-sec ...
- 设置Cookie,登录记住用户登录信息,获取用户登录过得信息
function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Da ...
- MVC中实现只有当用户登录成功的时候才等浏览内容,否则跳转到登录页面
第一步,在登录的时候记录Session //提供Session接口方便后面判断用户登录 Session["UserInfo"] = uinfo; //uInfo是用户登录Mode ...
- SpringBoot整合redis把用户登录信息存入redis
首先引入redis的jai包 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- SpringBoot使用Redis共享用户session信息
SpringBoot引入Redis依赖: <dependency> <groupId>org.springframework.boot</groupId> < ...
- 使用 redis “捕捉” “用户登录过期” 事件
实现原理及步骤: 1)登录时,计算登录过期时间,以分钟为单位作key(例如:sign_timeout_201705212233),value方面自己发挥,需要什么数据就拼什么数据进去,只是要注意,一定 ...
- pptpvpn记录用户登录和流量信息
这个问题困扰了我很久,终于在pppd的man文档里,发现了踪迹.在man中的SCRIPTS下有一系列的参数,其中PEERNAME就是登陆的用户名,并且在/etc/ppp/ip-up和/etc/ppp/ ...
- 用户登录成功后重新获取新的Session
HttpSession session = request.getSession(); // 用来存储原sessionde的值 ConcurrentHash ...
- Android 用户登录
1:服务端代码如下 <?php /** *登录成功就返回 1,否则返回 0 */ $REQUEST_METHOD=$_SERVER['REQUEST_METHOD']; if($REQUEST_ ...
随机推荐
- 如何删除Github上的仓库
1.首先,进入自己的github账户页面,点击头像选择下面的Your repositorys,点击进入 2.进入以后选中自己要删除的仓库,点击进去该仓库界面 3.找到Settings按钮,点击进入 4 ...
- Django【第5篇】:Django之ORM数据库操作
django之ORM数据库操作 一.ORM介绍 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录-------- ...
- 计算两个GPS坐标的距离
场景:已知两个GPS点的经纬度坐标信息.计算两点的距离. 1. 距离/纬度关系 GPS: 22.514519,113.380301 GPS: 22.511962,113.380301 距离: 284. ...
- layui数据表格分页加载动画,自己定义加载动画,"加载中..."
记录思路,仅供参考 在表格渲染完成后,在done回调函数中给分页动态加点击事件, 关闭"加载中..."动画也是在 done回调函数中关闭 这是我实现的思路,记录给大家参考. , d ...
- JavaScript正则表达式简介(一)
一.正则表达式 正则表达式Regular Expression,可以简写为regexp.regex或是RE. 正则表达式使用单个字符串来描述或是匹配一系列符合某个句法规则的字符串模型. 按照某种规则去 ...
- JSP上传一个文件夹
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...
- 小程序中css3实现优惠券
效果如下: css3实现优惠券 知识储备 颜色渐变 linear-gradient() css伪类 :before :after index.wxss .app { /* padding: 20rpx ...
- [CSP-S模拟测试]:matrix(DP)
题目描述 求出满足以下条件的$n\times m$的$01$矩阵个数:(1)第$i$行第$1~l_i$列恰好有$1$个$1$.(2)第$i$行第$r_i~m$列恰好有$1$个$1$.(3)每列至多有$ ...
- 用shell和python实现数组的一个例子
目标是把字符串中的值等分为几段,取每段固定位置的值 shell脚本 #!/bin/bash ele="1 2 3 4 5 6" n= array1=() for x in $ele ...
- mui初级入门教程(四)— 再谈webview,从小白变“大神”!
文章来源:小青年原创发布时间:2016-06-05关键词:mui,html5+,webview转载需标注本文原始地址: http://zhaomenghuan.github.io/#!/blog/20 ...