接着上一篇中《redis应该中如何解决多写的竞争问题》结尾处提到的问题,使用乐观锁机制。如何解决大并发的问题?
如果同时进行有多个请求进行写操作,例如同一时刻有100个请求过来,那么只会有一个最终成功,其余99个全部会失败,效率不高。
而且从业务层面,有些是不可接受的场景。例如:大家同时去抢一个红包,如果背后也是用乐观锁的机制去处理,那每个请求后都只有一个人成功打开红包,这对业务是不可忍受的。
在这种情况下,如果想让总体效率最大化,可以采用排队的机制进行。
将所有需要对同一个key的请求进行入队操作,然后用一个消费者线程从队头依次读出请求,并对相应的key进行操作。
这样对于同一个key的所有请求就都是顺序访问,正常逻辑下则不会有写失败的情况下产生 。从而最大化写逻辑的总体效率。