mysql如何实现商品的秒杀?

518 阅读1分钟

怎么预防数据库的超售现象?

1 设置数据库事务的隔离级别为Serializable,但是我们一般不会这样去使用,他会让我们的数据库无法实现并发。

2 在数据表上设置乐观锁字段,当我们只要修改一行数据的时候,就会改变这个字段,这样不管事物运行出现了什么错误,我们都可以通过查看这个字段来得知这行数据是否被修改过。

一般我们都会在程序中去实现乐观锁的,它的大概流程是先查询记录,然后记下版本号,之后比较版本号,如果符合就修改版本号,如果不符合就结束。

什么时候我们需要设置乐观锁?

一般情况下出现同时去修改一张表的情况下会去设置乐观锁。如果不是这样的情况的话,其实大部分不需要设置。

在真实的秒杀业务当中,大量的去访问mysql,还是会使用大量的IO,那么我们还可以怎么样去提高速度呢?

我们可以使用redis来提高速度,它是在内存当中存放数据,这样性能会得到很大的提升。

但是这里我们要注意一个问题,redis的执行是单线程非阻塞形式的,并发修改数据很容易造成超售的现象。解决的方法是使用redis的批处理,一次把多条命令发给redis去执行,避免其他的客户端去中间插队,防止超售的现象。