java - mysql如何限制每天insert的次数?
大家讲道理
大家讲道理 2017-04-18 09:07:46
0
6
507

需求是这样的:
用户每天最多领取礼包3次,每次insert一条记录,但是在并发的情况下会超出3次,如果解决?
有个已知的方法如下,但是并发下会产生死锁

INSERT INTO t_test (gift_id, user_id, `date`) SELECT v_gift_id, v_user_id, v_date FROM dual WHERE not exists (select * from t_test where `user_id` = v_user_id and `date` = v_date GROUP BY `user_id`, `date` HAVING count(*) > 2);
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(6)
PHPzhong

Comme l'a dit @junze, cela se fait généralement avec redis.

Par exemple, stockez le nombre de fois pour chaque utilisateur redis dans insert. Si le format key est user:count

Vérifiez d'abord la valeur de count à chaque fois, si elle est inférieure à 3, effectuez l'insertion et jugez le résultat de insert Si l'insertion est réussie, exécutez key pour user:count incr. , incr user:count, et l'écriture échoue incr n'est pas exécutée.

Cela peut éviter une concurrence élevée dépassant 3.

En même temps, vous pouvez régler le délai d'expiration key pour cela expire user:count 60*60*24 à 1 jour. Après un jour, la clé sera supprimée et réinitialisée le lendemain.

PHPzhong

Utilisez le type de chaîne de Redis pour compter. Redis prend mieux en charge la concurrence élevée

小葫芦

MySQL ne peut pas faire cela à votre place. Vous pouvez mettre le nombre de paquets cadeaux de l'utilisateur dans le cache, ajouter des constantes comme clé de cache en fonction de l'ID de l'utilisateur, y stocker le numéro et le récupérer du cache à chaque fois. il est inséré. Retirez le nombre de fois et jugez s'il est inférieur à votre numéro, continuez. Si ce n'est pas inférieur à votre numéro, continuez. Si vous continuez, le nombre sera augmenté de un après insertion et placé dans le cache.

迷茫

Il est recommandé de le faire au niveau de la couche logique

巴扎黑

Mysql ne semble pas avoir ce mécanisme, et j'ai l'impression que ce contrôle est aussi un contrôle logique

洪涛

Si vous devez utiliser MySQL pour le faire, utilisez des transactions pour vous en assurer.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal