【摘 要】Android系統(tǒng)的發(fā)展,智能手機(jī)的普及,使得我們可以方便的隨時(shí)隨地瀏覽頁面,同時(shí)也會(huì)在web登陸過程中留下大量的個(gè)人信息,這就使得在web服務(wù)中有自動(dòng)清除個(gè)人信息的功能變的不可缺少,本文就從sql層面探討這方面的應(yīng)用。
【關(guān)鍵詞】android,sql 周期任務(wù)
一、情景設(shè)定
客戶端為android手機(jī),登錄后希望保存其在線狀態(tài)(server端),并且對于每一個(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í)間沒有操作時(shí),刪掉在線記錄,這樣每次新登錄時(shí)就會(huì)產(chǎn)生新的checksum值。
二、問題
需要定時(shí)清理過期的在線用戶,因?yàn)橛械挠脩粝矚g保存密碼而不使用登出功能。
三、解決方法
定時(shí)清理過期的在線用戶,可以想到使用一些周期性的定時(shí)任務(wù)。定時(shí)任務(wù)可以設(shè)置在操作系統(tǒng)中,也可以設(shè)置在web application中,但今天想做的是直接使用MySQL的周期任務(wù)。
四、過程
MySQL中的定時(shí)周期任務(wù)是Event Scheduler,見網(wǎng)頁 http://dev.mysql.com/doc/refman/5.6/en/events.html ,該頁面的右側(cè)可以選擇你的MySQL的版本,以查看相應(yīng)的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是類似的,那我們可以預(yù)計(jì)它應(yīng)該也是啟用一個(gè)list,然后往這個(gè)list中加入一個(gè)個(gè)任務(wù),然后mysql會(huì)啟動(dòng)一個(gè)線程專門維護(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,它們分別代表什么含義以及如何切換均參見Event Scheduler Configuration頁面。
現(xiàn)在,我們用show processlist命令來查看一下活動(dòng)中的Event Scheduler有哪些。
執(zhí)行,輸出:
我們現(xiàn)在要啟用Event Scheduler,輸入命令
或者也可以在server的配置文件((my.cnf, or my.ini on Windows systems)中設(shè)置event_scheduler=1,然后重啟服務(wù)器。
現(xiàn)在我們再來查看Event Scheduler的狀態(tài):
輸出:
可以看到已經(jīng)啟動(dòng)了。
為了測試,我們先建立一個(gè)onlineUser表,并插入數(shù)據(jù)
下一步就是設(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í)行,輸出:
我們等5分鐘,查看結(jié)果。
可以看到2013-04-14 18:55:05的那條記錄已經(jīng)被刪除了。
五、其他
Event Scheduler在執(zhí)行諸如select等會(huì)有返回值的語句時(shí),是不會(huì)返回內(nèi)容到console上的,也不會(huì)返回到內(nèi)存中。這樣select語句似乎在Event Scheduler中沒什么用,其實(shí)不是,它可以用來作為insert語句的原料。例如:
用類似這樣的語句可以在數(shù)據(jù)庫層自動(dòng)完成網(wǎng)站一些統(tǒng)計(jì)量的更新,而不用寫到web application中。
項(xiàng)目:重慶市教委科學(xué)技術(shù)項(xiàng)目KJ133103