目前看到两种方法。 一种是用 string 类型直接存库存大小,减库存减掉数字的大小就可以了。有人说在高并发时,库存有可能减到负数。 一种是用 list 类型创建与库存大小一致的数据。减库存移除 list 中的元素,这样不会出现第一种的库存为负的问题。 我自己试了下了,使用第二种方法,如果库存量特别大时,创建缓存的会特别慢 请大佬指教一下

目前看到两种方法。 一种是用 string 类型直接存库存大小,减库存减掉数字的大小就可以了。有人说在高并发时,库存有可能减到负数。 一种是用 list 类型创建与库存大小一致的数据。减库存移除 list 中的元素,这样不会出现第一种的库存为负的问题。 我自己试了下了,使用第二种方法,如果库存量特别大时,创建缓存的会特别慢 请大佬指教一下
1 wudila Jul 15, 2020 感觉只是计数的话 用第一种就好了.至于并发问题 可以增加一个分布式锁来解决 |
3 colia Jul 15, 2020 redis 集群做的吗 |
4 TypeErrorNone Jul 15, 2020 第一种,incr 操作,用 incr 返回的值做是否有剩余库存的判断 |
5 qjbcnrs Jul 15, 2020 incr 返回值大于 0 就行了 |
7 TypeErrorNone Jul 15, 2020 @xuanbg 套娃...抢票怎么处理,如果超发了很多,都过来检票了 |
8 nicreve Jul 15, 2020 如果本身没有扣减库存后购买失败需要加回库存的需求的话,单纯执行 DECR,业务侧判断返回值是否>=0 就可以了。 稍微复杂点的话就通过 Lua 脚本在 Redis 侧做下简单的处理,只有库存大于 0 时可以 DECR,然后把是否扣减了返回给业务侧。 |