SAE如何实现php锁?
我在sae上有一个应用, 但是用户注册时我需要进行锁表操作, 但是sae并没有给应用锁表的权限, 所以我希望自己实现个锁来管理用户注册防止出错, 不过sae的临时目录不是请求间共享的, 而且代码空间只读, 在这种情况下还能怎么实现锁呢?
izane
9 years, 6 months ago
Answers
为什么要锁表呢? 最终的目的是“用户注册防止出错”,直接用事务就可以搞定了。
------没事务怎么办? SAE没有提供InnoDB,只能用MyISAM,那可以利用主键的唯一性搞个锁:
-
创建一个
locked_tables
表来保存已经锁住了的表,如下:
CREATE TABLE `locked_tables` (
`table_id` int(11) NOT NULL,
PRIMARY KEY (`table`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
其中
table_id
是表的ID,自行分配,比如
test
这张表分配为
1
。
-
锁表,使用
insert
插入要锁的表的ID就可以了,比如锁test
表:
INSERT INTO `locked_tables` ( `table_id` ) VALUES ( 1 ); -- test先前分配的ID是1
如果
insert
执行成功,则锁表成功;否则一般会因为
Duplicate entry '1' for key 'PRIMARY'
而失败,说明有人已经锁过这张表了,则应等待此表被释放。
-
释放锁,使用
delete
删除即可,比如还是test
表:
DELETE FROM `locked_tables` WHERE `table_id` = 1
大体思路是这样,具体代码偶就没有时间去搞了,请自行实现。
我de永恒
answered 9 years, 6 months ago