PHP7多进程处理redis队列问题
Contents
一直在研究PHP7多进程编程, 在使用的过程中遇到了一些问题.
问题
redis 句柄问题
问题介绍
在使用PHP框架YII2进行多进程编程时, 在循环从redis list弹出数据时,
分析
问题大概率出现在多个进程使用同一个redis 句柄的问题, 比如: A进程获取了redis list的一个数据 B进程再去获取同一个数据时, 会获得 TRUE C进程又去获取同一个数据, 就只能获得redis的数据存储号 (这个地方是我猜测)
解决
考虑好情况后, 在代码中
总结
必须每个进程单独创建redis/mysql连接,其他的存储客户端同样也是如此。原因是如果共用1个连接,那么返回的结果无法保证被哪个进程处理。持有连接的进程理论上都可以对这个连接进行读写,这样数据就发生错乱了。
所以在多个进程之间,一定不能共用连接
多进程并发写入mysql遇见死锁的问题
问题介绍
在使用PHP多进程编程的过程中, 有次发现在并发多进程写入过程中, 出现死锁情况
分析
在网上找到了问题的情况
解决
总结
我的处理方式是, 先用索引查询, 然后再用主键进行修改, 这样确实不会出现死锁的问题, 但是又设计到了脏数据