今天我们讲讲,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次,那么即使它是有问题的访问,但是依然限制不了。
方法二
计算该Python课程学习,IPkey的list长度,即该IP访问的时间队列,如果小于10次,那么将每次访问的时间入栈。否则,当访问次数满了10次,计算当前时间与最近一次访问时间的时间差,如果小于60秒,那么禁止访问,否则重置队列,重新存储访问时间。
小编结语:更多内容尽在课课家教育。
¥199.00
¥48.00¥180.00
¥29.90
¥798.00
¥48.00¥180.00
¥199.00