千家信息网

防止商品超卖的思路有哪些

发表于:2025-02-09 作者:千家信息网编辑
千家信息网最后更新 2025年02月09日,本篇内容介绍了"防止商品超卖的思路有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、如何防止超
千家信息网最后更新 2025年02月09日防止商品超卖的思路有哪些

本篇内容介绍了"防止商品超卖的思路有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、如何防止超卖

在防止超卖的逻辑编写时,加锁这个思路是没有问题的,但是要加什么锁,锁哪一段逻辑就成为了问题。

1、思路1

jvm提供了synchronized和reentrantlock。
这两个锁适合在减库存的时候使用吗?
理论上讲,是可以使用的,但是服务必须是单机部署。如果是多台服务器,就会变成如下场景,锁根本没有作用。

3、思路3

我在网上曾看到有人列举前面两种实现方式,这里重点说明下,单机锁和分布式锁是不推荐的!
其实防超卖最终的目的是防止数据库的库存(goods_num)小于0。导致小于0的原因是多个线程在程序中计算库存,然后在赋值给数据库。这么多锁要解决的问题,其实一条sql就可以实现。

update t_goods set goods_num=goods_num - 1 where goods_id=1 and goods_num>0

如上所示。例如卖了id为1的商品1件。这时库存减一,重点是where条件中判断了goods_num>0。这样就间接的限制了只有库存在大于1的时候该sql才会减一。直接就防止了超卖的现象。
其实这个时候应该就会有人抬杠了,这是电商场景呀,直接连接数据库压力很大的。其实这个时候就要在减库存之前进行友好的限流了。
redis提供了几个命令:

  • incr--加

  • decr--减

  • incrby--阶梯加

  • decrby--阶梯减
    这几个都是原子操作,并且在执行成功之后会返回结果。例如:

redis> SET failure_times 10OKredis> DECR failure_times(integer) 9

这样如果有场景数据库减库存压力太大,可以双重判断,商品开卖之前,redis缓存商品的库存,先通过DECR减少redis库存,再减少数据库库存,当redis库存已经为0的时候,就没有必要再减少数据库的数据了。

"防止商品超卖的思路有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

库存 数据 数据库 商品 思路 时候 场景 问题 内容 单机 压力 更多 知识 逻辑 重点 阶梯 服务 很大 必要 学有所成 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 80级数据库天赋模拟器 我的世界梦想大陆服务器地址 Subsonic音乐服务器 计算机网络安全规程 数据库应用技术实验指导天津大学 手机wlan网络安全风险 网络技术缺考 现在设立全球服务器成本多高 提高服务器cpu 保险经纪公司服务器怎么建设 广东光纤网络技术开发服务标准 王者服务器不同有区别吗 编办 网络安全自查报告 朝阳区网络技术咨询参考价格 通信网络安全简介 繁昌网络安全咨询 搞it行业软件开发 优加互联网科技是什么产品 eac抓轨数据库 是全球联网吗 是实现网络安全最基本最经济 软件开发部署有什么作用 一百秒漫谈新思想之网络安全 数据库自动编号英文缩写 如何连接git服务器 查看数据库空间大小 惠州企帮互联网科技有限公司 端口对外开放的数据库安全策略 计算机网络安全期末试卷 网络安全标准宣贯 黑暗之魂二无法连接服务器
0