SessionManager

如何通过 J2Cache 实现分布式 session 存储

痞子三分冷 提交于 2019-12-03 22:33:51
做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在内存中保存 session 数据。这样做会有两个不足: 服务重启后 session 数据丢失 应用做集群部署的时候,不同的节点无法共享 session 数据 我们以使用比例最高的 Tomcat 为例,针对第二个问题 Tomcat 提供了集群 session 复制的解决方案,详情请看 官方文档 。看完文档你会发现 Tomcat 自带的方法配置非常复杂,而且它没有解决第一个问题 —— 服务重启导致 session 数据丢失的问题。 现在还有另外一种方案就是使用 memcached 或者是 redis 来存储 session 数据,于是就有了这么一些开源项目: https://www.oschina.net/p/tomcat-redis-session-manager https://www.oschina.net/p/redis-manager https://www.oschina.net/p/memcached-session-manager 这些开源项目使用和配置都比较简单,而且对应用完全透明,只需要在 server.xml 中配置好 Manager

Shiro整合Redis代码解读

旧街凉风 提交于 2019-11-30 04:28:42
1. shiro默认使用的MemoryConstrainedCacheManager创建MapCache来保存缓存数据。manager和cache对象之间的关系可以参考笔者的另一篇文章,Springboot Redis详解。 2. shiro整合Redis的关键就是重写MemoryConstrainedCacheManager和MapCache。 3. shiro提供了CacheManagerAware来标志使用Cache的地方,有Realm、SecurityManager、SessionManager和SessionDao。前三个能理解,第四个还要再进一步学习。 3.shiro的SessionDAO 来源: https://my.oschina.net/u/3651261/blog/3108766

PHP中使用Redis接管文件存储Session详解

故事扮演 提交于 2019-11-28 13:15:24
前言 php默认使用文件存储session,如果并发量大,效率会非常低。而redis对高并发的支持非常好,可以利用redis替换文件来存储session。 最近就遇到了这个问题,之前找了网上的一套直播系统给客户用,刚开始是没问题的,在后面人数上来之后网站开始变得卡顿,卡的一批。之后查看php慢日志发现session_start()的身影,好吧,原来是万恶的文件存储session,跟我之前进的坑一模一样……之前做的教务查询系统直接用的session没有用cookie,结果在高并发的情况下php原地爆炸。 [0x00007fff67ee6740] session_start() [0x00007fff67ee7b70] +++ dump failed 解决方案 将session全面更换为cookie 使用mysql或redis接管session 坑中坑 因为这套直播系统一没有用框架,二没有设计规范,各种session操作散落在不同的文件里,用第一个解决方案完全属于费力不讨好。再者直播系统的聊天互动等功能已经涉及大量的mysql操作,再用mysql接管session变相的增加了数据库的压力,最终确定了使用redis接管session。 具体实现 php有内置的操作session的save_handler,使用session_set_save_handler