redis秒杀(PHP版本)
以下是一个使用PHP实现Redis秒杀的基本示例。这个示例假设你已经有了Redis服务器和PHP的Redis扩展。
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$productId = 123; // 假设的商品ID
$stockCount = 10; // 假设的商品库存
$userKey = 'user:' . $productId; // 用户key
$lockKey = 'lock:' . $productId; // 锁key
// 设置锁,避免并发写入
$isLock = $redis->setnx($lockKey, 1);
if ($isLock) {
$redis->expire($lockKey, 5); // 设置锁的过期时间为5秒
$stock = $redis->get($productId); // 获取当前库存
if ($stock > 0) {
// 减少库存
$redis->decr($productId);
// 记录用户
$redis->lpush($userKey, date('Y-m-d H:i:s'));
echo "秒杀成功";
} else {
echo "库存不足";
}
// 释放锁
$redis->del($lockKey);
} else {
echo "服务器繁忙,请稍后再试";
}
?>
这段代码使用了Redis的SETNX
命令来实现锁机制,避免高并发下的库存超卖。同时,使用了DECR
命令来原子性地减少库存。这个例子非常基础,实际应用中还需要考虑更多的细节,比如异常处理、事务的控制、用户体验等。
评论已关闭