1.首先,我们会考虑利用数据库的乐观锁和悲观锁来操作
但是悲观锁,每次拿数据都会上锁,谁拿到锁谁才会有操作的权限。每一个操作都会对资源进行锁定,会造成效率低下。
乐观锁,适合冲突比较少的情况,要不然一直retry,然而降低了系统的性能。而且写的频率过高。很容易造成系统崩溃。
我们采用变同步写为异步写的redis方式。
我们采用redis来做秒杀,在秒杀之前,我们首先会将库存读到redis中,我们利用单进程单线程的redis进行并发的控制,并且redis为我们提供了两种方式。
第一种是redis的事务的方式watch语句,会监视库存的变化,如果我们在这次更新库存中,库存发生了变化,事务失败,那么我们会更新失败。
还有一种是redis的list结构,类似于队列的机制,串行执行。
没修改一次库存,我们通过mq来更改数据库
这是一种变同步为异步的方式。