Redisson 实现分布式锁、Ratelimiter 实现接口限流

1.引入依赖

<dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId> <!-- 实现对 Caches 的自动化配置 -->
        </dependency>

2.配置文件

spring:
  # Cache 配置项
  cache:
    type: REDIS
    redis:
      time-to-live: 1h # 设置过期时间为 1 小时
      key-prefix: ${spring.application.name}
  

  # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
  redis:
    host: 111.111.111.111 # 地址
    port: 6379 # 端口
    database: 7 # 数据库索引
    password: 111111 # 密码

3.redisson锁

     int n = 500;
    @GetMapping("/redisson")
    @Operation(summary = "redisson")
    @Parameter(name = "id", description = "编号", required = true, example = "1024")
    public R<String> redisson(@RequestParam("id") Long id) throws InterruptedException {

        String desc = "";
        String key = "stockLock";
        RLock lock = redissonClient.getFairLock(key);
        try {
            //第一个参数,尝试获取锁的时间,锁执行时间
            boolean b = lock.tryLock(1000,30000,TimeUnit.MILLISECONDS);
            if (b) {
                log.info("尝试获取锁:" + Thread.currentThread().getName());
                Thread.sleep(5000);
                log.info("获取到锁true:" + Thread.currentThread().getName() + "  剩余数量:" + (--n));
                desc = "获取到锁true";
            } else {
                log.info("获取到锁false" + Thread.currentThread().getName());
                desc = "获取到锁false";
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(lock.isHeldByCurrentThread()){
                log.info("准备释放锁:" + Thread.currentThread().getName() );
                lock.unlock();
            }
        }

        return success(desc);

        
    }

4.lock4j实现分布式锁

用法很简单,看官方文档即可

简单使用

@Lock4j

@Lock4j(keys = {"#id","#name"}, expire = 3000, acquireTimeout = 1000)

@GetMapping("/lock4j")
    @Operation(summary = "lock4j")
    @Parameter(name = "id", description = "编号", required = true, example = "1024")
    @Lock4j
    public CommonResult<String> lock4j(@RequestParam("id") Long id) throws InterruptedException {


        String uuid = UUID.randomUUID().toString();
        log.info("尝试获取锁:" + Thread.currentThread().getName() + "    uuid:" +  uuid);
        Thread.sleep(5000);
        log.info("获取到锁true:" + Thread.currentThread().getName() + "    uuid:" +  uuid);

        return success("获取到锁true");
    }

官方文档: 

lock4j: 基于Spring AOP 的声明式和编程式分布式锁,支持RedisTemplate、Redisson、Zookeeper - Gitee.com

5.ratelimiter实现接口限流

用法很简单,看官方文档即可

1.引入依赖

<dependency>
  <groupId>com.github.taptap</groupId>
  <artifactId>ratelimiter-spring-boot-starter</artifactId>
  <version>1.3</version>
</dependency>


配置:
spring.ratelimiter.enabled=true
spring.ratelimiter.redis-address=redis://127.0.0.1:6379
spring.ratelimiter.redis-password=xxx

2.简单使用


@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/get")
    @RateLimit(rate = 5, rateInterval = "10s")
    public String get(String name) {
        return "hello";
    }
}

官方文档:

GitHub - taptap/ratelimiter-spring-boot-starter: 基于 redis 的偏业务应用的分布式限流组件,使得项目拥有分布式限流能力变得很简单。

标题 "lora-mesh-master" 暗示我们正在探讨LoRa Mesh网络的源代码库。LoRa(Long Range)是一种远距离、低功耗的无线通信技术,常用于物联网(IoT)应用。"Mesh"指的是网络拓扑结构,其中每个设备不仅与中央网关通信,还能够与其他设备通信,形成自组织网络,增强了网络的可靠性和覆盖范围。描述 "LORA MESH开发" 涉及如何开发基于LoRa的Mesh网络,开发者需要了解LoRa的基本原理,包括调制方式、频率计划以及数据速率选择,这些都是确保LoRa设备之间有效通信的关键因素。标签 "Mesh lora-mesh meshlora LORA节点源码 lora" 进一步细化了主题。"lora-mesh" 和 "meshlora" 可能是特定的LoRa Mesh实现或库,"LORA节点源码" 提示有实际的代码可以研究,这将帮助理解如何在硬件上构建LoRa节点并实现Mesh网络功能。"lora" 是对整个技术的提及,确保讨论的核心是LoRa通信。压缩包中的 "lora-mesh-master" 文件很可能是项目的主要源代码仓库,包含了构建和运行LoRa Mesh网络所需的全部代码。通常,这样的代码库会包含以下部分:README文件、源代码文件、配置文件、示例脚本、库依赖、编译和构建工具、测试用例。在深入研究LoRa Mesh开发时,需要理解以下关键概念:LoRa扩频技术、LoRaWAN、Ad-hoc网络、路由算法、功耗管理。通过研究这个项目,可以学习如何创建一个自组网、自修复的LoRa网络,以及如何在不同节点之间有效地传输数据,包括设置网络拓扑、处理冲突、优化传输效率。需要确保有适当的硬件环境,如LoRa模块、微控制器以及必要的开发工具。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值