下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

从Redis数据库中什么实现分布式速率所限的方法

作者:课课家教育     来源: http://www.kokojia.com点击数:938发布时间: 2018-12-25 10:45:47

标签: python基础入门Python课程学习Python面向对象

  今天我们讲讲,Redis数据库速率,在许多应用中,对昂贵的资源的访问必须加以限制,此时速率限制是必不可少的。许多现代网络应用程序在多个进程和服务器上运行,状态需要被共享。一个理想的解决方案应该是高效、快捷的,而不是依赖于被绑定到特定客户端的单个应用程序服务器(由于负载平衡)或本身持有任何状态,那么我们如何解决这个问题呢?

  实现这一目标的一个简单有效的方法就是使用Redis,它有很多有用的数据结构和功能,尽管实现WordPress速率限制只需要2个功能用:一、在某个具体的键值上递增深度探索c 对象模型,一个整数,二、给这个键值设置过期时间。

  因为redis有个单一的事件循环系统(每个人每次在同一个时间只能执行一个操作),这是个原子操作,也就是说无论有多少个客户端同时交互操作,对于同一个键值总有一个确定的数值。

  这在对同一个资源进行多个速率限制的情况下通常是有利的,因为这允许少量的破裂,以及更长的期限限制。例如每秒钟请求3次,没分钟请求20次。因为每个限制都是相对独立的,这就需要与其它限制分开进行单独的递增。

  因为速率限制通常用在响应时间比较重要的资源(比如网页应用),所以尽量缩短速率限制的使用时间是非常有必要的。redis的最基本的应用就是发出命令,等待响应,然后发出另一个命令,如此往复。这个花费是昂贵的,因为需要通过网络在应用程序和redis服务器之间多次往返。由于在这个用例中,没有命令依赖其它命令的执行结果,这使得redis的一个叫做流水线技术的使用成为可能。这就是客户端缓存所有redis请求,然后把这写请求发送给redis,redis一次性返回所有的结果。

  Redis不会维护c客户端需要的限制的,因为redis会根据客户端设置的过期时间删除旧的记数。这消除了c 11客户端统筹协调的需要,和删除竞争条件的可能性。

  下面小编给大家介绍两种方法:

  方法一

  通过key记录IP:rate.limiting:$IP,同时初始时设置期限为60秒,如果超时则重新设置,否则进行判断,当一分钟内访问超过100次,则禁止访问。

  考虑到如果请求的频率在每秒10次,每分钟请求9次,那么即使它是有问题的访问,但是依然限制不了。

  方法二

考虑到如果请求的频率在每秒10次,每分钟请求9次,那么即使它是有问题的访问,但是依然限制不了。    方法二

  计算该Python课程学习,IPkey的list长度,即该IP访问的时间队列,如果小于10次,那么将每次访问的时间入栈。否则,当访问次数满了10次,计算当前时间与最近一次访问时间的时间差,如果小于60秒,那么禁止访问,否则重置队列,重新存储访问时间。

  小编结语:更多内容尽在课课家教育。

赞(12)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程