// 请求频率检查
private function requestFrequency($uid) {
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// tp框架可以用这行代替上面的原生获取redis实例
// $redis = think\facade\Cache::store('redis')->handler();
$redis->select(0);// 选择缓存库
$key = 'requestFrequency_'.$uid;
$limit = 20; // 单位时间内可访问次数
$expireTime = 60; // 单位时间(秒)
$check = $redis->exists($key);
if (!empty($check)) {
$redis->incr($key); //键值递增
$count = $redis->get($key);
if ($count > $limit) {
$ttl = $redis->ttl($key);// 获取缓存剩余时间(-1没有过期时间,-2不存在该缓存)
if ($ttl == -1) {
// $redis->expire($key, intval($expireTime/2)); // 修复没有过期时间
$redis->del($key); // 删除没有过期时间的非正常缓存
}
return false;
}
}
else {
$redis->incr($key); // 自增次数
$redis->expire($key, $expireTime); // 设置过期时间
}
return true;
}
php+redis实现访问频率控制
最新推荐文章于 2024-06-22 14:04:58 发布