【摘 要】Android系統(tǒng)的發(fā)展,智能手機(jī)的普及,使得我們可以方便的隨時(shí)隨地瀏覽頁(yè)面,同時(shí)也會(huì)在web登陸過(guò)程中留下大量的個(gè)人信息,這就使得在web服務(wù)中有自動(dòng)清除個(gè)人信息的功能變的不可缺少,本文就從sql層面探討這方面的應(yīng)用。
【關(guān)鍵詞】android,sql 周期任務(wù)
一、情景設(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有哪些。
執(zhí)行,輸出:
我們現(xiàn)在要啟用Event Scheduler,輸入命令
或者也可以在server的配置文件((my.cnf, or my.ini on Windows systems)中設(shè)置event_scheduler=1,然后重啟服務(wù)器。
現(xiàn)在我們?cè)賮?lái)查看Event Scheduler的狀態(tài):
輸出:
可以看到已經(jīng)啟動(dòng)了。
為了測(cè)試,我們先建立一個(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ì)有返回值的語(yǔ)句時(shí),是不會(huì)返回內(nèi)容到console上的,也不會(huì)返回到內(nèi)存中。這樣select語(yǔ)句似乎在Event Scheduler中沒(méi)什么用,其實(shí)不是,它可以用來(lái)作為insert語(yǔ)句的原料。例如:
用類似這樣的語(yǔ)句可以在數(shù)據(jù)庫(kù)層自動(dòng)完成網(wǎng)站一些統(tǒng)計(jì)量的更新,而不用寫(xiě)到web application中。
項(xiàng)目:重慶市教委科學(xué)技術(shù)項(xiàng)目KJ133103