Récemment, j'ai besoin d'écrire un système d'inscription qui n'a pas une grande concurrence, mais il est toujours possible que plusieurs personnes s'inscrivent en même temps. Étant donné que l'enregistrement implique une commande, si aucun verrouillage de ligne ou de table n'est effectué, la situation suivante se produira :
Exemple :
Seul l'utilisateur A s'est enregistré dans le système actuel et la commande est 1, enregistré est (A, 1);
À un certain moment t, l'utilisateur B, l'utilisateur C et l'utilisateur D se sont enregistrés en même temps. Le backend a reçu les demandes d'enregistrement de B, C et D presque à. en même temps, il a donc interrogé le formulaire d'inscription et a constaté que, actuellement, il n'y a que (A, 1), alors insérez (B, 2), (C, 2), (D, 2) dans le formulaire d'inscription pour obtenir le résultat :
(A, 1)
(B, 2)
(C, 2)
(D, 2).
La première chose à laquelle j'ai pensé, c'est : je n'enregistre pas la commande, j'enregistre l'horodatage d'insertion. Dans ce cas, c'est
(A, ta)
(B, tb) (C, tc)(D, td). Il est presque impossible que ta, tb, tc, td soient égaux. Recommandations associées : "Tutoriel ThinkPHP"
Cependant, il y a trois problèmes qui ne peuvent pas être résolus en procédant ainsi : 1. être égal. , la probabilité est très faible ; 2. Ce n'est pas intuitif et doit être trié par horodatage 3. 40 personnes, et indiquez immédiatement si l'inscription actuelle est supérieure.$User->lock(true)->save($data);// 使用悲观锁功能
M()->query("lock tables yourtable write"); // TODO // your code M()->query("unlock tables");
??-??-?? 10:00:00 1 ??-??-?? 10:00:00 2 ??-??-?? 10:00:00 3 ??-??-?? 10:00:00 4 ??-??-?? 10:00:01 5 ??-??-?? 10:00:01 6 ??-??-?? 10:00:01 7 ??-??-?? 10:00:01 8 ??-??-?? 10:00:02 9 ??-??-?? 10:00:02 10 ??-??-?? 10:00:02 11 ??-??-?? 10:00:02 12 ??-??-?? 10:00:02 13 ??-??-?? 10:00:02 14 ??-??-?? 10:00:03 15 ??-??-?? 10:00:03 16 ??-??-?? 10:00:03 17 ??-??-?? 10:00:05 18 ??-??-?? 10:00:06 19 ??-??-?? 10:00:07 20 ??-??-?? 10:00:08 21 ??-??-?? 10:00:10 22 ??-??-?? 10:00:15 23 ??-??-?? 10:00:17 24 ??-??-?? 10:00:19 25 ??-??-?? 10:00:19 26 ??-??-?? 10:00:24 27 ??-??-?? 10:00:25 28 ??-??-?? 10:00:34 29 ??-??-?? 10:00:35 30 ??-??-?? 10:00:38 31 ??-??-?? 10:01:06 32 ??-??-?? 10:01:11 33 ??-??-?? 10:01:11 34 ??-??-?? 10:01:17 35 ??-??-?? 10:01:18 36 ??-??-?? 10:02:27 37 ??-??-?? 10:02:38 38 ??-??-?? 10:02:39 39 ??-??-?? 10:02:57 40
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!