文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

小编给大家分享一下如何使用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有哪些。

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

执行,输出:

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

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

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

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

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

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

输出:

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

可以看到已经启动了。

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

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

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

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

执行,输出:

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

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

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

可以看到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周期任务来定时清理在线用户列表”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯