PHP 秒杀设计

中小型公司完全的解决掉并发的方案。

服务框架

客户端 页面静态化、CDN缓存、限流 削峰、限流
接入层 负载均衡、限流 负载均衡、限流
服务层 集群化部署、本地缓存、总缓存 集群化部署、本地库存、写订单排队
数据层 读写分离 读写分离

单服务的极致性能

想要做到单服务的极致性能,就必须压榨CPU的性能,可以从以下几点入手。

  • 减少上下文切换
  • 减少阻塞式I/O
    • rpc调用
    • 磁盘读写

PHP的代码现实

class CacheController extends BaseController
{

    // Redis单例对象
    static $redisObj;

    /*
     * 连接Redis的单例
     */
    static function conRedis()
    {
        if (self::$redisObj) return self::$redisObj;
        self::$redisObj = new \Redis();
        self::$redisObj->connect('127.0.0.1',6379);
        return self::$redisObj;
    }

    /*
     * 使用Lua脚本和Redis的原子性,从而避开PHP的多线程引起的问题
     */
    private static function incUseCount()
    {
        $script = <<<eof
            local key = KEYS[1]
            local field1 = KEYS[2]
            local field2 = KEYS[3]
            local field1_val = redis.call('hget',key,field1)
            local field2_val = redis.call('hget',key,field2)
            if(field1_val>field2_val) then
                return redis.call('HINCRBY',key,field2,1)
            end
            return 0
eof;
        return self::conRedis()->eval($script,['共享信息Key','商品总库存','已售库存'],3);
    }

}
全部评论(0)
必填
必填,不公开
我信任你,不会填写广告链接
收起