美文网首页
在分布式环境中如何处理高并发问题?

在分布式环境中如何处理高并发问题?

作者: 让你变好的过程从来都不会很舒服 | 来源:发表于2022-12-20 21:58 被阅读0次

问题解决:增加分布式锁

使用redis的setnx可以实现分布式锁

Redis的setnx方法解析:

SETNX key value
将 key 的值设为 value ,当且仅当 key 不存在。
若给定的 key 已经存在,则 SETNX 不做任何动作。

代码块:
#######################  分布式应用商品减库存 redis实现分布式锁####################### 

@RequestMaping("/delete_stock")
public String deductstock(){
String lockKey = "product_101";
String clientId =UUID.randomUUID().toString();
Boolean result = springRedisTemplate.opsForValue().setIfAbsent(lockKey ,clientId ,10,TimeUnit.SECONDS);
   if(!result ){
      return "false"
   }
   try{
    int stock = Integer.parseInt(springRedisTemplate.opsForValue().get("stock"));
    if(stock >0){
       int realStock = stock -1;
       springRedisTemplate.opsForValue().set("stock",realStock +"");
      system.out.println("扣减成功,剩余库存:"+realStock );
    }else{
        system.out.println("扣减失败,库存不足" );
     }
   }finally{
        if(clientId .equals(springRedisTemplate.opsForValue().get(lockKey ))){
            springRedisTemplate.delete(lockKey );
        }


   }

}
Redisson实现分布式锁:

简介:Redisson 在基于 NIO 的 Netty 框架上,充分的利⽤了 Redis 键值数据库提供的⼀系列优势,在
Java 实⽤⼯具包中常⽤接⼝的基础上,为使⽤者提供了⼀系列具有分布式特性的常⽤⼯具
类。使得原本作为协调单机多线程并发程序的⼯具包获得了协调分布式多机多线程并发系统
的能⼒,⼤⼤降低了设计和研发⼤规模分布式系统的难度。同时结合各富特⾊的分布式服
务,更进⼀步简化了分布式环境中程序相互之间的协作

Redisson加锁是通过lua脚本实现

if (redis.call('exists', KEYS[1]) == 0) then " +
   "redis.call('hincrby', KEYS[1], ARGV[2], 1); " +
   "redis.call('pexpire', KEYS[1], ARGV[1]); " +
   "return nil; " +
   "end; " +
"if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then " +
    "redis.call('hincrby', KEYS[1], ARGV[2], 1); " +
    "redis.call('pexpire', KEYS[1], ARGV[1]); " +
    "return nil; " +
    "end; " +
"return redis.call('pttl', KEYS[1]);"

代码块:
\\ 加锁
Rolck redissinLock = redisson.getLock(lockkey);
redissinLock.lock();
\\ 解锁
redissinLock.unlock();

相关文章

  • 消息队列在项目中的使用

    背景:在分布式系统中是如何处理高并发的。 由于在高并发的环境下,来不及同步处理用户发送的请求,则会导致请求发生阻塞...

  • 分布式环境下,怎么保证线程安全

    转载来源:探索并发编程(七)------分布式环境中并发问题 避免并发 在分布式环境中,如果存在并发问题,那么很难...

  • 在分布式环境中如何处理高并发问题?

    问题解决:增加分布式锁 使用redis的setnx可以实现分布式锁 Redis的setnx方法解析: SETNX ...

  • 分布式锁的几种实现方式

    首先为什么要使用分布式锁,和单机环境类似,都是为了避免并发问题,只是在单机环境中,各种语言都有提供并发处理的方案,...

  • 06.如何应对高并发

    如何应对高并发 什么是高并发 高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素...

  • face 29高并发大流量

    高并发大流量 并发 并发访问,在某个时间点 有多少个访问同时到来 php如何处理网站大流量高并发问题 流量优化 防...

  • Zookeeper(一)-- 简介以及单机部署和集群部署

    一、分布式系统 由多个计算机组成解决同一个问题的系统,提高业务的并发,解决高并发问题。 二、分布式环境下常见问题 ...

  • Redis实现分布式锁

    为什么要分布式锁 在单机的情况下,可以通过jvm提供的系列线程安全的操作来处理高并发的情况,但是在分布式的环境下,...

  • 分布式

    每秒处理10万高并发订单的某集团支付系统架构分享分布式系统中的死锁处理分布式系统常用技术栈 nginx, rpc,...

  • 分布式电商开发 01

    互联网电商行业的特点 分布式 , 高并发 , 集群 , 海量数据 等等 那如何解决海量数据和高并发的问题呢? 1....

网友评论

      本文标题:在分布式环境中如何处理高并发问题?

      本文链接:https://www.haomeiwen.com/subject/zvppqdtx.html