= =偶然看到篇文章,恰巧之前碰到过,当时是用字符串搞定的,按兴趣跟进,发现有必要总结一下其他方式。原因:PHP7.1后php.ini里的serialize_precision默认为17,低于15就会避免问题发生。所以可以选择修改php.ini,也可以在php文件中使用:

ini_se[......]

Read more

高并发时,会出现php-fpm线程不够用的情况,此时一般需要调整backlog,之前也分析过:如果worker进程不够用,master进程会prefork更多进程,如果prefork达到了pm.max_children上限,worker进程又全都繁忙,这时master进程会把请求挂起到连接队列b[……]

Read more

以下内容全文转载自:无风的雨写的php 读取超大文件PHP开发很多时候都要读取大文件,比如csv文件、text文件等。这些文件如果很大,比如10个G。这时,直接一次性把所有的内容读取到内存中计算不太现实。遇到这种情况,往往觉得PHP太弱,实则不然。利用生成器(关键字yield)就能解决。[……]

Read more

用到Redis。最初的逻辑:代码里判定只要token失效就会取toekn更新到Redis中。问题:显而易见,分布式并行后,可能同时有两台或以上同时更新,导致其他设备取回的token失效,然后循环往复,将API次数耗尽。经浩哥指点优化后的逻辑:抽离token更新逻辑到定时脚[……]

Read more

有个需求,用片名做数组键名key,因为涉及到了一个分数字段的排序,发现使用array_multisort排序后,结果出现了0键名的奇怪数据。经过诊断,发现是2046这部影片名造成的问题。查了下函数说明,确认了原因:定义和用法array_multisort() 函数返回排序数组。您可以[……]

Read more

有个系统,前端有个数据查询功能,原始逻辑大概是这样的:前台指定查询开始和结束时间,后台调用MongoDB,提取时间范围内的全部数据直接吐出csv格式文件。当初估计没考虑数据量太大的情况,后来随着驻地的用户量上升,每日的数据量都变的很庞大,问题随之而来~系统默认慢查询的触发时间是3秒,[……]

Read more

举个栗子:一个系统,有个历史add接口,受最大数量限制,使用memcache和mongo。V4.0.1之前逻辑:

  1. 从cache取全部数据
  2. 按最大数量限制对数组做增改逻辑
  3. 如果大于24小时,则写入mongo
  4. 写入cache

统计次数:

  • cache取1
  • cach[……]

Read more

测试同学压测性能一般,所以自己写了个并发的测试,发现每次超过500,都是几乎必定511后出现空返回~经过查找,找到个靠谱的解释:如果worker进程不够用,master进程会prefork更多进程, 如果prefork达到了pm.max_children上限,worker进程又全都繁忙,[……]

Read more