溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

redis聊天室防刷屏

發(fā)布時(shí)間:2020-08-04 09:46:23 來(lái)源:網(wǎng)絡(luò) 閱讀:399 作者:梁十八 欄目:關(guān)系型數(shù)據(jù)庫(kù)

本項(xiàng)目將會(huì)限制同一個(gè)昵稱發(fā)送完全相同信息的頻率。兩次完全相同的信息的發(fā)送時(shí)間間隔不少于120 秒。


1. 理解限制刷屏的原理
Redis 天然就具有實(shí)現(xiàn)這一功能的能力。在Redis 中, Key 可以設(shè)置過(guò)期時(shí)間。時(shí)間到了后
Red is 會(huì)自動(dòng)刪除這個(gè)Key 。
那么如果設(shè)置一個(gè)字符串呢?Key為:“昵稱-發(fā)言內(nèi)容",例如“ 青南-我在灌水",然后把這個(gè)Key的過(guò)期時(shí)間設(shè)置為120秒。這個(gè)字符串的值無(wú)所謂,隨便設(shè)置為什么都可以。那么:如果要這個(gè)Key在Redis中,則說(shuō)明這個(gè)用戶昵稱在120秒內(nèi)己經(jīng)發(fā)送過(guò)這條信息了: 如果這個(gè)Key不在Redis中,則說(shuō)明這個(gè)用戶從來(lái)沒(méi)有發(fā)送過(guò)這條信息,或者發(fā)送己經(jīng)超過(guò)了兩分鐘,Key被Redis自動(dòng)刪除了。
而且,Redis可以使用“ 時(shí)”命令查詢一個(gè)Key的過(guò)期時(shí)間還剩多少秒,這樣還可以實(shí)現(xiàn)提醒功能。

2. 實(shí)現(xiàn)限制刷屏的方法
設(shè)置Key 的過(guò)期時(shí)間的方法為set_nick_msg_expire_time(),修改代碼如下:

redis聊天室防刷屏

redis聊天室防刷屏

其中,主要代碼說(shuō)明如下:

? 第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;通過(guò)ex 參數(shù)設(shè)定過(guò)期時(shí)間為120 ,過(guò)期時(shí)間一到Redis就會(huì)刪除這個(gè)Key
修改后的代碼如圖6-20 所示。

redis聊天室防刷屏


讀取刷屏限制的剩余時(shí)間

當(dāng)用戶要發(fā)送新內(nèi)容時(shí),網(wǎng)站先檢查Red is 是否有“昵稱+新信息MD 5 值”這個(gè)Key 。
? 如果有,則說(shuō)明用戶在120 秒內(nèi)發(fā)送了相同的內(nèi)容。此時(shí)返回解除刷屏限制的剩余時(shí)間。

? 如果沒(méi)有,則返回None 。

1. 設(shè)置查詢限制刷屏?xí)r間的方法
對(duì)應(yīng)的方法為get_ nick_ msg_ expire_ time() 。完善以后的代碼如下:

redis聊天室防刷屏

其中,主要代碼說(shuō)明如下。
? 第1 6 行代碼: 獲得消息的MD5 值。
? 第17 行代碼:把昵稱與消息的M D5 值拼成一個(gè)Key 。
? 第18 行代碼:使用Redis的“ 時(shí)”命令檢查Key的剩余時(shí)間。如果Key不存在,則返回None ;如果Key 沒(méi)有過(guò)期時(shí)間,返回-1 ; 如果Key有過(guò)期時(shí)間,返回剩余時(shí)間(正整數(shù))。
修改后的代碼如圖6 - 21 所示。

redis聊天室防刷屏

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI