Description du problème :
Une plateforme de commerce électronique lance un nouveau téléphone mobile. Chaque personne est limitée à l'achat de 2 unités, et on s'attend à ce qu'il y ait une concurrence de 10 W. Dans ce cas, si l'inventaire est déduit, il est garanti de ne pas être survendu
Solution 1
Utilisez le mécanisme de verrouillage de la base de données pour enregistrer le verrouillage, puis utilisezSELECT * from goods where ID =1 for update; UPDATE goods set stock = stock - 1;
Jedis client = jedisPool.getResource(); while(client.setnx("lock",String.valueOf(System.currentTimeMillis())) == 0){ Thread.sleep(10000); } //coding here client.del("lock")
Long TIMEOUT_SECOUND = 120000L; Jedis client = jedisPool.getResource(); while(client.setnx("lock",String.valueOf(System.currentTimeMillis())) == 0){ Long lockTime = Long.valueOf(client.get("lock")); if (lockTime!=null && System.currentTimeMillis() > lockTime+TIMEOUT_SECOUND) { client.del("lock"); } Thread.sleep(10000); } ........................... ........................... client.del("lock")
Long TIMEOUT_SECOUND = 120000L; String featureCode = "machine01"; Jedis client = jedisPool.getResource(); while(client.setnx("lock",featureCode+":"+String.valueOf(System.currentTimeMillis())) == 0){ Long lockTime = Long.valueOf(client.get("lock").substring(9)); if (lockTime!=null && System.currentTimeMillis() > lockTime+TIMEOUT_SECOUND) { client.del("lock"); } Thread.sleep(10000); } ........................... ........................... if (featureCode.equals(client.get("lock").substring(0, 8))) { client.del("lock"); }
dans l'horodatage de la valeur. Pour plus d'articles techniques liés à Redis, veuillez visiter la colonne Tutoriel Redis pour l'apprentissage !
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!