水平分表自增ID解决方案(队列)

队列方式

使用队列服务,如redis、memcacheq等等,将一定量的ID预分配在一个队列里,每次插入操作,先从队列中获取一个ID,若插入失败的话,将该ID再次添加到队列中,同时监控队列数量,当小于阀值时,自动向队列中添加元素。
这种方式可以有规划的对ID进行分配,还会带来经济效应,比如QQ号码,各种靓号,明码标价。如网站的userid, 允许uid登陆,推出各种靓号,明码标价,对于普通的ID打乱后再随机分配。


__construct();
    }
    public function __construct()
    {
        $this->r = new Redis();
        $this->r->connect('127.0.0.1', 6379);
    }
    function set_queue_id($ids)
    {
        if (is_array($ids) && isset($ids)) {
            foreach ($ids as $id) {
                $this->r->LPUSH('next_autoincrement', $id);
            }
        }
    }
    function get_next_autoincrement()
    {
        return $this->r->LPOP('next_autoincrement');
    }
}
$createid = array();
while (count($createid) < 20) {
    $num = rand(1000, 4000);
    if (!in_array($num, $createid)) {
        $createid[] = $num;
    }
}
$id = new common();
$id->set_queue_id($createid);
var_dump($id->get_next_autoincrement());

来源

你可能感兴趣的:(水平分表自增ID解决方案(队列))