本項(xiàng)目將會(huì)限制同一個(gè)昵稱發(fā)送完全相同信息的頻率。兩次完全相同的信息的發(fā)送時(shí)間間隔不少于120 秒。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),芒康企業(yè)網(wǎng)站建設(shè),芒康品牌網(wǎng)站建設(shè),網(wǎng)站定制,芒康網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,芒康網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
1. 理解限制刷屏的原理
redis 天然就具有實(shí)現(xiàn)這一功能的能力。在Redis 中, Key 可以設(shè)置過期時(shí)間。時(shí)間到了后
Red is 會(huì)自動(dòng)刪除這個(gè)Key 。
那么如果設(shè)置一個(gè)字符串呢?Key為:“昵稱-發(fā)言內(nèi)容",例如“ 青南-我在灌水",然后把這個(gè)Key的過期時(shí)間設(shè)置為120秒。這個(gè)字符串的值無所謂,隨便設(shè)置為什么都可以。那么:如果要這個(gè)Key在Redis中,則說明這個(gè)用戶昵稱在120秒內(nèi)己經(jīng)發(fā)送過這條信息了: 如果這個(gè)Key不在Redis中,則說明這個(gè)用戶從來沒有發(fā)送過這條信息,或者發(fā)送己經(jīng)超過了兩分鐘,Key被Redis自動(dòng)刪除了。
而且,Redis可以使用“ 時(shí)”命令查詢一個(gè)Key的過期時(shí)間還剩多少秒,這樣還可以實(shí)現(xiàn)提醒功能。
2. 實(shí)現(xiàn)限制刷屏的方法
設(shè)置Key 的過期時(shí)間的方法為set_nick_msg_expire_time(),修改代碼如下:
其中,主要代碼說明如下:
? 第13行代碼:先把信息轉(zhuǎn)換為MD5 。這樣做的好處是:縮短信息的長(zhǎng)度,避免太長(zhǎng)以致于導(dǎo)出超出Redis Key的限制。
? 第14行代碼:把用戶昵稱與消息的MD5值拼成一個(gè)長(zhǎng)字符串,作為Key 。
? 第15行代碼:在Redis中設(shè)定一個(gè)字符串, Key為“昵稱+消息的MD5 值”,值為1;通過ex 參數(shù)設(shè)定過期時(shí)間為120 ,過期時(shí)間一到Redis就會(huì)刪除這個(gè)Key
修改后的代碼如圖6-20 所示。
讀取刷屏限制的剩余時(shí)間
當(dāng)用戶要發(fā)送新內(nèi)容時(shí),網(wǎng)站先檢查Red is 是否有“昵稱+新信息MD 5 值”這個(gè)Key 。
? 如果有,則說明用戶在120 秒內(nèi)發(fā)送了相同的內(nèi)容。此時(shí)返回解除刷屏限制的剩余時(shí)間。
? 如果沒有,則返回None 。
1. 設(shè)置查詢限制刷屏?xí)r間的方法
對(duì)應(yīng)的方法為get_ nick_ msg_ expire_ time() 。完善以后的代碼如下:
其中,主要代碼說明如下。
? 第1 6 行代碼: 獲得消息的MD5 值。
? 第17 行代碼:把昵稱與消息的M D5 值拼成一個(gè)Key 。
? 第18 行代碼:使用Redis的“ 時(shí)”命令檢查Key的剩余時(shí)間。如果Key不存在,則返回None ;如果Key 沒有過期時(shí)間,返回-1 ; 如果Key有過期時(shí)間,返回剩余時(shí)間(正整數(shù))。
修改后的代碼如圖6 - 21 所示。