lock(true)->save($data);"."/> lock(true)->save($data);".">
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);// 使用悲观锁功能Mais le système cible doit effectuer une série d'opérations, donc le code de table de verrouillage utilisé est :
M()->query("lock tables yourtable write"); // TODO // your code M()->query("unlock tables");L'effet réel est en cours L'effet n'est pas mauvais [la vraie date a été filtrée] :
??-??-?? 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!