賀朝輝 李江華
摘要:講座索票小程序?yàn)閷W(xué)校提供了一個(gè)更方便的發(fā)布講座和信息通知的平臺(tái),信息能直接從學(xué)校到每個(gè)學(xué)生手中,無(wú)需一層層的去通知,同時(shí)WE索票提供的文件導(dǎo)出,極大地減輕了管理的負(fù)擔(dān)。對(duì)于學(xué)生而言,WE索票可以及時(shí)讓你知道最新的講座信息不再錯(cuò)過(guò)任何一個(gè)想去的講座,搶票機(jī)制使學(xué)生再也不用擔(dān)心名額問(wèn)題。掃描二維碼簽到的方式相比于傳統(tǒng)拿筆在表格上簽到不僅能讓學(xué)乍更快完成簽劍入場(chǎng),而且讓學(xué)校方面的統(tǒng)計(jì)更加方便。
關(guān)鍵詞:搶票;講座;校園;微信小程序;JSON數(shù)據(jù)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)20-0074-03
比如在某些高校,想知道最近有什么講座的話,要么去班級(jí)群看學(xué)委最近是否有發(fā)布一些講座信息,要么去看告示牌。若想要參加講座,還要和學(xué)委進(jìn)行聯(lián)系,然后學(xué)委再以班級(jí)的形式向上匯報(bào),入場(chǎng)簽到時(shí)也得排隊(duì)手動(dòng)簽到。在這種情況下,想?yún)⒓又v座的人不得不經(jīng)過(guò)一道道煩瑣的程序,同時(shí)因?yàn)橐园嗉?jí)形式上報(bào)數(shù)據(jù),所以名額一般都是平均分配,可能導(dǎo)致一些班級(jí)覺(jué)得名額少了,一些班級(jí)覺(jué)得名額多了,這是資源分配不合理的體現(xiàn)。
講座索票小程序使獲得講座信息更方便,同時(shí)報(bào)名講座省去了中間環(huán)節(jié),因?yàn)閾屍笔情_(kāi)放的,所以名額是先到先得,促使資源更合理分配,入場(chǎng)簽到也無(wú)須拿筆填表簽到,只需掃描二維碼即可,因?yàn)槎S碼的時(shí)效性,可以有效防止一些人將二維碼截圖給別人代簽。當(dāng)講座結(jié)束后,可以在管理員后臺(tái)導(dǎo)出講座相關(guān)信息并自動(dòng)生成Excel文件,方便了管理人員的統(tǒng)計(jì)。
1系統(tǒng)功能結(jié)構(gòu)的設(shè)計(jì)
1.1服務(wù)端系統(tǒng)功能
如圖1所示后臺(tái)具有如下功能:
1)建立學(xué)校信息和講座信息;
2)對(duì)上傳的信息進(jìn)行合理性驗(yàn)證;
3)當(dāng)搶票時(shí)間開(kāi)始到搶票時(shí)間結(jié)束時(shí)開(kāi)放搶票通道,若票搶完則提前關(guān)閉搶票通道;
4)對(duì)掃描人進(jìn)行權(quán)限認(rèn)證;
5)對(duì)生成時(shí)間超過(guò)1分鐘的二維碼進(jìn)行無(wú)效化處理。
1.2網(wǎng)頁(yè)端的主要功能介紹
如圖2所示網(wǎng)頁(yè)端具有如下功能:
1)用戶在登錄小程序后選擇自己的班級(jí)進(jìn)行綁定,綁定后即可看到該班級(jí)當(dāng)前周的課程信息或查看別班課程信息;用戶可以編輯自己的課程信息,添加實(shí)驗(yàn)課程到小程序即可將實(shí)驗(yàn)信息進(jìn)行顯示;
2)用戶可以查看自己的班級(jí)的考試信息,并支持用戶對(duì)自己的考試信息進(jìn)行修改或刪除;
3)用戶可以對(duì)默認(rèn)頭像進(jìn)行修改,通過(guò)常見(jiàn)問(wèn)題模塊了解網(wǎng)頁(yè)平臺(tái)的使用;
4)對(duì)用戶查詢的缺勤名單結(jié)果進(jìn)行保存管理,提供缺勤名單下載。
2系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)
2.1使用樂(lè)觀鎖防止“超售”
由于在高并發(fā)的情況下,可能導(dǎo)致數(shù)據(jù)庫(kù)中票的余額減至小于零,于是采用version字段實(shí)現(xiàn)樂(lè)觀鎖,在每一次sql執(zhí)行前讀取version字段值,執(zhí)行時(shí)再讀取version字段值,若兩次ver-sion字段值一樣則執(zhí)行該sql,否則對(duì)操作進(jìn)行回滾。
2.2對(duì)于Redis在高并發(fā)的情況下的解決
Redis在高并發(fā)下的常見(jiàn)問(wèn)題有緩存穿透,緩存雪崩和緩存擊穿。
緩存穿透的解決方案:
即使查詢結(jié)果為null也進(jìn)行緩存,這樣下次再訪問(wèn)不存在的數(shù)據(jù)時(shí),可以直接從緩存查出而不進(jìn)人數(shù)據(jù)庫(kù),但這個(gè)緩存結(jié)果不能保存太久,得把這個(gè)key的過(guò)期時(shí)間沒(méi)置的短一點(diǎn),比如一分鐘,因?yàn)椴樵兘Y(jié)果為空時(shí)不一定是數(shù)據(jù)不存在,也可能是系統(tǒng)內(nèi)部的錯(cuò)誤。
同時(shí)在接口層增加攔截器,攔截那些明顯錯(cuò)誤的數(shù)據(jù),比如id
緩存雪崩的解決方案:
把key的過(guò)期時(shí)間在自定義固定值的基礎(chǔ)上加上一個(gè)隨機(jī)值,減小同一時(shí)間大批量key失效的概率。
對(duì)熱點(diǎn)數(shù)據(jù)(高訪問(wèn)數(shù)據(jù))設(shè)置永不過(guò)期,但是要記得如果數(shù)據(jù)庫(kù)中的熱點(diǎn)數(shù)據(jù)變動(dòng),緩存也要一起更新。
當(dāng)緩存失效時(shí),設(shè)置排隊(duì)隊(duì)列使當(dāng)前失效key為單線程訪問(wèn)(也可以通過(guò)加鎖方式實(shí)現(xiàn)),避免大量并發(fā)請(qǐng)求同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)。
緩存擊穿的解決方案:
利用互斥鎖,當(dāng)key過(guò)期時(shí),setnx一個(gè)key-value(setnx表示key不存在則被創(chuàng)建),若創(chuàng)建成功則進(jìn)人數(shù)據(jù)庫(kù)查詢數(shù)據(jù),并且更新緩存,若創(chuàng)建不成功則sleep一段時(shí)間后重新試圖從緩存中讀取數(shù)據(jù),此時(shí)若有并發(fā)請(qǐng)求訪問(wèn)該過(guò)期key,因?yàn)閟etnx中的key已經(jīng)被創(chuàng)建,則該并發(fā)請(qǐng)求會(huì)一直sleep一段時(shí)間后再次訪問(wèn)緩存,直到從緩存中查詢出數(shù)據(jù)。
2.3二維碼的掃描
在二維碼生成時(shí)對(duì)信息進(jìn)行加密,當(dāng)二維碼機(jī)票被掃描時(shí),應(yīng)對(duì)掃描人的權(quán)限進(jìn)行認(rèn)證,票的有效性的檢驗(yàn)以及二維碼信息的解密。
3系統(tǒng)界面設(shè)計(jì)
1)用戶登入模塊:主要用于個(gè)人信息綁定。
2)講座信息模塊:提供講座信息以及搶票途徑。
3)個(gè)人模塊:用于更改個(gè)人信息。
4)票券模塊:用于保存已獲得的票券信息。
4結(jié)束語(yǔ)
講座索票小程序經(jīng)過(guò)測(cè)試,各功能模塊運(yùn)行穩(wěn)定。由于微信小程序有微信用戶作為基礎(chǔ),相比于傳統(tǒng)的注冊(cè)登錄更為簡(jiǎn)單,便捷和安全。講座索票小程序提供了一個(gè)更為快捷的平臺(tái)簡(jiǎn)化學(xué)生從獲取講座票以及入場(chǎng)的流程,也提供了一個(gè)方便的可供學(xué)校統(tǒng)計(jì)信息的平臺(tái)。
參考文獻(xiàn):
[1]高洪濤.從零開(kāi)始學(xué)微信小程序開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2017.
[2]王松.Spring Boot+Vue全棧開(kāi)發(fā)實(shí)戰(zhàn)[M].北京:清華大學(xué)出版社.2019.
[3]Craig Walls.Spring Boot實(shí)戰(zhàn)[M].丁雪豐,譯.北京:人民郵電出版社,2016.
【通聯(lián)編輯:謝媛媛】
收稿日期:2020-05-08
作者簡(jiǎn)介:賀朝輝(1999-),男,江西萍鄉(xiāng)人,本科在讀;李江華(1976-),男,河南南陽(yáng)人,副教授,碩士生導(dǎo)師,博士,研究方向?yàn)槊嫦虼髷?shù)據(jù)的隱私保護(hù)技術(shù)研究。