PHP 疑难杂症:解决守护进程时 Redis 假死

背景:公司业务有一个常驻后台运行的守护进程。在这个守护进程当中使用了 Redis List 结构保存业务数据进行队列消费。结果运行过程中,有时候半个月,有时候几个月就会突然不再消费队列里面的数据。当时怀疑是 PHP 不适合编写这种常驻后台运行的守护程序。后来,我们发现进行心跳检测之后,程序的稳定性大大提高。至今没...

PHP 开发实战:Redis 分布式锁实现

锁在我们的日常开发可谓用得比较多。通常用来解决资源并发的问题。特别是多机集群情况下,资源争抢的问题。但是,很多新手在锁的处理上常常会犯一些问题。今天我们来深入理解锁。在本文最后,博主也会放出最佳的 Redis 分布式锁的 PHP 代码。一、Redis 锁错误使用之一我曾经见过有的项目把查询结果存储到 Redis ...

PHP 金融类项目开发总结

博主目前在金融项目开发与维护的路上深耕了快两个年头了。刚入这个行业的时候非常惶恐。一是因为自己以前只在游戏与电商公司工作没有金融类的经验;二是因为公司的用户规模目前在中国算中等规模。资金体量在百亿级别,用户规模在百万以上。如今,两年过去了。自己也掌握了一些开发技巧。今天就跟大家一起分享这些经验。受限于本人眼界,文...

PHP 加密:AES & RSA

最近两年一直从事与金融相关项目的开发与维护。但是,关于 PHP 加密解密的最佳实践,网上没有人给出一个完美的总结。恰逢最近看了《图解密码技术》一书,对 PHP 加解密有了更深刻的认识。为了避免各位看枯燥的文字理论,开篇我就把总结给出:AES 是对称加密、RSA 是非对称加密。截止目前为止,对称加密用 AES 算法...

代码调试技巧:PHP 代码调用栈

背景:我们经常会阅读别人的代码。特别是维护旧项目。有些项目代码写得杂乱,还稍带着用了一些冷门特性。或者,项目本身很复杂,又急于想快速搞定代码执行流程的时候。我们此时就非常想知道 PHP 代码的调用栈。博主曾经多次帮人快速定位错误,排查指定位置的代码为何会调用一些功能。基于以上原因,今天我们就来讲一讲在 PHP 项...

微服务之 PHP 浅尝 Thrift

微服务是用来解决海量请求的一种分布式架构方案。一、Monolithic 架构在讲 Thrift 之前,我们先来认识一下传统系统构架。我们把上图这种传统架构称为:Monolithic 架构。Monolithic 架构是目前中小型系统常用的构架方案。1.1)Monolithic 架构优缺点:它的优点是:开发简单直接,...

浅谈 PHP 项目四层架构

如今 PHP 项目开发离不开框架。主流的框架 Laravel、Yaf、YII 等都属于 MVC 类型的框架。如此多的框架,我们该如何抉择。在项目开发中我们应该怎样划分项目的结构就成了一个待讨论的问题。一、PHP 第一代开发模式:混编相信很多 PHP 开发者刚开始学习 PHP 的时候,都是把 HTML 与 PHP ...

服务器时差问题引发的问题思考与解决

背景:博主目前所在的公司出现了一个特别严重的情况:多台 Web 服务器之间的时钟不同步。导致数据库的时钟与服务器时钟之间存在时差。刚好我们的活动要根据一个用户签到来送福利。一个用户一天只能签到一次。用户在凌晨前面几秒签到了。但是,Web 服务器却判定为了第二天签到。数据库的时间却在昨天。导致最终福利赠送环境出现了...

设计模式优劣漫谈

《设计模式》这本书从 1994 年发布。此书作者是由四位作者共同编写。所以简称 Gof (“Gang of Four”,“四人帮”)。此书被很多开发者视为圣经。是指导开发的一本难得之书。博主自从工作以来,就总会不经意从身边的同事口中提到设计模式。包括我们的 PHP 官方文档当中,也提及了单例、工厂两种模式。最近看...

区块链接&比特币&电子货币加密

最近几年比特币火起来之后。我们通过它知道了一种技术:区块链。所以,博主也时刻保持对这个技术的关注。网络上对这个技术写得最好的莫过于我们的阮教授的博客了。区块链入门教程:http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html比特币入门教程:ht...