Posted by lily's blog on May 9, 2025

redis缓存

为什么流量增大会导致数据库崩溃

数据库压力增大导致程序崩溃的原因主要有以下几点:

系统层面:

  1. 资源耗尽:
    • 当数据库接收到大量请求时,CPU、内存和磁盘I/O等资源会迅速消耗殆尽,导致系统无法处理新的请求。
  2. 网络瓶颈:
    • 数据库与应用服务器之间的网络带宽可能成为瓶颈,导致请求延迟和丢失。

数据库服务层面:

  1. 连接数限制
    • 数据库通常会限制同时连接的数量。当超过这个限制时,新连接将被拒绝,导致应用程序无法与数据库通信。
  2. 锁竞争
    • 在高并发情况下,多个事务可能会争夺同一资源,导致锁竞争加剧,进而引发死锁或长时间等待,影响系统性能。
  3. 查询性能下降:
    • 随着流量增加,复杂查询的执行时间可能显著增长,导致响应延迟,最终可能导致应用程序超时崩溃。
  4. 错误处理不足:
    • 应用程序在面对数据库压力时,如果没有进行适当的错误处理,可能会因为无法处理异常而崩溃。

数据库缓存层面:

  1. 缓存失效:
    • 数据库的缓存机制可能因流量激增而失效,导致频繁的磁盘读取,进一步增加了负载。

综上所述,数据库压力增大可以通过多种方式影响系统的稳定性,导致程序崩溃。为了避免这种情况,通常需要进行性能优化、负载均衡和资源监控等措施。

Redisson实现分布式锁

redisson实现分布式锁原理

加锁:

  1. lua脚本
  2. 锁hash结构,key:资源值,fild=uuid+线程id,value:1
  3. 获取锁逻辑
    1. lua原子操作判断当前hash是否存在
    2. fild & value
  4. lua看门狗自动重新设置时间
  5. // 发布订阅,其他线程阻塞,通知其他线程
  6. 超时释放锁机制:默认超时时长 = 3000 + 1500 * 3 = 7500 毫秒
    1. 取消订阅

解锁:

  1. lua脚本删除锁
  2. 取消定时续期,看门狗策略
  3. 取消订阅