文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

redis聊天室防刷屏

2024-04-02 19:55

关注

本项目将会限制同一个昵称发送完全相同信息的频率。两次完全相同的信息的发送时间间隔不少于120 秒。


1. 理解限制刷屏的原理
Redis 天然就具有实现这一功能的能力。在Redis 中, Key 可以设置过期时间。时间到了后
Red is 会自动删除这个Key 。
那么如果设置一个字符串呢?Key为:“昵称-发言内容",例如“ 青南-我在灌水",然后把这个Key的过期时间设置为120秒。这个字符串的值无所谓,随便设置为什么都可以。那么:如果要这个Key在Redis中,则说明这个用户昵称在120秒内己经发送过这条信息了: 如果这个Key不在Redis中,则说明这个用户从来没有发送过这条信息,或者发送己经超过了两分钟,Key被Redis自动删除了。
而且,Redis可以使用“ 时”命令查询一个Key的过期时间还剩多少秒,这样还可以实现提醒功能。

2. 实现限制刷屏的方法
设置Key 的过期时间的方法为set_nick_msg_expire_time(),修改代码如下:

redis聊天室防刷屏

redis聊天室防刷屏

其中,主要代码说明如下:

• 第13行代码:先把信息转换为MD5 。这样做的好处是:缩短信息的长度,避免太长以致于导出超出Redis Key的限制。
• 第14行代码:把用户昵称与消息的MD5值拼成一个长字符串,作为Key 。
• 第15行代码:在Redis中设定一个字符串, Key为“昵称+消息的MD5 值”,值为1;通过ex 参数设定过期时间为120 ,过期时间一到Redis就会删除这个Key
修改后的代码如图6-20 所示。

redis聊天室防刷屏


读取刷屏限制的剩余时间

当用户要发送新内容时,网站先检查Red is 是否有“昵称+新信息MD 5 值”这个Key 。
• 如果有,则说明用户在120 秒内发送了相同的内容。此时返回解除刷屏限制的剩余时间。

• 如果没有,则返回None 。

1. 设置查询限制刷屏时间的方法
对应的方法为get_ nick_ msg_ expire_ time() 。完善以后的代码如下:

redis聊天室防刷屏

其中,主要代码说明如下。
• 第1 6 行代码: 获得消息的MD5 值。
• 第17 行代码:把昵称与消息的M D5 值拼成一个Key 。
• 第18 行代码:使用Redis的“ 时”命令检查Key的剩余时间。如果Key不存在,则返回None ;如果Key 没有过期时间,返回-1 ; 如果Key有过期时间,返回剩余时间(正整数)。
修改后的代码如图6 - 21 所示。

redis聊天室防刷屏

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯