You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在应用暂停15分钟后释放MySQL Loaded表中用户关联信息?

实现用户退出应用后15分钟清空Loaded表数据的方案

1. 调整Loaded表结构,增加过期时间字段

给原有的Loaded表添加一个expire_at字段,类型为DATETIME,用来标记记录的过期时间:

ALTER TABLE Loaded ADD COLUMN expire_at DATETIME NOT NULL;

当用户加载聊天主页面、插入/更新Who_requested-Who_loaded记录时,将expire_at设为当前时间加15分钟:

-- 插入新记录
INSERT INTO Loaded (Who_requested, Who_loaded, expire_at)
VALUES ('userA', 'userB', DATE_ADD(NOW(), INTERVAL 15 MINUTE));

-- 更新已有记录(用户活跃时刷新过期时间)
UPDATE Loaded SET expire_at = DATE_ADD(NOW(), INTERVAL 15 MINUTE)
WHERE Who_requested = 'userA';

2. 客户端配合维护过期时间

  • 用户打开应用、切换至前台时,调用后端接口刷新自己所有Loaded记录的expire_at,确保活跃期间记录不会过期。
  • 用户退出应用(包括正常退出或切换到后台)时,无需立即删除记录,依赖之前设置的15分钟过期时间自动生效;如果是进程被强制杀死,客户端无法主动上报,后续靠服务器定时清理兜底。

3. 服务器定时清理过期数据

可以通过两种方式实现定时清理:

方式一:MySQL内置事件调度器

先开启事件调度器:

SET GLOBAL event_scheduler = ON;

创建定时清理事件,比如每5分钟执行一次删除操作:

CREATE EVENT clear_expired_loaded_records
ON SCHEDULE EVERY 5 MINUTE
DO
  DELETE FROM Loaded WHERE expire_at < NOW();

方式二:后端服务定时任务

用后端框架自带的定时任务组件(如Java Quartz、Python APScheduler、Node.js node-schedule),每隔5分钟执行一次删除SQL,逻辑和上面一致。这种方式更灵活,便于结合业务日志或其他扩展逻辑。

4. 查询时过滤过期记录

用户重新打开应用加载聊天列表时,查询Loaded表只保留未过期的记录,避免拿到待清理的无效数据:

SELECT Who_loaded FROM Loaded
WHERE Who_requested = 'userA' AND expire_at > NOW();

内容的提问来源于stack exchange,提问作者MathematicsBeginner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:48:25