Rumah >pembangunan bahagian belakang >tutorial php >PHP Redis menyelesaikan masalah praktikal pengehadan aliran pesanan
1. Setiap keluaran siri artikel ini akan menyelesaikan masalah Redis yang praktikal
2. Soalan bagi setiap isu akan dipilih daripada komen setiap isu
3 Redis berkaitan. Untuk pertanyaan lain, sila hubungi saya Jika anda berminat, saya tidak akan menolak untuk memulakan siri baru
4. Saya sering menggunakan PHP, jadi penyelesaiannya adalah terutamanya PHP
5. Jika tiada soalan yang sesuai dalam komen, saya akan buat soalan saya sendiri
Penerangan masalah:
Ini adalah isu pertama, jadi saya hanya boleh buat soalan saya sendiri
Bagaimana cara menggunakan Redis untuk mengehadkan aliran pesanan Contohnya, N akses dibenarkan setiap M saat
Penyelesaian:
🎜><?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; }Tafsiran kod:
Tutorial Video PHP"
Atas ialah kandungan terperinci PHP Redis menyelesaikan masalah praktikal pengehadan aliran pesanan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!