추천: "PHP 비디오 튜토리얼"
일상 비즈니스 기능 개발에서 특정 기간에 특정 횟수만큼 특정 인터페이스에 액세스하도록 모든 IP를 제한하려는 경우 어떻게 해야 합니까? 그것을 구현?
이 기능 요구 사항은 일반적으로 스크립트가 인터페이스를 악의적으로 브러싱하는 것을 방지하는 데 사용됩니다. 현재 인터넷에는 비교적 완전한 전류 제한 솔루션이 많이 있습니다. 일반 사이트의 경우 redis의 연결리스트 데이터 구조를 이용하여 IP 전류 제한 기능을 구현할 수 있습니다.
예를 들어 -
인터페이스 A에 대해 연속 5초마다 최대 3번의 액세스를 허용하도록 모든 IP를 제한하고, 3회를 초과하면 오류를 반환해야 한다고 가정해 보겠습니다.
위 사진의 경우 08초에 지난 5초 동안 4개의 요청이 발생하여 최대 개수 제한에 도달하여 현재 접속이 제한됩니다.
PHP로 구현한 경우 구체적인 로직 코드는 다음과 같습니다. -
/** * 检查队列的长度是否到达设定的阈值,已到达则返回false,未到达则将当前时间戳推入队列最末端,同时刷新队列整体的缓存时间 * @param $key 队列缓存的key * @param $expire 队列缓存过期时间,例如上面例子中的5秒 * @param $limit 队列长度阈值,如上面例子中的3次 * @return bool */public function checkLimit($key, $expire, $limit){ $length = $this->refreshList($key, $expire); if ($length rPush($key, time()); $this->expire($key, intval($limit)); return true; } return false;}/** * 刷新队列,过滤掉已经不在有效时间内的值,返回最新队列的长度 * @param $key string 自定义的缓存key * @param $expire 队列缓存过期时间,例如上面例子中的5秒 * @return bool|int */public function refreshList ($key, $expire) { if ($this->has($key)) { do { // 对于已存在数据的list,要先从前往后把已经过期的数据弹出 $oldest_value = $this->lPop($key); } while ($oldest_value && time() - $oldest_value > $expire); // 把最后弹出的数据重新塞回list的最前边 $oldest_value && $this->lPush($key, $oldest_value); return $this->lLen($key); } return 0;}
여기에 사용된 lPop, lPush, lLen, rPush 및 기타 메소드는 모두 Redis 확장을 캡슐화한 후 연결 목록 데이터 구조를 작동하는 메소드입니다. 반환 값은 기본 메서드와 일치합니다.
사실 나중에 온라인으로 확인한 결과 redis가 이 시나리오를 처리할 때 zset과 같은 순서 집합을 사용하여 더 직접적으로 구현된다는 것을 알았습니다. 논리는 기본적으로 현재 타임스탬프를 저장한 다음 슬라이딩을 사용하는 것입니다. 창 알고리즘 아이디어. 현재 창의 값 길이가 제한을 초과했는지 확인합니다.
위 내용은 IP 전류 제한 작업을 구현하기 위한 redis 기반 PHP의 목록 유형 데이터 구조에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Redis是现在最热门的key-value数据库,Redis的最大特点是key-value存储所带来的简单和高性能;相较于MongoDB和Redis,晚一年发布的ES可能知名度要低一些,ES的特点是搜索,ES是围绕搜索设计的。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于redis的一些优势和特点,Redis 是一个开源的使用ANSI C语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式存储数据库,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis Cluster集群收缩主从节点的相关问题,包括了Cluster集群收缩概念、将6390主节点从集群中收缩、验证数据迁移过程是否导致数据异常等,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于原子操作中命令原子性的相关问题,包括了处理并发的方案、编程模型、多IO线程以及单命令的相关内容,下面一起看一下,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了bitmap问题,Redis 为我们提供了位图这一数据结构,位图数据结构其实并不是一个全新的玩意,我们可以简单的认为就是个数组,只是里面的内容只能为0或1而已,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于实现秒杀的相关内容,包括了秒杀逻辑、存在的链接超时、超卖和库存遗留的问题,下面一起来看一下,希望对大家有帮助。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전
