京东如何确保Redis中库存扣减准确且避免商品超卖?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2036个文字,预计阅读时间需要9分钟。
在开发过程中,许多地方都存在类似压缩库存的操作,如电商系统中的商品库存,抽奖系统中的奖品库存等。解决方案是使用MySQL数据库,并采用一个字段的直接操作。
来源:my.oschina.net/xiaolyuh/blog/1615639
在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。
解决方案- 使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。
- 还是使用数据库,但是将库存分层多份存到多条记录里面,扣减库存的时候路由一下,这样子增大了并发量,但是还是避免不了大量的去访问数据库来更新库存。
- 将库存放到redis使用redis的incrby特性来扣减库存。
在上面的第一种和第二种方式都是基于数据来扣减库存。
基于数据库单库存第一种方式在所有请求都会在这里等待锁,获取锁有去扣减库存。在并发量不高的情况下可以使用,但是一旦并发量大了就会有大量请求阻塞在这里,导致请求超时,进而整个系统雪崩;而且会频繁的去访问数据库,大量占用数据库资源,所以在并发高的情况下这种方式不适用。
基于数据库多库存第二种方式其实是第一种方式的优化版本,在一定程度上提高了并发量,但是在还是会大量的对数据库做更新操作大量占用数据库资源。
本文共计2036个文字,预计阅读时间需要9分钟。
在开发过程中,许多地方都存在类似压缩库存的操作,如电商系统中的商品库存,抽奖系统中的奖品库存等。解决方案是使用MySQL数据库,并采用一个字段的直接操作。
来源:my.oschina.net/xiaolyuh/blog/1615639
在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。
解决方案- 使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。
- 还是使用数据库,但是将库存分层多份存到多条记录里面,扣减库存的时候路由一下,这样子增大了并发量,但是还是避免不了大量的去访问数据库来更新库存。
- 将库存放到redis使用redis的incrby特性来扣减库存。
在上面的第一种和第二种方式都是基于数据来扣减库存。
基于数据库单库存第一种方式在所有请求都会在这里等待锁,获取锁有去扣减库存。在并发量不高的情况下可以使用,但是一旦并发量大了就会有大量请求阻塞在这里,导致请求超时,进而整个系统雪崩;而且会频繁的去访问数据库,大量占用数据库资源,所以在并发高的情况下这种方式不适用。
基于数据库多库存第二种方式其实是第一种方式的优化版本,在一定程度上提高了并发量,但是在还是会大量的对数据库做更新操作大量占用数据库资源。

