Laravel 模型间关系设置分表方法

在实际开发中经常用到分库分表,比如用户表分成 100 张,那么这个时候查询数据需要设置分表,比如 Laravel 的 Model 类中提供了 setTable 方法:

继续阅读“Laravel 模型间关系设置分表方法”

PHP写时复制(Copy On Write)

一个例子:

变量 $foo 赋值给变量 $bar,这两个变量具有相同的值,没有必要新申请内存空间,他们可以共享同一块内存。在很多场景下PHP 的 COW 对内存进行优化。比如:变量的多次赋值、函数参数传递,并在函数体内修改实参等。

继续阅读“PHP写时复制(Copy On Write)”

一致性哈希算法及其在分布式系统中的应用

摘要

本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用。首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题;接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题。

继续阅读“一致性哈希算法及其在分布式系统中的应用”

Laravel 依赖注入源码解析

在 Laravel 的控制器的构造方法或者成员方法,都可以通过类型约束的方式使用依赖注入,如:

这里 $request 参数就使用了类型约束,Request 是一个类:\Illuminate\Http\Request,表示参数必须是这个类或子类。

本文通过分析 Laravel 的源码,看为什么方法中不需要传入实例就可以直接使用 Request 呢?只是框架自动帮我们实例化并传参了。

继续阅读“Laravel 依赖注入源码解析”

为什么 Laravel 会重复执行同一个队列任务?

在 Laravel 中使用 Redis 处理队列任务,框架提供的功能非常强大,但是最近遇到一个问题,就是发现一个任务被多次执行,这是为什么呢?

先说原因:因为在 Laravel 中如果一个队列(任务)执行时间大于 60 秒,就会被认为执行失败并重新加入队列中,这样就会导致重复执行同一个任务。

继续阅读“为什么 Laravel 会重复执行同一个队列任务?”

软件设计思想:先整体轮廓,再完善细节部分

《画家与黑客》一书作者在谈到软件设计思想的时候很有启发,尤其是做需求,如果你一开始就纠结细节而看不到整体,你可能花费很多时间还达不到预期的效果。要先有一个整体的轮廓,再完善各个部分和细节,或做出调整,这样你一开始就掌握全局,这应该是正确的方式。作者拿了印刷,雕刻,绘画,油画等艺术领域的例子来说明软件开发也应该如此。

继续阅读“软件设计思想:先整体轮廓,再完善细节部分”