中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用MySQL周期任務來定時清理在線用戶列表

發布時間:2021-11-06 10:13:50 來源:億速云 閱讀:353 作者:小新 欄目: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有哪些。

如何使用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周期任務來定時清理在線用戶列表”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安平县| 淳化县| 安远县| 彰化县| 珲春市| 来安县| 瑞安市| 收藏| 盐亭县| 赣榆县| 霸州市| 若尔盖县| 建阳市| 富蕴县| 建宁县| 水城县| 安徽省| 浏阳市| 五家渠市| 梁平县| 崇文区| 远安县| 黄平县| 卓尼县| 阿勒泰市| 义乌市| 香港| 靖西县| 合川市| 桑植县| 屯昌县| 同仁县| 常宁市| 商都县| 和硕县| 重庆市| 鲁山县| 城步| 通山县| 泗阳县| 葵青区|