Easyswoole 框架session在高并发/频繁请求下数据丢失问题记录

1、在EasySwooleEvent.php 文件中初始化session(如下图)

图1中的1处每此请求都会读取session文本生成缓存(具体方式见框架"./vendor/easyswoole/session/src/Session.php")

注:会先判断session缓存在不在,session缓存不在时读取文本生成缓存

图1中的2处是保存session数据到文本并清除生成的缓存

图1

2、造成数据丢失原因主要是图1中的2处

具体保存方法如图2中的3处,具体见图3使用file_put_contents方法,并且图2中的4处会删除内存中的缓存,导致每次请求都会读取session,保存session到文本中的流程,在高并发请求的情况下就会造成读取session文件是为空的情况。

3、解决方法

注释图2中的4处,那么不清除内存后,有效避免频繁读取session文本,那么问题来了,session缓存岂不是总会在缓存中了,会导致缓存越来越大

解决方法如下:

利用gc方法,在清理过期session文本时一起清理session缓存,具体如下图

相关推荐
wuminyu34 分钟前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
怕浪猫1 小时前
FDE 如何正确解决现场项目工程性的问题
前端·后端·ai编程
GreenTea2 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
考虑考虑2 小时前
Java实现hmacsha256加密算法
java·后端·java ee
captain3762 小时前
▲网络原理(2)-TCP
java·服务器·网络·tcp/ip·java-ee
MetaLite2 小时前
SpringBoot接口分层规范-外网网关内部服务与参数边界
java·数据库·spring boot
Co_Hui2 小时前
Java 线程状态
java
凤山老林3 小时前
聊聊企业级 API 安全:Spring Boot 落地 OAuth 2.1、mTLS 与接口签名防篡改
spring boot·后端·安全·oauth
土司大王3 小时前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode
土司大王3 小时前
LeetCode hot100——34.在排序数组中查找元素的第一个和最后一个位置:Java 二分模板、边界分析
java·算法·leetcode