实现滑动窗口限流算法

 下面我们通过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 369次 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 404次 0条

新手也能看懂的jenkins上传文件到阿里云oss脚本

 分享一段新手也能看懂的jenkins上传文件到阿里云oss脚本,便于其他同学快速入门.步骤 下面实现了代码从仓库到上传文件到阿里云oss过程,分别是拉取仓库代码打包代码上传清理当前工作空间源码pipeline { agent any parameters{ string(name:'git_url',defaultValue:'https:/xxxx.cn/xzz/xxxxx.git',description:'仓库地址') string(name:'version',defaultValue:'main',description:'版本') string(name:'build_name',defaultValue:'xxxxxx',description:'打包名称') } stages { stage('拉取') { steps { deleteDir() checkout([ $class: 'GitSCM', ...

Linux,解决方案,其他 2022-12-28 AM 353次 0条

新手也能看懂的jenkins部署脚本

 分享一段新手也能看懂的jenkins部署脚本,便于其他同学快速入门.步骤 下面实现了代码从仓库到目标服务器的部署过程,分别是拉取仓库代码配置服务配置打包代码检查目标服务器环境部署代码到目标服务器发布代码到目标服务器指定位置清理当前工作空间源码pipeline { agent any parameters{ string(name:'site_hash',defaultValue:'deploy_001',description:'站点名称') string(name:'git_url',defaultValue:'https://xxx.com/xxxx.git',description:'仓库地址') string(name:'version',defaultValue:'v1.0.0',description:'版本') string(name:'build_name',defaultValue:'deploy_001',description:'打包名称') strin...

Linux,其他 2022-12-21 AM 226次 0条

docker在windows中启动出现An error occurred错误解决方案

异常信息简述Failed to set version to docker-desktop: exit code: -1以下主要解决了docker在windows中启动出现An error occurred错误的处理方法,主要在命令行使用了以下命令,然后重启 netsh winsock reset详细错误信息System.InvalidOperationException:Failed to set version to docker-desktop: exit code: -1 stdout: �S��v�[a�{|�WN/ec\Ջ�v�d\O0解决方案 我们只需要在windows命令行中重启下 winsock 服务即可右键以管理员打开 Windows PowerShell 或者 CMD输入重启 winsock 服务命令回车执行netsh winsock reset重启docker desktop即可

解决方案 2022-11-23 AM 228次 0条

解决tp5,tp6,fastadmin框架api或者其他模块获取不到语言包问题

 分享下解决了在 api 模块或者其他任意自定义模块 模型获取不到语言包无法转换或者多模块公用一个语言包问题示例 主要默认加载了admin模块下的语言包 在基类或者当前类里面加入即可public function __construct($data = []) { parent::__construct($data); $this->loadlang(mb_strtolower(class_basename(static::class))); } /** * 加载语言文件 * @param string $name */ protected function loadlang($name) { $name = Loader::parseName($name); $name = preg_match("/^([a-zA-Z0-9_\.\/]+)\$/i", $name) ? $name : 'index'; $lang = request()->langset(); $lang = preg_match("/^([a-zA-...

PHP,解决方案 2022-11-09 PM 345次 0条

redis管理key任意分割符层次算法

 简单研究了下市面上Redis管理器key分隔符算法的时间下面分享下.效果 下面展示了其他redis管理器的效果和我们要实现的目标效果常见效果目标实现效果实现算法可以看到上面通过冒号分割符将 key 分割成层级目录方便管理查看.实现步骤scan获取redis指定数量key循环遍历所有key指定转换分割符号 : 或者其他符号为数组判断数组是否有多个只存在一个则直接赋值键存在多个则赋值引用类型到临时变量然后循环赋值键到临时变量 难点在于 & 引用类型的理解实现算法$iterator = null; $all_keys = $redis->scan($iterator, $search, 1000); $keys = []; foreach ($all_keys as $datum) { $key_array = explode(':', $datum); if (count($key_array) > 1) { $keys_temp = &$keys; foreach ($key_array ...

PHP,解决方案 2022-10-28 PM 329次 0条

php中php-fpm fast-cgi cgi 的关系

cgicgi 是一个协议,跟进程无关,比如说 web server (nginx) 接收到一个 php 的网络请求,此时 nginx 需要根据配置文件,去找 php 的解析器,经过简单处理,将请求的一些信息交给 php 解析器,此时就规定了要传那些协议,还有以什么样的格式传输,这个标准就叫做 cgi 协议php 解释是实现了这个协议的 cgi 程序,nginx 将这些内容交给 php 解释器后,读取 php.ini 等初始化环境,然后处理数据,最终转换成符合这个协议的数据流交给 nginx, 最终返回给浏览器fast-cgi fast-cgi 管理 cgi 程序fast-cgi 是一个常驻进程的程序,与 cgi 为每个 web 请求建立一个进程不同的是,fast-cgi 在 web server 启动的时候会同时启动多个 cgi 程序,这样当进来动态页面请求的时候,就可以将数据流交由 fast-cgi 进程管理器,这样做的好处就是 web server 可以处理更多的请求,并且解析 php.ini 这些工作只进行一次,提高响应速度如图所示php-fpm php-fpm 管理 cg...

PHP 2022-10-27 PM 290次 0条

搭建开源对象储存系统MinIO

适用于中小型的物联网高性能对象储存系统 MinIOMinIO 是一种高性能对象存储解决方案,提供与亚马逊网络服务 S3 兼容的 API,并支持所有核心 S3 功能。MinIO 旨在部署在任何地方 - 公共云或私有云、裸机基础架构、编排环境和边缘基础架构。本文将带领大家一步一步的完成搭建开源对象储存系统MinIOLinux 以下提供了使用 RPM、DEB 或二进制文件将 MinIO 安装到 64 位 Linux 操作系统上的示例。RPM 和 DEB 软件包会自动将 MinIO 安装到必要的系统路径,并创建一个服务文件来自动运行 MinIO。米尼奥强烈建议使用 RPM 或 DEB 安装路由。systemdRPMwget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20221008201100.0.0.x86_64.rpm -O minio.rpm sudo dnf install minio.rpmDEBwget https://dl.min.io/server/minio/release/linu...

解决方案 2022-10-15 AM 335次 0条

使用UU加速器访问国外网站加速github

 之前无意间发现 网易uu加速器 竟然可以 加速 一些国内访问不到的 国外学术 网站,又很惊喜的发现他竟然对 github 有效,下面分享下使用 UU加速器 访问国外网站 加速github 的具体流程。## 下载或者更新UU加速器到最新版本https://uu.163.com/ 博主当前的UU加速器版本为 V4.21搜索学术资源 我们打开最新版本的 UU加速器 搜索 学术资源 可以看到有一个选项,然后我们点击选项。启动学术资源 可以看到学术资源已经启动成功了。 并且uu加速器提供几百个高速节点支持国外网站https://baike.uu.163.com/scholar/ 虽然说上面没有列出来 github 的站点但是我们经过测试依旧可以 加速github 网站。 可以看到 加速github 访问起来还是很快的。 关于通过使用UU加速器访问国外网站加速github详细步骤已经分享完毕了,有兴趣的小伙伴可以测试下。

软件工具,解决方案 2022-04-15 AM 4546次 0条