[镜像] 练习-Redisson 实现分布式锁

镜像 海牛博士 ⋅ 于 2025-01-02 15:37:09 ⋅ 32 阅读

镜像详情地址:https://cloud.hainiubl.com/#/excellentImageDetail?id=25237&imageType=excellent

点击镜像详情页面最下方的“添加到实验配置”按钮可直接运行该实战镜像

一、需求说明

我们都知道在设计全局系统时,关键业务操作的并发安全是一个核心问题。

在单机环境下,没有并发控制的情况下,多个线程可以同时对共享资源进行操作,这样很容易造成数据不安全问题,比如库存的超买超卖。为了避免数据不安全的问题,单机环境可以引入同步锁(如Java的synchronizedReentrantLock)来线程安全。

在微服务和多元化系统中,应用程序通常部署在多台机器上,多个实例同时处理请求。如果每个实例仅在本地加锁,仍然会出现全局数据竞争:如库存扣减,实例多个同时使用相同的数据库记录,可能导致超卖的现象。这个时候就需要分布式锁来解决这个问题。

本练习将介绍如何基于Redis,实现高性能、高可用且简单的分布式锁

二、环境介绍

机器介绍

  • 一台mysql机器
  • 一台idea开发机
  • 一台redis内存数据库
  • 一台jmeter压测机器
  • 五台linux服务器
  • 一台nginx服务器

流程介绍

  1. 打开idea运行已经编写好的单机并且不加锁的扣减库存代码
  2. 通过jmeter并发测试,观察多线程并发请求,出现超卖的情况
  3. 升级代码引入ReentrantLock锁机制,可以保证多线程并发数据安全
  4. 多机服务器部署,使用nginx进行负载均衡转发请求
  5. 用jmeter测试加了ReentrantLock之后的多机并发访问出现超卖的情况
  6. 升级代码引入redisson分布式锁解决多机多线程并发访问数据不安全的问题
您没有该镜像的运行权限,所以无权查看该笔记

版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-海牛博士,http://hainiubl.com/topics/76608
点赞
成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter