看到阿里这种解决秒杀场景的办法,我突然想到另一种完全不同的方案,就是用 lealone 的列锁功能。
假如某件商品的库存是1000件,那就建一个表,用商品 id 作为主键,然后再建100个字段,每个字段存10件,在应用端预先构建100条 update 语句,如果 id 是10,这些 update 语句像这样 update t set fx=fx-1 where id=10 and fx>0,若执行后影响行数是0就剔除它然后取下一条,这样不用加 hint 也能实现秒杀场景。
因为 lealone 支持列锁,所以上面的100条更新语句并发执行时更新的是不同字段,所以完全不阻塞不加锁。除非多个客户端用了同一条,就算如此,冲突的概率也比用行锁时降低了100倍。
http://t.cn/A6xGmW3Y
