溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表

發(fā)布時(shí)間:2021-11-06 10:13:50 來(lái)源:億速云 閱讀:304 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

小編給大家分享一下如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

情景設(shè)定

  客戶端為android手機(jī),登錄后希望保存其在線狀態(tài)(server端),并且對(duì)于每一個(gè)在線用戶都有一個(gè)相應(yīng)的checksum值,每次執(zhí)行操作時(shí)需要校驗(yàn)該值。為了防止黑客截獲checksum值進(jìn)行二次攻擊,因此checksum值在每次登錄或間隔一段時(shí)間后都會(huì)動(dòng)態(tài)改變。因此需要在server端保存用戶的在線狀態(tài),當(dāng)用戶離線時(shí)或超出一定時(shí)間沒(méi)有操作時(shí),刪掉在線記錄,這樣每次新登錄時(shí)就會(huì)產(chǎn)生新的checksum值。

問(wèn)題

  需要定時(shí)清理過(guò)期的在線用戶,因?yàn)橛械挠脩粝矚g保存密碼而不使用登出功能。

解決方法

  定時(shí)清理過(guò)期的在線用戶,可以想到使用一些周期性的定時(shí)任務(wù)。定時(shí)任務(wù)可以設(shè)置在操作系統(tǒng)中,也可以設(shè)置在web application中,但今天想做的是直接使用MySQL的周期任務(wù)。

過(guò)程

MySQL中的定時(shí)周期任務(wù)是Event Scheduler,見(jiàn)網(wǎng)頁(yè) http://dev.mysql.com/doc/refman/5.6/en/events.html ,該頁(yè)面的右側(cè)可以選擇你的MySQL的版本,以查看相應(yīng)的Event Scheduler的手冊(cè)。我們使用的是MySQL 5.5.

先來(lái)看看它的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是類似的,那我們可以預(yù)計(jì)它應(yīng)該也是啟用一個(gè)list,然后往這個(gè)list中加入一個(gè)個(gè)任務(wù),然后mysql會(huì)啟動(dòng)一個(gè)線程專門(mén)維護(hù)這個(gè)list,并在適當(dāng)?shù)臅r(shí)間執(zhí)行該list上符合條件的任務(wù)。

大概了解了Event Scheduler的概念后,我們進(jìn)入下一個(gè)步驟Event Scheduler Configuration。

在Event Scheduler Configuration中介紹了Event Scheduler的三種狀態(tài)ON/OFF/DISABLED,它們分別代表什么含義以及如何切換均參見(jiàn)Event Scheduler Configuration頁(yè)面。

現(xiàn)在,我們用show processlist命令來(lái)查看一下活動(dòng)中的Event Scheduler有哪些。

如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表

執(zhí)行,輸出:

如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表

我們現(xiàn)在要啟用Event Scheduler,輸入命令

如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表

或者也可以在server的配置文件((my.cnf, or my.ini on Windows systems)中設(shè)置event_scheduler=1,然后重啟服務(wù)器。

現(xiàn)在我們?cè)賮?lái)查看Event Scheduler的狀態(tài):

如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表

輸出:

如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表

可以看到已經(jīng)啟動(dòng)了。

為了測(cè)試,我們先建立一個(gè)onlineUser表,并插入數(shù)據(jù)

如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表

下一步就是設(shè)定我們的定時(shí)任務(wù):

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

執(zhí)行,輸出:

如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表

我們等5分鐘,查看結(jié)果。

如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表

可以看到2013-04-14 18:55:05的那條記錄已經(jīng)被刪除了。

其他:

Event Scheduler在執(zhí)行諸如select等會(huì)有返回值的語(yǔ)句時(shí),是不會(huì)返回內(nèi)容到console上的,也不會(huì)返回到內(nèi)存中。這樣select語(yǔ)句似乎在Event Scheduler中沒(méi)什么用,其實(shí)不是,它可以用來(lái)作為insert語(yǔ)句的原料。例如:

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 ;

用類似這樣的語(yǔ)句可以在數(shù)據(jù)庫(kù)層自動(dòng)完成網(wǎng)站一些統(tǒng)計(jì)量的更新,而不用寫(xiě)到web application中。也是很方便。

以上是“如何使用MySQL周期任務(wù)來(lái)定時(shí)清理在線用戶列表”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI