PHP
Vencenty
不主动,不拒绝,不负责
展开
-
缓存穿透解决方案
这时候有个非常简单的办法,不管请求数据是否存在,你都要写入缓存一个唯一标识,比如0,查不到数据你也会写入标识,下次别人重复请求接口,他拿到的是缓存数据,这时候代码中可以判断是否有用户信息,如果没有用户信息,只有防缓存穿透的标识,这时候你可以扔报错或者其他逻辑。缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。假设缓存数据库是Redis,比如我们查询用户45709823的用户信息,原创 2022-08-19 11:02:49 · 310 阅读 · 0 评论 -
PHP多线程
PHP多线程原创 2022-08-18 15:10:58 · 115 阅读 · 0 评论 -
PHP nginx header配置和 php header设置会冲突
踩到一坑,记录一哈nginx有一个配置php代码中还有一个配置然后就double了,前端调用会出错跨域的配置尽量往nginx搞,不要代码一套,nginx一套原创 2022-02-14 16:26:26 · 1380 阅读 · 0 评论 -
PHP线段填充算法
线段填充算法最近做ABTest平台,每个实验会独占坐标轴的一段长度,假设C实验坐标起止点为[16,20](总长度5),当C实验停止后,假设来了F实验,F实验的所需要占坐标轴的长度为 15,我需要从C空出来的坐标开始填充,因为F实验大于C空出来的总长度,所以需要把F实验拆成N段,获取F实验的所有拆分的坐标起止点~,大概这么个意思吧,自己记录一下$arr = [ [0, 0], [60, 62], [5, 10], [38, 45], [89, 92],原创 2021-10-11 20:41:58 · 163 阅读 · 0 评论 -
版本语义化说明
1. ^2.2.1 指定的主版本号下,所有更新的版本,匹配 2.2.3, 2.3.0;不匹配1.0.3, 3.0.1 2. ~2.2.1 知道的主版本号.次版本号下,所有更新的版本,匹配 2.2.3,2.2.9;不匹配2.3.0,2.4.53. >=2.1 版本号大于或等于2.1.0,匹配2.1.2,3.1;不匹配 2.0,1.04. <=2.3 版本号小于等于2.2.0,匹配1.0.0,2.1.2;不匹配 2.3,2.4.15. 1.0.0 - 2.0.0 版本号在1.0原创 2021-09-10 14:53:25 · 85 阅读 · 0 评论 -
PHP获取函数所有调用栈(debug_backtrace)
// TODOdebug_backtrace想起来再写原创 2020-04-14 17:06:53 · 1650 阅读 · 0 评论 -
PHP如何在json_encode的时候返回空对象{}而不是数组[]
前端用TypeScipt写的,后端在返回格式的时候最好格式统一掉比如PHP中经常犯的一个错误就是本来kv的结果,如果没有数据,可能塞个空数组就返回了,这样前端拿到以后就是像下面error_demo的数据一样,格式不统一,就会非常蛋疼了解决方法也非常简单, 想要输出空对象直接 new stdClass即可,具体看下面代码<?phpclass ResponseMessage{ public function errorDemo() { $results = [原创 2021-03-10 11:30:02 · 997 阅读 · 0 评论 -
PHP处理事务嵌套
Mysql是不支持事务嵌套的本来你定义了一个方法,如下function method1() { try { //开启事务 // 代码逻辑 // 提交事务 } catch(Exception $e) { // 回滚事务 }}上面的method1方法完美的支持了你的业务场景,随着业务场景越来越复杂,你同事也写了类似的method2,method3,最后你的BOSS要求你在一个接口里面一次性完成method1, method2,method3的功能,没有办法原创 2021-02-25 16:25:07 · 1550 阅读 · 0 评论 -
PHP轻量级延时队列任务实现以及可能存在的问题点
<?php$redis = new Redis;$redis->connect('127.0.0.1');$key = "order:delayqueue";function generateOrderNo(){ return '订单号:' . mt_rand(100000, 999999);}// 一秒后执行$redis->zAdd($key, ['NX'], time() + 1, json_encode(['orderNo' => generat原创 2021-02-23 16:31:38 · 208 阅读 · 2 评论 -
Socket编程TCP协议粘包问题
Socket编程中,基于TCP协议的通信有时候会发生粘包问题,原因大家自行百度,已经收到这种问题应该了解粘包产生的原因哈TCP协议是可靠的字节流式协议,字节流可以理解为是水流,数据在网络中像水流一样传输,所以纯粹发送字符串一旦TCP底层发生粘包情况,数据表意将产生错误,比如你想发送,我今天发现一特有意思的事 这句话TCP可能给你拆成我今,天发,现一特有意,思的,事儿,只是举个简单例子哈,我们怎么处理这种问题呢,有多种方案一个是根据EOF拆分,这个EOF就是自定义的一个特殊符号,比如我们现在就约定.原创 2020-09-30 22:29:10 · 196 阅读 · 0 评论 -
PHP员工考勤字符串算法
今天去面试,要求现场写一个算法,如上图,会议室里面试官+领导+我,还用我的笔记本连接了投影仪。。。我以为就是监控我不让我查百度或者不让查资料啥的,然后头皮发麻,原生PHP写吧,于是有了下面的方案function checkRecord($string){ $length = strlen($string); $i = 0; // 缺勤统计数 $absentCo...原创 2020-04-20 21:08:29 · 353 阅读 · 0 评论 -
PHP概率抽奖算法(空间换时间)
/** * 抽奖算法, * @param array $data * $array = [ * 'a' => 1, * 'b' => 1, * 'c' => 2, * 'd' => 4, * 'e' => 3, * ]; * @return mixed ...原创 2020-04-16 19:51:20 · 144 阅读 · 0 评论 -
PHP foreach中的问题
使用foreach总结下面几个问题,欢迎补充foreach不支持顺序输出数组代码如下:$commonArray = [1, 2, 3, 4, 5];$shuffleArray = [];$shuffleArray[1] = 1;$shuffleArray[2] = 0;$shuffleArray[0] = 9;$shuffleArray[3] = 2;$shuffleArra...原创 2020-04-15 15:37:50 · 248 阅读 · 0 评论 -
PHP 值拷贝和引用拷贝
请出一个全国人民都认识的非著名人物,小明我们给小明起个好养活的名字,叫狗蛋小明有个双胞胎兄弟,叫阿发阿发是小明的值拷贝,狗蛋是小明的引用拷贝我让狗蛋把裤子脱了,那就是指挥小明脱裤子呗, 我让阿发把裤子脱了,那是阿发脱裤子,并不是小明,对吧上代码: // 这是小明$xiaoming = "小明";// 这是小明的小名狗蛋,这是引用拷贝$goudan = &$xiaomi...原创 2020-04-15 17:17:44 · 316 阅读 · 0 评论 -
PHP中的陷阱【浮点数】
//TODO有空写,太忙了,主要是懒,刷微博抖音多好原创 2020-04-14 17:11:26 · 178 阅读 · 0 评论 -
PHP中的陷阱【函数】
TODO原创 2020-04-14 17:08:38 · 131 阅读 · 0 评论 -
PHP检测文件编码并转为相应的编码
检查目标编码是否为UTF-8,不是的话转为UTF-8 $targetEncoding = 'UTF-8'; $encoding = mb_detect_encoding($client->body, array("ASCII", "UTF-8", "GB2312", "GBK", "BIG5")); if ($encoding != $targetEncoding) ...原创 2020-03-31 15:36:29 · 152 阅读 · 0 评论 -
brPop和blPop,让Redis帮你阻塞进程
brpop两个参数,第一个要出队的Key,第二个是Timeout 阻塞延时,如果填写0,那么默认是永久阻塞,当List有值的时候,会立刻pop出来brpop意思 block right pop 阻塞式右侧出队blpop意思 block left pop 阻塞式左侧出队说完了,上代码代码一$redis = new Redis();$redis->connect('127.0.0...原创 2020-03-26 15:21:45 · 8185 阅读 · 3 评论 -
基于Laravel框架封装的Api快速增删改查的方法
工作中难免要写非常多的增删改查的逻辑,Laravel的查询构造器写起来已经很舒服了,但是仍然避免不了要写大量的重复代码,比如我们要实现一个最基本的用户模块的管理功能,起码要写下面这么多接口用户列表接口(分页)用户添加接口可选选项 用户可选的附加属性,例如用户组,权限等用户提交添加接口 // 保存新增的用户用户编辑接口 // 这里需要载入用户的数据,以及用户的相关属性,例如它属于哪个用户组...原创 2020-03-25 18:00:17 · 1872 阅读 · 0 评论 -
PHP监听文件变化并执行后续操作
最近在学C语言,Linux下需要每次vim写完以后:w保存然后 gcc xx.c && ./a.out 实在是太麻烦了,就想着能不能简单一点,我写个脚本监听某个目录,当我写完C语言文件的时候,保存的时候,直接触发对应的函数,用while循环写了个监听的脚本,本来想用Swoole_timer和inotify扩展写的,想了想While也够用了,那就直接这么干了,废话不多说,直接上代码...原创 2020-03-18 23:50:37 · 1652 阅读 · 2 评论 -
PHP PDO查询出来的结果都是字符串该怎么办
数据库里存储Id(int), height(float)这种类型的数据,当我们从数据库里取出数据的时候发现,全部被转为了string类型,那么可以简单通过设置下面这个属性来解决PDO::ATTR_EMULATE_PREPARES = false来解决new PDO('mysql:host=127.0.0.1;dbname=test', 'root', '*****', [ PDO::AT...原创 2020-03-09 14:59:50 · 919 阅读 · 0 评论 -
PHP 判断当前日期是否是法定节假日或者休息日
1.代码如下 $date = date("Ymd",time()); $url = "http://api.goseek.cn/Tools/holiday?date=".$date; $res = file_get_contents($url); //json格式,前端需要直接提供 $res = json_decode($res,true); //数组格式,方便后端判断 ...转载 2019-12-16 10:20:20 · 2075 阅读 · 1 评论 -
Laravel-admin的Pjax问题
Laravel-admin的Pjax问题来龙去脉发现问题总结功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入来龙去脉...原创 2019-12-02 13:48:24 · 3761 阅读 · 0 评论 -
PHP array_reduce的用法
一开始对array_reduce方法不太明白,然后换了一种实现发现好理解很多,就比如下面实现的这个 custom_array_reduce函数,其实跟 array_reduce方法实现的结果是一样的$arr = [1, 2, 3];function custom_array_reduce($arr, callable $callback, $init = null){ $ret =...原创 2019-07-09 18:15:59 · 2500 阅读 · 0 评论 -
swoole_server 接收不到 swoole_client发送的数据
在使用swoole的client的时候,如果Swoole\Client不能发送给server数据,请检查一下Server类型,HTTP_SERVER和WebSocketServer都不支持 onReceive回调,原创 2019-05-11 17:42:59 · 1759 阅读 · 0 评论