安全存储秒杀
秒杀活动通常指在极短时间内,大量用户抢购有限数量的商品或服务。由于参与人数众多且时间短暂,系统需要承受极高的并发压力。安全存储秒杀的核心在于确保在高并发环境下,数据的准确性、一致性和系统的稳定性。
import redis
import time
r = redis.Redis(host='localhost', port=6379, db=0)
def seckill(product_id, user_id):
key = f"stock:{product_id}"
stock = r.get(key)
if stock is None or int(stock) <= 0:
return "秒杀失败,商品已售罄"
# 使用WATCH命令监控stock键的变化
with r.pipeline() as pipe:
while True:
try:
pipe.watch(key)
current_stock = int(pipe.get(key))
if current_stock <= 0:
return "秒杀失败,商品已售罄"
# 开启事务
pipe.multi()
pipe.decr(key) # 减少库存
pipe.execute() # 执行事务
# 记录秒杀成功信息(此处可插入数据库操作)
print(f"用户{user_id}秒杀商品{product_id}成功")
return "秒杀成功"
except redis.WatchError:
continue # 若监控的键被其他客户端修改,则重试
# 模拟秒杀场景
for i in range(100):
threading.Thread(target=seckill, args=(1, i)).start()
安全存储秒杀是一个涉及多方面技术的复杂问题。通过合理利用并发控制机制、优化系统架构及数据库设计,可以有效应对高并发场景下的挑战,确保活动的顺利进行。