Redis 提示 protocol error, got 'u' as reply type byte 解决方案

 遇到一个奇怪的问题,在 php 中使用 workerman 或者传统 pcntl_fork 的开启子进程时 大约十几分钟就会出现一段异常报错 protocol error, got 'u' as reply type byte 初步诊断是redis提示的 大致意思是 协议错误,得到'u'作为回复类型字节 。异常信息protocol error, got 'u' as reply type byte通过代码排查以及报错提示初步判断是redis的问题原因分析 传统 cli 下不会出现这个问题,只有 workerman 下以及 pcntl_fork 的开启子进程时 十几分钟后才会出现。 已知 workerman 底层使用的也是 pcntl_fork 我们直接分析这个函数。 pcntl_fork 函数 先创建主进程然后在根据需要创建N个子进程,而redis使用 单例模式 或者使用 static 来进行保存连接对象时候并且在主线程内有创建这个连接,那么就会出现以上 protocol error, got 'u' as reply type byte 错误 这种异常一般称为...

PHP,Linux,解决方案,其他 2023-12-18 PM 69次 0条

pixi学习资料以及问题收集

 本文主要收集楼主在学习 pixijs 过程中所用到的资料文档以及遇到的一些问题,方便日后查看。 阅读此文是默认已经对 pixijs 有了基本的了解。简述 PixiJS 的核心是一个渲染系统,它使用 WebGL(或可选的 Canvas)来显示图片和其他 2D 视觉内容。 它提供了完整的场景图(要渲染的对象的层次结构),并提供交互支持以支持处理单击和触摸事件。 它是现代 HTML5 世界中 Flash 的自然替代品,但提供了超出 Flash 所能实现的更好的性能和像素级效果。 它非常适合在线游戏、教育内容、互动广告、数据可视化...... 任何复杂图形非常重要的基于 Web 的应用。 与 Cordova 和 Electron 等技术相结合,PixiJS 应用可以作为移动和桌面应用分发到浏览器之外。中文文档pixi中文文档(推荐)pixi中文文档(比较老旧仅做参考)官方文档pixijs官方文档pixijs官方网站已解决问题 已下记录已解决的pixijs使用中的一些问题。手机端渲染模糊 我们主要使用 resolution 和 autoDensity 来解决手机端显示渲染模糊问题,实测有...

前端,解决方案,其他 2023-10-11 AM 55次 0条

计数限流算法

 计数器算法实现起来比较简单,它的基本思路是:在单位时间内(如 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 295次 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 278次 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 316次 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 314次 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 195次 0条

代码参数注释大全

 本文主要记录代码参数注释大全方便参考查看标明作者@author@author 张三 提供给第三方使用的接口@api@api xxxx参数@param @param array 参数名 描述返回值@return@return string待办@todo@todo 这里是待办版本号@version@version 1.0.0文档继承@inheritdoc类属性@property@property array $auth 描述只读属性@property-read@property-read array $auth 描述只写属性@property-write@property-write array $auth 描述常量@const@const APP过期方法@deprecated示例@example标识类是终态, 禁止派生@final指明引用的全局变量@global标识类、方法、属性是静态的@static忽略@ignore限内部使用@internal协议@license@license MIT链接,引用文档等@link@link http://www.xxx...

PHP,其他 2022-09-02 PM 301次 0条

缓存三贱客

无处不在的缓存缓存在计算机系统是无处不在,在CPU层面有L1-L3的Cache,在Linux中有TLB加速虚拟地址和物理地址的转换,在浏览器有本地缓存、手机有本地缓存等。可见,缓存在计算机系统中有非常重要的地位,其主要作用是提高响应速度、减少磁盘访问等。高并发系统中的缓存一句话概括缓存系统在高并发系统中的地位的话就是如果高并发系统是烤羊肉串,那么缓存系统就是那一撮孜然。缓存系统的作用缓存系统在高并发系统的作用很大,在某种程度上可以说没有缓存系统很难支撑高并发场景。基于机械磁盘或SSD的数据库系统,一般来说读写的速度远慢于内存,因此单纯磁盘介质的数据库无法支撑很高的并发,可以简单认为缓存是保护磁盘数据库的重要屏障。对于一些基于LSM的存储引擎数据库来说,随机写改为顺序写速度提升很大,但是随机读仍然是个问题,所以缓存系统是很有必要的如:NessDBleveldbhbase其核心思想的核心就是放弃部分读能力,换取写入的最大化能力。缓存系统访问流程实际场景也是读多写少,看看请求是如何得到响应的,简单看下交互流程:请求到达之后,业务线程首先访问缓存,如果缓存命中则返回如果未命中则继续请求磁...

PHP,解决方案,其他 2022-06-01 PM 549次 0条

使用浙江大学访问谷歌镜像站(google)含答案

 有时候我们常常需要使用 谷歌搜索 或者 谷歌学术 来查找一些 学术资料 但是因为国内网络环境原因,我们基本上访问不到 谷歌 ,这时我们可以通过浙江大学学术网站来访问谷歌镜像站来进行 合法 搜索一些 学术资料 。 但是想要使用浙江大学访问谷歌镜像站需要验证一些问题才能使用,下面我们提供了相对应的问题答案。浙江大学谷歌镜像站地址主站地址备用地址需要验证您是否来自浙江大学 这样的验证只会出现一次,通过后您会被加入白名单,之后相同IP的访问不会再需要验证。由于手机和宽带IP经常会发生改变,您可能会多次看到这一页面。只需要回答出以下任意一个问题即可请问浙江大学内网最大的论坛中, 每天发帖量最大的版块是哪个?(全称,四个汉字)答案:心灵之约请根据以下指引找到并输入三个汉字以验证你是浙大学生(ps:我跟求是潮一点关系都没)Android: 最新版求是潮手机app左边菜单栏中, "其他"一栏的第一个项目是什么(点左上角的选项按钮调出左边栏)(三个汉字,第一个字是"水")iOS:最新版求是潮手机app中, 从左往右划动主界面调出左边栏,其中有一栏是三个汉字,图标是一个"水"字,如果你没有自定义它...

解决方案,其他 2021-12-30 PM 6757次 0条