PHP多商城系统开发制作——登录下单

整站伪静态:增强搜索引擎的友好度,对于后期网络营销有比较明显作用

通用帐户登陆:让您的可以使用微信号、QQ号码、支付宝、淘宝等社会化网络账号登录您的网站



抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:

1 高并发对数据库产生的压力

2 竞争状态下如何解决库存的正确减少("超卖"问题)

下单系统:

/**
* Class redisConcurrent
*/
class RedisConcurrent
{
/** lock key
* @var string
*/
public $_lockKey = 'redis_lock';
/** Redis Class
* @var Redis
*/
private $_redis ;
/** ip
* @var mixed|string
*/
private $ip ='127.0.0.1' ;
/** port
* @var string
*/
private $port = '6379' ;
/** init redis connect
* redisConcurrent constructor.
* @param array $config
*/
public function __construct( $config = [] )
{
if(!empty($config)) {
if(isset($config['ip'])) {
$this->ip = $config['ip'];
}
if(isset($config['port'])){
$this->ip = $config['port'];
}
}
/**
* Redis连接信息可以用原生,也可以用其它的框架集成
*/
$this->_redis = new Redis();
$this->_redis->connect($this->ip,$this->port);
}
/** 锁定
* @param int $intTimeout 默认过期时间(避免死锁)
* @return bool
*/
private function lock($intTimeout = 8) {
#新版set,已经集成了大多数集成操作
$strRet = $this->_redis->set($this->_lockKey, time().rand(10000,99999).rand(1000,9999).rand(100,999), 'ex', $intTimeout, 'nx');
if($strRet) {
return true;
}else{
return false;
}
}
/** 解锁
* @throws \Exception
*/
private function unlock()
{
$strRet = $this->_redis->del($this->_lockKey);
if($strRet) {
return true;
}else{
if($this->_redis->get($this->_lockKey)) {
return false ;
}else{
return false ;
}
}
}
/**
* 业务相关的key,可以是库存,物品数等
*/
const ORDER_KEY = 'order_num';
/**
* 用户相关的key
*/
const USER_KEY = 'user_num';
/** Redis下单
* @param int $num 下单个数
* @param string $userId 用户ID
*
* 场次是为了方便异常处理,方便数据查找
* @param string $bout 商品场次 => order_num:1 , order_num:2
* @return bool
* @throws Exception
*/
public function order( string $userId ,string $bout = '1' ,int $num = 1)
{
$orderKey = self::ORDER_KEY.':'.$bout ;
$userKey = self::USER_KEY.':'.$bout ;
//此方法不具备原子性 并发处理是不能做条件判断
//$len = $this->_redis->llen();
#实际为n+1次触发完结,这里只做Redis自减
$check = $this->_redis->lpop($orderKey);
if(!$check){
#当前order_num已经为0!
//自动补货为 100 ,$bout有一定的处理规则,不能乱传
self::autoBuild(100,$bout);
return false ;
}
//特殊处理,避免n+1次的情况
$len = $this->_redis->llen($orderKey) ;
if($len == 0) {
//自动补货为 100 ,$bout有一定的处理规则,不能乱传
self::autoBuild(100,$bout);
return false ;
}
//添加用户数据
$result = $this->_redis->lpush($u

竞拍系统:在现在产品管理系统上选择相关的产品,设置拍卖开始到结束时间,设置起拍价格、一口价、加价幅度、保证金等参数,前台会员就可以进行商品的竞价了,价高者得。

团购系统:在现有的产品管理系统上选择需要团购的商品,设置开始到结束时间、保证金、限购数量、赠送积分、价格阶梯以及整个活动的说明,完成后所有的会员即可进行团购活动。

希望这编文章可以帮助到真正有需要的朋友,如果各位对于互联网开发这块还有什么问题或者有这方面的疑惑,都可以随时私信或微信kjwenlc我一起交流,一起进步哈~
同时,感谢大家的支持与阅读,如果觉得不错欢迎点赞和分享,谢谢!

你可能感兴趣的:(php)