1. Jede Ausgabe dieser Artikelreihe wird ein praktisches Redis-Problem lösen.
2. Die Fragen zu jeder Ausgabe werden aus den Kommentaren jeder Ausgabe ausgewählt. Die Fragen beziehen sich auf Redis Bei anderen Fragen schließe ich nicht aus, eine neue Serie zu starten
4. Die Lösung ist daher hauptsächlich PHP
5 Wenn es keine passenden Fragen in den Kommentaren gibt, stelle ich mir selbst Fragen
Problem Beschreibung: ...
Modulieren Sie die Zeit so, dass der Schlüsselname jedes $timeInterval einmal pro Sekunde aktualisiert wird.<?php /** * 是否允许放行 * @param string $key redis键前缀 * @param int $timeInterval 时间间隔(秒) * @param int $max 时间间隔内最大放行数 * @return bool 是否放行 * @throws Exception * @example * <pre class="brush:php;toolbar:false"> * //每秒放行一个 * isAllow('my_allow'); * * //每秒放行3个 * isAllow('my_allow',1,3); * * //每3秒放行2个 * isAllow('my_allow',3,2); */ function isAllow(string $key, int $timeInterval=1, int $max=1):bool{ if($timeInterval<1){ throw new Exception('时间间隔必须大于0'); } if($max<1){ throw new Exception('最大放行数必须大于0'); } $redis=new Redis(); $redis->connect('192.168.31.187'); if(!$redis->isConnected()){ throw new Exception('Redis服务连接失败'); } //对时间戳取模,使得每$timeInterval秒取得同一个时间戳 $time=time(); $key.=':'.($time-($time%$timeInterval)); //自增并返回自增后的结果 $index=$redis->incr($key); //如果是第一个访问,设置键的过期时间 if($index===1){ $redis->expire($key,$timeInterval+1); } return $index<$max+1; }Nach dem Login kopierenCode-Interpretation:
incr()-Methode, um den Wert des Schlüssels zu erhöhen. Erstellen Sie zuerst einen Schlüssel mit dem Wert 0 und erhöhen Sie ihn dann automatisch.
Das obige ist der detaillierte Inhalt vonPHP+Redis löst das praktische Problem der Auftragsflussbeschränkung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!