计数限流算法

 计数器算法实现起来比较简单,它的基本思路是:在单位时间内(如 1 秒钟)对访问次数进行计数,如果超过设定的阈值,则拒绝后续的请求。以下是一个使用 PHP 实现的计数器算法。完整代码class Counter { protected $maxCount = 100; // 设定最大请求数 protected $interval = 60; // 设定时间窗口大小,单位为秒 protected $redis = null; // Redis 连接 public function __construct($maxCount, $interval) { $this->maxCount = $maxCount; $this->interval = $interval; // 建立 Redis 连接 $this->redis = new Redis(); $this->redis->connect('127.0.0.1', 6379); } publi...

PHP,Golang,.Net,解决方案,其他 2023-03-21 PM 556次 0条

令牌桶限流算法

 下面我们通过使用redis实现一个简单通用的令牌桶限流算法解决问题 令牌桶算法主要是以桶的容量为基准,以固定的时间来生产令牌,有效的解决了漏桶效率不高的问题具体实现创建redis对象并定义缓存键$redis = $this->connect(); $key = "aaaaa";开启 watch 并定义定义每分钟最大请求数量$current_time = time(); $max_count = 320; $total_s = 60; $redis->watch($key);计算平均值用于限制每秒请求数量$rate = (int)(($max_count / $total_s) * ($current_time - ¥result_array["time"]));取出最大容量与桶内容量最小值$num = min($max_count, ($result_array["num"] + $rate));判断令牌数/* 令牌小于0 */ if ($num <= 0) { return false; }重新保存令牌$result = json_encode(["num" =>...

PHP,Golang,.Net,解决方案,其他 2023-03-21 AM 560次 0条

实现滑动窗口限流算法

 下面我们通过php使用redis实现一个简单通用的滑动窗口限流算法解决问题 滑动窗口算法主要解决了传统计数限流算法的阶段突发性流量问题。具体实现创建redis对象并定义缓存键$redis = new \Redis(); $redis->connect("127.0.0.1"); $key = "aaaaa";定义每分钟最大请求数量$max_count = 320; $total_s = 60; $current_time = time();计算平均值用于限制每秒请求数量$avg_count = ceil($max_count / $total_s);限制每秒请求数量$range_count = $redis->zRangeByScore($key, $current_time, $current_time); if (count($range_count) > $avg_count) { exit('请求太过频繁,请稍后 -1'); }限制每分钟请求数量$redis->zRemRangeByScore($key, 0, $current_time - 59); $c...

PHP,Golang,前端,.Net,解决方案,其他 2023-03-17 PM 610次 0条

阿里云redis数据库迁移工具RedisShake

 RedisShake是阿里云开源的高性能redis数据库迁移工具简单易用快速,上手非常简单 现在 redis-shake 有两个主版本:redis-shake 2.x:持续更新 3 年,目前停止更新与答疑,遇到问题推荐尝试 3.x 版本。redis-shake 3.x:基于 redis-shake 2.x 重写,代码可读性高,性能较佳。安装RedisShake安装方式有两种二进制包安装直接下载打包后的压缩包二进制包从版本下载:https://github.com/alibaba/RedisShake/releases从源代码编译git clone https://github.com/alibaba/RedisShake cd RedisShake sh build.sh下载打包压缩包下载并解压:https://github.com/alibaba/RedisShake/releases/download/v3.1.10/redis-shake-linux-amd64.tar.gz配置RedisShake 点击配置 scan.toml , restore.toml , sync...

软件工具,数据库,Linux,解决方案 2023-03-13 PM 634次 0条

mysql 报错 this is incompatible with sql_mode=only_full_group_by

 解决在 mysql 中使用 group by 无效报错 SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'xxxx' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 问题分析 出现这个问题一般一下问题导致的mysql 8.0 及以上版本sql_mode 启用了 only_full_group_by查询字段中或者排序字段中出现了不存在 group by 的字段解决方案在 select 中使用 ANY_VALUE 聚合函数SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name...

数据库,解决方案 2023-03-01 AM 527次 0条