千家信息网

如何使用MySQL周期任务来定时清理在线用户列表

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下如何使用MySQL周期任务来定时清理在线用户列表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!情景设定客
千家信息网最后更新 2026年11月02日如何使用MySQL周期任务来定时清理在线用户列表

小编给大家分享一下如何使用MySQL周期任务来定时清理在线用户列表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

情景设定

  客户端为android手机,登录后希望保存其在线状态(server端),并且对于每一个在线用户都有一个相应的checksum值,每次执行操作时需要校验该值。为了防止黑客截获checksum值进行二次攻击,因此checksum值在每次登录或间隔一段时间后都会动态改变。因此需要在server端保存用户的在线状态,当用户离线时或超出一定时间没有操作时,删掉在线记录,这样每次新登录时就会产生新的checksum值。

问题

  需要定时清理过期的在线用户,因为有的用户喜欢保存密码而不使用登出功能。

解决方法

  定时清理过期的在线用户,可以想到使用一些周期性的定时任务。定时任务可以设置在操作系统中,也可以设置在web application中,但今天想做的是直接使用MySQL的周期任务。

过程

MySQL中的定时周期任务是Event Scheduler,见网页 http://dev.mysql.com/doc/refman/5.6/en/events.html ,该页面的右侧可以选择你的MySQL的版本,以查看相应的Event Scheduler的手册。我们使用的是MySQL 5.5.

先来看看它的overview:

"Conceptually, this is similar to the idea of the Unix crontab (also known as a "cron job") or the Windows Task Scheduler."

可以看到,它和cron job是类似的,那我们可以预计它应该也是启用一个list,然后往这个list中加入一个个任务,然后mysql会启动一个线程专门维护这个list,并在适当的时间执行该list上符合条件的任务。

大概了解了Event Scheduler的概念后,我们进入下一个步骤Event Scheduler Configuration。

在Event Scheduler Configuration中介绍了Event Scheduler的三种状态ON/OFF/DISABLED,它们分别代表什么含义以及如何切换均参见Event Scheduler Configuration页面。

现在,我们用show processlist命令来查看一下活动中的Event Scheduler有哪些。

执行,输出:

我们现在要启用Event Scheduler,输入命令

或者也可以在server的配置文件((my.cnf, or my.ini on Windows systems)中设置event_scheduler=1,然后重启服务器。

现在我们再来查看Event Scheduler的状态:

输出:

可以看到已经启动了。

为了测试,我们先建立一个onlineUser表,并插入数据

下一步就是设定我们的定时任务:

CREATE EVENT cleanOvertimeOnlineUser ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 minute    DO delete from test.onlineUser where lastVisit < date_sub(now(), interval 24 hour);

执行,输出:

我们等5分钟,查看结果。

可以看到2013-04-14 18:55:05的那条记录已经被删除了。

其他:

Event Scheduler在执行诸如select等会有返回值的语句时,是不会返回内容到console上的,也不会返回到内存中。这样select语句似乎在Event Scheduler中没什么用,其实不是,它可以用来作为insert语句的原料。例如:

delimiter | CREATE EVENT e_daily ON SCHEDULE      EVERY 1 DAY COMMENT 'Saves total number of sessions then clears the table each day' DO BEGIN INSERT INTO site_activity.totals (time, total) SELECT CURRENT_TIMESTAMP, COUNT(*) FROM site_activity.sessions; DELETE FROM site_activity.sessions; END | delimiter ;

用类似这样的语句可以在数据库层自动完成网站一些统计量的更新,而不用写到web application中。也是很方便。

以上是"如何使用MySQL周期任务来定时清理在线用户列表"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

任务 用户 在线 周期 状态 语句 内容 时间 篇文章 登录 输出 命令 数据 页面 适当 操作系统 没什么 不怎么 不用 代表 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技官网 互联网科技卖菜 朗新科技与工业互联网 互联网科技的发展 互联网 的科技创新 天津摩尔互联网科技 互联网金融监管科技 成都仁贤领冠互联网科技有限公司 承德科技产业互联网发展 栖莱科技互联网股份有限公司 恒生互联网科技指数跳水 互联网科技人工智能实验室 互联网企业科技类企业如何做账 云南省自由互联网科技有限公司 互联网科技融合创新 济南小医互联网科技有限公司招聘 上海旺乐尼互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 科技美学互联网 艺术 知域互联网科技有限公司官网 科技企业和互联网企业 广西拼得多互联网科技有限公司 中国最先进互联网科技公司 互联网教育科技公司vipkid 消费医药和互联网科技 健康食品互联网创新科技园项目 互联网保险科技创业 广州互联网高科技取餐柜 容联科技互联网电商 现代科技的标志之一的互联网
0