Redis中List的使用场景

秒杀场景

最近在研究商品秒杀,遇到了几个问题,一个就是库存超出问题,这个利用MySQL的锁机制就能解决。第二个就是性能问题,面对海量的请求,MySQL承受的压力是巨大的,但是对于秒杀,可购买商品数量及其有限,MySQL完全不需要承受如此大的压力。例如秒杀商品限额100,其实MySQL需要处理的仅有这100人,即使参与秒杀的人数再多,MySQL也可以不必理会。当然即使没有抢购到,也需要给这绝大部分的用户反馈信息,此时就可以借助于Redis。

原来想着借助于String类型,存储一个库存总数,每次DECR一下,但是经过并发测试,库存总是会减为负数,所以放弃了使用String。

接着便采用了LIst类型。首先判断List的长度(使用LLEN),如果没有超过库存限制,MySQL减库存等操作,操作成功则RPUSH一个数据到List,直到达到了库存上限。如果超过库存限制,直接返回秒杀结束。经过几轮并发测试,每次队列的长度刚好等于库存数量,不会超出库存数量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章