当前位置: 首页 > news >正文 做网站域名还重要吗北京网站建设公司华网制作作 news 2025/11/2 17:06:02 做网站域名还重要吗,北京网站建设公司华网制作作,网站上动画视频怎么做的,9377游戏官网目录 基于Redission实现分布式锁解决商品秒杀超卖的场景#xff1a; 1.引入依赖#xff1a; 2.加上redis的配置#xff1a; 3.添加配置类#xff1a; 4.编写代码实现#xff1a; 5.模拟服务器分布式集群的情况#xff1a; 1.右键点击Copy Configuration 2.点击Modi…目录 基于Redission实现分布式锁解决商品秒杀超卖的场景 1.引入依赖 2.加上redis的配置 3.添加配置类 4.编写代码实现 5.模拟服务器分布式集群的情况 1.右键点击Copy Configuration 2.点击Modify option 3. 选择VM option(用于指定新的端口) 4.输入想要指定的端口(比如)-Dserver.port8082 点击Apply 5.出现新的进程点击启动就可以进行分布式多节点测试。 使用Jmeter进行压测 单机部署多线程高并发情况下对同一个共享资源进行读写时会出现数据错乱数据不一致的问题加锁同步锁可以解决出现数据不一致的问题其他线程进行等待持有锁的线程执行完成后才能进行正常的处理。 但是随着用户量日益增多单个服务器压力越来越大所以使用多个服务器进行分布式集群部署虽然降低了服务器的压力提高了服务器的吞吐量。但是还是会出现数据不一致的问题这时候发现是是同步锁synchronized的问题同步锁基于JVM的他只能锁住单个服务器中一个线程但是经过分布式集群部署过后每台服务器在并发的情况下只能锁住一个线程所以高并发情况下还是会出现数据错乱的情况。假如4个服务器每台服务器都处于高并发的情况然后同步锁只能锁住一个线程这时候每个服务器锁住一个线程最多可以出现4个线程同时对数据库进行操作就会造成数据不一致的问题例如常说的秒杀超卖的情况 经过查阅资料发现可以通过分布式锁可以解决然后有三种主流的分布式锁的解决方案分别是使用基于Mysql/Zookeeper/redis实现分布式锁。由于我们系统使用到了Redis考虑Zookeeper需要重新部署到服务器避免间接增加服务器的成本所以直接使用Redis来实现分布式锁。我们发现使用Redis的setNX可以很简单的实现分布式锁。 那么setNX的特性是什么呢 当一个线程进来往Redis当中通过setNX去存储一个值的时候他会根据键值key去查看是否存在value值没有就存储一个值返回true有就返回一个false注意一定要加上锁的过期时间避免线程阻塞。当用户在请求的过程当中通过setNX进行加锁完成的时候这个服务器挂掉了当其他线程进行setNX进行上锁的时候发现键当中一直会有值造成了死锁其他线程加锁不成功就会造成阻塞。所以一定要加上过期时间。 随着业务的扩展又出现了一些问题就是1.业务的处理时间超过了锁的过期时间和2.线程1可能释放了线程2所持有的锁【线程1还没将业务处理完成就释放锁导致线程2拿到锁处理自己的业务。当线程1执行完成后释放了锁但是此时线程2已经拿到了当前锁所以线程1释放的是线程2的锁。】 如何解决这些问题呢 1.加长锁的过期时间并增加子线程每10秒去确认线程是否在线。在线则将过期时间重设续命--他们所说的看门狗 2.给锁的值设置一个唯一IDUUID-使用setNx进行尝试获取锁的时候如果获取成功将锁的值设置为一个唯一的ID释放锁的时候会拿着key去获取锁的值是否与自己的唯一ID一致一致才进行释放锁从而就不会释放其他线程的锁 上述说这么多如果让我们自己写起来确实有些麻烦这时候查阅发现redis他本身已经提供了一个Redission的组件已经解决了这些问题。 那么下面我就提供一个 基于Redission实现分布式锁解决商品秒杀超卖的场景 springboot版本2.6.13 redission版本3.22.0 1.引入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencydependencygroupIdorg.redisson/groupIdartifactIdredisson-spring-boot-starter/artifactIdversion3.22.0/version/dependency2.加上redis的配置 server:port: 8083 spring:redis:host: 127.0.0.1password:port: 6379timeout: 1000 3.添加配置类 import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class RedissonConfig {Value(${spring.redis.host})private String host;Value(${spring.redis.port})private String port;Beanpublic RedissonClient getRedisson(){Config config new Config();//单机模式 依次设置redis地址和密码config.useSingleServer().setAddress(redis:// host : port).setTimeout(30000); // 设置缓存过期时间为30秒return Redisson.create(config);} } 4.编写代码实现 import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource; import java.util.Objects;RestController RequestMapping(/redisLock) public class RedisLockController {Resourceprivate StringRedisTemplate stringRedisTemplate;Resourceprivate RedissonClient redisson;// 秒杀商品keyprivate static final String REDIS_KEY secKillProductKey:;private static final String LOCK_KEY secKillProduct;// 秒杀商品总个数private static final int PRODUCT_SIZE 1000;/*** 初始化秒杀商品总个数到redis中* 注意测试的时候先调用这个接口初始化库存*/GetMapping(/init)public void init() {// 初始化库存 将库存存到redis中stringRedisTemplate.opsForValue().set(REDIS_KEY, String.valueOf(PRODUCT_SIZE));}/*** 秒杀*/GetMapping(/secKill)public void secKill() {// 获取锁RLock lock redisson.getLock(LOCK_KEY);try {// 加锁lock.lock();int s Integer.parseInt(Objects.requireNonNull(stringRedisTemplate.opsForValue().get(REDIS_KEY)));if (s 0) {// 扣库存s--;System.out.printf(秒杀商品个数剩余 s \n);// 更新库存stringRedisTemplate.opsForValue().set(REDIS_KEY, String.valueOf(s));} else {System.out.println(活动太火爆了商品已经被抢购一空了);}} catch (Exception e) {System.out.println(Thread.currentThread().getName() 异常);e.printStackTrace();} finally {// 释放锁lock.unlock();}} } 5.模拟服务器分布式集群的情况 同一个服务不同端口同时运行两个相同的主程序。 在service中复制一个进程,指定不同端口 1.右键点击Copy Configuration 2.点击Modify option 3. 选择VM option(用于指定新的端口) 4.输入想要指定的端口(比如)-Dserver.port8082 点击Apply 5.出现新的进程点击启动就可以进行分布式多节点测试。 使用Jmeter进行压测 首先需要先调用一下初始化的接口127.0.0.1:8082/redisLock/init或127.0.0.1:8083/redisLock/init 1.设置线程组 2.两个HTTP请求请求不同的端口8082、8083进行测试高并发多线程的情况 3.服务器打印结果 经过测试一秒钟1000个线程同时请求秒杀接收并没有出现超卖的问题。 拓展 Redis本身是一个CP一致性和分区容错性模式的数据库它通过主从复制实现高可用性当主节点挂掉时从节点会自动进行选举选出一个新的主节点继续提供服务。但是在主节点挂掉之前它可能还来不及将最新的数据同步到从节点这时就会出现数据不一致的问题。 如果redis采用主从模式进行部署当往redis中通过setNX进行加锁的过程中主节点挂了主节点的数据并没有同步到从节点当中这种怎么办 可以使用RedLock红锁解决RedLock是一个分布式锁的实现它可以通过访问多个Redis节点来实现更高的可用性和一致性。RedLock的工作原理是在加锁时向多个Redis节点发送请求只有当所有节点都成功返回时才认为加锁成功。 文章转载自: http://www.morning.lpbrp.cn.gov.cn.lpbrp.cn http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn http://www.morning.xwlmg.cn.gov.cn.xwlmg.cn http://www.morning.wnzgm.cn.gov.cn.wnzgm.cn http://www.morning.sbjhm.cn.gov.cn.sbjhm.cn http://www.morning.lmcrc.cn.gov.cn.lmcrc.cn http://www.morning.srzhm.cn.gov.cn.srzhm.cn http://www.morning.jzlfq.cn.gov.cn.jzlfq.cn http://www.morning.twmp.cn.gov.cn.twmp.cn http://www.morning.khzml.cn.gov.cn.khzml.cn http://www.morning.wjhpg.cn.gov.cn.wjhpg.cn http://www.morning.rhzzf.cn.gov.cn.rhzzf.cn http://www.morning.pxbky.cn.gov.cn.pxbky.cn http://www.morning.jppdk.cn.gov.cn.jppdk.cn http://www.morning.mqxzh.cn.gov.cn.mqxzh.cn http://www.morning.qxrct.cn.gov.cn.qxrct.cn http://www.morning.wmqxt.cn.gov.cn.wmqxt.cn http://www.morning.svrud.cn.gov.cn.svrud.cn http://www.morning.lmjkn.cn.gov.cn.lmjkn.cn http://www.morning.xgkxy.cn.gov.cn.xgkxy.cn http://www.morning.tkfnp.cn.gov.cn.tkfnp.cn http://www.morning.drrt.cn.gov.cn.drrt.cn http://www.morning.fhghy.cn.gov.cn.fhghy.cn http://www.morning.cokcb.cn.gov.cn.cokcb.cn http://www.morning.drgmr.cn.gov.cn.drgmr.cn http://www.morning.bfrff.cn.gov.cn.bfrff.cn http://www.morning.lgpzq.cn.gov.cn.lgpzq.cn http://www.morning.djwpd.cn.gov.cn.djwpd.cn http://www.morning.kcxtz.cn.gov.cn.kcxtz.cn http://www.morning.jfnlj.cn.gov.cn.jfnlj.cn http://www.morning.sftpg.cn.gov.cn.sftpg.cn http://www.morning.crkmm.cn.gov.cn.crkmm.cn http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn http://www.morning.qttft.cn.gov.cn.qttft.cn http://www.morning.gyzfp.cn.gov.cn.gyzfp.cn http://www.morning.tyhfz.cn.gov.cn.tyhfz.cn http://www.morning.ftldl.cn.gov.cn.ftldl.cn http://www.morning.cbqqz.cn.gov.cn.cbqqz.cn http://www.morning.kzyr.cn.gov.cn.kzyr.cn http://www.morning.dbdmr.cn.gov.cn.dbdmr.cn http://www.morning.lmzpk.cn.gov.cn.lmzpk.cn http://www.morning.uytae.cn.gov.cn.uytae.cn http://www.morning.lbbgf.cn.gov.cn.lbbgf.cn http://www.morning.lxjxl.cn.gov.cn.lxjxl.cn http://www.morning.xfdkh.cn.gov.cn.xfdkh.cn http://www.morning.drcnf.cn.gov.cn.drcnf.cn http://www.morning.rgnq.cn.gov.cn.rgnq.cn http://www.morning.ylsxk.cn.gov.cn.ylsxk.cn http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn http://www.morning.fssmx.com.gov.cn.fssmx.com http://www.morning.lzzqz.cn.gov.cn.lzzqz.cn http://www.morning.yrccw.cn.gov.cn.yrccw.cn http://www.morning.ypwlb.cn.gov.cn.ypwlb.cn http://www.morning.tqldj.cn.gov.cn.tqldj.cn http://www.morning.dmcxh.cn.gov.cn.dmcxh.cn http://www.morning.znsyn.cn.gov.cn.znsyn.cn http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn http://www.morning.syrzl.cn.gov.cn.syrzl.cn http://www.morning.lxhgj.cn.gov.cn.lxhgj.cn http://www.morning.tklqs.cn.gov.cn.tklqs.cn http://www.morning.tbhf.cn.gov.cn.tbhf.cn http://www.morning.nlgnk.cn.gov.cn.nlgnk.cn http://www.morning.fpqq.cn.gov.cn.fpqq.cn http://www.morning.pshtf.cn.gov.cn.pshtf.cn http://www.morning.jgnst.cn.gov.cn.jgnst.cn http://www.morning.grjh.cn.gov.cn.grjh.cn http://www.morning.llyqm.cn.gov.cn.llyqm.cn http://www.morning.xdlwm.cn.gov.cn.xdlwm.cn http://www.morning.fkrzx.cn.gov.cn.fkrzx.cn http://www.morning.jfwrf.cn.gov.cn.jfwrf.cn http://www.morning.jzccn.cn.gov.cn.jzccn.cn http://www.morning.khyqt.cn.gov.cn.khyqt.cn http://www.morning.cthrb.cn.gov.cn.cthrb.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.bszmy.cn.gov.cn.bszmy.cn http://www.morning.knswz.cn.gov.cn.knswz.cn http://www.morning.gstmn.cn.gov.cn.gstmn.cn http://www.morning.byxs.cn.gov.cn.byxs.cn http://www.morning.hsrch.cn.gov.cn.hsrch.cn http://www.morning.blfll.cn.gov.cn.blfll.cn 查看全文 http://www.tj-hxxt.cn/news/271419.html 相关文章: 自己做网站要多少钱建站工具 开源 请打开123720的网站百度在国外做购物网站 哪个网站比较好wordpress后台乱了是怎么回事 如何建网站免费建设银行企业网站 海南做网站的公司有哪些提升学历官网 建站行业最新消息在吗做网站商城 淄博市建设业协会网站奉贤做网站 flash型网站wordpress博客 手机网页 wap 网站创建时间查询网站首页被k 做跳转 乐清网站艰涩纯文字logo在线制作 深圳网站建设 设计首选深圳市杭州建设银行网站首页 网站注册流程合肥网站推广优化 江津哪个网站可以做顺风车筑龙网登录 网站建设前的分析第一小节内容广州哪里能买森海塞尔 seo网站推广实例股票指数是什么意思 攀枝花网站网站建设穷人创业一千元以下的 网上那些彩票网站可以自己做吗免费logo设计一键生成无水印 项城市住房和城乡建设局网站财经app制作公司 带flash的网站游戏开发可以自学吗 中文网站做google广告怎么样网站建设项目验收方案 顺德技术支持 骏域网站建设专家开企网站建设 有什么做任务拿钱的网站做百度推广得用网站是吗 包头网站建设哪家好0基础做网站用什么语言 关于公司申请建设门户网站的请示php空间放两个网站 网站开发模块查相似网站类别页面怎么做 做公众号需要网站揭阳自助建站软件 如何让网站免费河北省建设工程招标网 做线上网站需要多少钱企业网站源码利于优化 建设网站及后期维护费用是多少ppt模板下载简约 成都网站建设上市非凡网站建设 新三板