MySQL和redis特点以及超卖问题但是乐观锁会造成库存遗留问题还有连接超时用连接池解决

使用MySQL的场景

  1. 关系型数据存储:MySQL是一个关系型数据库管理系统(RDBMS),非常适合存储和查询结构化数据,即数据之间存在明确关系的数据。例如,电商网站中的用户信息、订单信息、商品信息等。
  2. 事务处理:MySQL支持ACID事务特性,这意味着它可以保证一系列操作的原子性、一致性、隔离性和持久性。对于需要确保数据完整性和一致性的应用,如银行转账、订单处理等,MySQL是理想的选择。
  3. 复杂查询:MySQL支持SQL(结构化查询语言),可以进行复杂的查询操作,如连接、聚合、排序等。对于需要进行大量数据处理和分析的应用,MySQL非常适用。

使用Redis的场景

  1. 缓存:Redis是一个高性能的内存数据库,通常用作缓存层,以减少对后端数据库的访问。对于读多写少、数据实时性要求较高的应用,如新闻网站、社交媒体等,使用Redis作为缓存可以显著提高性能和用户体验。
  2. 实时数据处理:Redis支持多种数据结构(如字符串、哈希、列表、集合和有序集合等),并且提供了丰富的操作命令。这使得Redis非常适合处理实时数据流,如实时排行榜、实时统计等。
  3. 消息队列:Redis提供了发布/订阅功能和阻塞队列等特性,可以用作消息中间件来实现异步通信和分布式系统之间的解耦。
  4. 高并发场景:由于Redis基于内存存储且采用单线程模型(实际上是通过IO多路复用来处理并发请求),它在高并发场景下表现优异。对于需要快速响应大量并发请求的应用,如秒杀系统、实时推荐系统等,Redis是一个很好的选择



在 Redis 中,超卖通常指的是在并发环境下,由于多个客户端同时对同一资源进行操作而导致的数量超出预期的情况。这种情况通常发生在对 Redis 中的某个键值进行增减操作时,如果多个客户端同时对同一个键值进行增加操作,可能会导致最终结果超过预期值。

为了解决 Redis 中的超卖问题,可以采用一些方法,例如:

  1. 使用事务(Transaction):在 Redis 中可以使用 MULTI组队、EXEC、WATCH 等命令来创建事务,确保多个命令的原子性执行,避免并发操作导致的超卖问题。乐观锁+版本号+事务三特性。

  2. 使用分布式锁:可以使用 Redis 的分布式锁来确保在对某个资源进行操作时只有一个客户端在操作,从而避免并发导致的超卖问题。

  3. 使用 Lua 脚本:通过 Lua 脚本可以将多个 Redis 命令封装成一个原子操作,确保在执行期间不会被其他客户端打断,从而避免超卖问题。

总的来说,要解决 Redis 中的超卖问题,关键在于保证对资源的操作是原子性的,可以通过事务、分布式锁、Lua 脚本等方式来实现,确保在并发环境下数据的正确性和一致性。




乐观锁是一种通过版本号(或时间戳)来实现的并发控制机制,在处理并发更新时会比悲观锁更加乐观,它认为在大部分情况下并发冲突是不会发生的,并且不会阻塞其他事务。在 Redis 中,乐观锁通常通过 WATCH 命令来实现。

库存遗留问题:乐观锁:修改数据时,改变版本号,其他线程想去修改,但因为版本号被修改,导致其他线程无法操作,就有遗留。

在处理类似库存扣减这样的业务场景时,使用乐观锁可以有效减少对数据库的锁定时间,提高并发性能。但是,乐观锁也存在一定的风险,例如可能引发超卖问题,即多个客户端同时读取库存数量,然后都尝试扣减库存,导致实际库存出现负值或遗留库存的情况。

为了解决乐观锁可能导致的库存遗留问题,可以采取以下策略:

1. **检查库存**:在扣减库存前,先检查库存是否充足,确保库存数量大于等于要扣减的数量,避免出现遗留库存的情况。

2. **使用分布式锁**:在进行库存操作时,可以结合分布式锁来确保只有一个客户端可以进行库存扣减操作,避免多个客户端同时扣减造成的问题。

3. **记录日志**:对于每次库存操作,记录操作日志,包括操作人员、操作时间、扣减数量等信息,便于追溯和排查异常情况。

综上所述,虽然乐观锁在一定程度上可以提高系统的并发性能,但在处理涉及数据一致性的业务场景时,需要结合其他手段来避免可能导致的问题,如合理的业务逻辑判断、使用分布式锁等方式来规避库存遗留等风险。

lua脚本介绍: 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sqyaa.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值