在php的事务处理的时候,用不用加锁,事务处理本身有没有加锁?
答案:2 悬赏:40 手机版
解决时间 2021-02-03 08:55
- 提问者网友:捧腹剧
- 2021-02-02 22:54
本人是需要做一个虚拟账户的买东西的功能。在买东西的时候是需要判断余额是否足够,然后再操作账户的。那么是否能在判断余额后锁定表单,数据库数据修改后再解除锁呢?
最佳答案
- 五星知识达人网友:躲不过心动
- 2021-02-02 23:32
建议用 行锁+事务
select * from table where id=‘92’ for update
这样的话 只有获得本次数据库链接的资源号的 php 程序可以对本条记录进行读取操作,其他程序如果也有读取的话会等待锁定该行的程序执行更新后,才能读取,
另外 貌似对数据库引擎有要求 mysql 的话 innodb 可以这样玩。
select * from table where id=‘92’ for update
这样的话 只有获得本次数据库链接的资源号的 php 程序可以对本条记录进行读取操作,其他程序如果也有读取的话会等待锁定该行的程序执行更新后,才能读取,
另外 貌似对数据库引擎有要求 mysql 的话 innodb 可以这样玩。
全部回答
- 1楼网友:長槍戰八方
- 2021-02-03 00:25
你的问题是:
1. 很多文件,想多进程处理,以提高效率,缩短总处理时间
2. 这些进程只需要读文件,不需要写
3. 对每个文件,只要有一个进程处理过它就可以了,没有多个进程都必须处理它的需求
你的需求其实是分治,将文件分为多个组(不一定要在文件系统上新建目录),然后分而治之,这种情况不需要用锁.
锁不是用于这种场景的,锁用于下面这种场景:
1. 文件file.txt里面记录了user1的销售额和user2的销售额,user1+user2的销售总额
2. 进程php1负责写入user1的数据,进程php2负责写入user2的数据,两个进程各读出销售总额显示给user1,user2
建议你这样解决:
1. 启动多个php进程(nohup php your_script.php your_dir &)
2. 每个php进程赋予一个序号(假设4个进程,那就0,1,2,3),可以通过对进程自身的pid模运算取余数得到,也可以在启动进程的时候通过命令行传入,随你了
3. 每个进程在处理文件前先对文件名做crc32()运算,模一下进程总数: crc32(file_name) % 4, 取模结果与此进程的序号相等就读取内容并处理,不相等就跳过
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯