使用MySQL周期任務來定時清理線上使用者列表

來源:互聯網
上載者:User

情景設定

  用戶端為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中。也是很方便。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.