如何实现Redisson分布式锁
首先,不要将分布式锁想的太复杂,如果我们只是平时业务中去使用,其实不算难,但是很多人写的文章不能让人快速上手,接下来,一起看下Redisson分布式锁的快速实现
Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格客户端(In-Memory Data Grid)。它不仅提供了一系列的 redis 常用数据结构命令服务,还提供了许多分布式服务,例如分布式锁、分布式对象、分布式集合、分布式远程服务、分布式调度任务服务等等。
Redisson:其实就是相当于在redis的基础上进行了加强,让redisson不像redis的分布式是直接基于指令setnx(set if not exists: 如果不存在)去实现的。
开始配置
因为redission是基于redis的,所以我们需要本地安装reids,redis安装这里就不演示了,这里是使用springboot创建的项目,我们默认项目已经创建完成了,所以直接开始配置
项目结构

1、配置redis
#以下是application.yml中的配置
server:port: 8083spring:redis:host: localhostport: 6379timeout: 1000jedis:pool:min-idle: 5max-idle: 10max-wait: -1
2、配置pom.xml 引入相关jar包
<!-- 引入redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 引入redisson --><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.17.7</version></dependency>
3、编写测试并发类
package cn.sendmsg.test;
import lombok.extern.slf4j.Slf4j;
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.TimeUnit;@RestController
@Slf4j
public class redissonController {@RequestMapping("/testLock")public void testRedissLock(){// 使用Redisson 设置分布式锁//1、配置Redisson客户端 Config对象用于配置 Redisson 客户端的参数。Config config = new Config();//2、连接地址 连接方式redis:// 或者 rediss://// 集群使用// config.useClusterServers()// .setScanInterval(2000) // 集群状态扫描间隔时间,单位是毫秒// //可以用"rediss://"来启用SSL连接// .addNodeAddress("redis://127.0.0.1:7000", "redis://127.0.0.1:7001")// .addNodeAddress("redis://127.0.0.1:7002");/** userSingleServer():指定使用单个redis服务配置* setAddress() : 设置 Redis 服务器的地址* setPassWord(): 设置连接 Redis 服务器的密码,如果有的话* setDatabase(0): 设置连接的数据库索引,0就表示第一个* */config.useSingleServer().setAddress("redis://localhost:6379");//3、 创建Redisson客户端RedissonClient redissonClient = Redisson.create(config);String lockValue = "isLock";// 获取红锁RLock redissonLock = redissonClient.getLock(lockValue);try {// 后去锁,如果获取到返回true// tryLock():尝试3秒内获取锁,如果获取到了,最长3秒自动释放boolean lock = redissonLock.tryLock(3L,3L, TimeUnit.SECONDS);// 获取锁后,开始执行需要加锁的逻辑代码if(lock){System.out.println("获取到锁了");for(int i =0;i<5;i++){log.info("执行逻辑,查看打印结果:{}",i);}}} catch (InterruptedException e) {log.info("获取锁失败,失败原因:{}",e.getMessage());throw new RuntimeException(e);}finally {// 最后一定要释放锁,不然有可能造成死锁现象redissonLock.unlock();}}// 用于jmater测试不加锁的信息,对比看@RequestMapping("/testNoLock")public void testRedissNoLock(){for(int i =0;i< 10;i++){log.info("无分布式锁的逻辑:"+i);}}}
4、使用jmater测试(这是个压测工具,可以一次性发多个线程,来进行压力测试),这个自行安装以下
以下是jmater工具页面截图,这个花3分钟时间,自己学习下,主要还是设置yml、pom.xml、测试类,这个属于工具

5、查看本地代码运行结果(注意看打印结果,因为获得了分布式锁,所以在执行代码块for循环时,是顺序的,不然不是顺序的)
获取到锁了
2023-11-14 14:51:45.840 INFO 40508 --- [nio-8083-exec-4] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:0
2023-11-14 14:51:45.840 INFO 40508 --- [nio-8083-exec-4] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:1
2023-11-14 14:51:45.840 INFO 40508 --- [nio-8083-exec-4] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:2
2023-11-14 14:51:45.840 INFO 40508 --- [nio-8083-exec-4] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:3
2023-11-14 14:51:45.840 INFO 40508 --- [nio-8083-exec-4] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:4
获取到锁了
2023-11-14 14:51:45.862 INFO 40508 --- [nio-8083-exec-5] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:0
2023-11-14 14:51:45.862 INFO 40508 --- [nio-8083-exec-5] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:1
2023-11-14 14:51:45.862 INFO 40508 --- [nio-8083-exec-5] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:2
2023-11-14 14:51:45.862 INFO 40508 --- [nio-8083-exec-5] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:3
2023-11-14 14:51:45.862 INFO 40508 --- [nio-8083-exec-5] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:4
获取到锁了
2023-11-14 14:51:45.866 INFO 40508 --- [nio-8083-exec-2] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:0
2023-11-14 14:51:45.866 INFO 40508 --- [nio-8083-exec-2] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:1
2023-11-14 14:51:45.866 INFO 40508 --- [nio-8083-exec-2] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:2
2023-11-14 14:51:45.866 INFO 40508 --- [nio-8083-exec-2] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:3
2023-11-14 14:51:45.866 INFO 40508 --- [nio-8083-exec-2] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:4
获取到锁了
2023-11-14 14:51:45.869 INFO 40508 --- [nio-8083-exec-3] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:0
2023-11-14 14:51:45.869 INFO 40508 --- [nio-8083-exec-3] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:1
2023-11-14 14:51:45.869 INFO 40508 --- [nio-8083-exec-3] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:2
2023-11-14 14:51:45.869 INFO 40508 --- [nio-8083-exec-3] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:3
2023-11-14 14:51:45.869 INFO 40508 --- [nio-8083-exec-3] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:4
获取到锁了
2023-11-14 14:51:45.872 INFO 40508 --- [nio-8083-exec-1] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:0
2023-11-14 14:51:45.872 INFO 40508 --- [nio-8083-exec-1] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:1
2023-11-14 14:51:45.872 INFO 40508 --- [nio-8083-exec-1] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:2
2023-11-14 14:51:45.872 INFO 40508 --- [nio-8083-exec-1] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:3
2023-11-14 14:51:45.872 INFO 40508 --- [nio-8083-exec-1] cn.sendmsg.test.redissonController : 执行逻辑,查看打印结果:4
到这里,其实我们就已经实现Redisson分布式锁了,不要把这个想的太复杂,可能在集群时需要注意些。 示例代码中演示了集群时如何设置。这是一个简单的案例,但实际开发者,获取锁-释放锁也是这么用的。加油
6、不加锁使用jmater打印的信息
不加锁,for循环打印时,输出日志就不是有顺序的
15:00:40.217 INFO 40508 --- [io-8083-exec-17] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:3
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-17] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:4
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-17] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:5
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-17] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:6
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-17] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:7
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-17] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:8
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-17] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:9
2023-11-14 15:00:40.081 INFO 40508 --- [io-8083-exec-16] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:1
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-16] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:2
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-16] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:3
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-16] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:4
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-16] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:5
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-16] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:6
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-16] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:7
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-16] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:8
2023-11-14 15:00:40.217 INFO 40508 --- [io-8083-exec-16] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:9
2023-11-14 15:00:40.078 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:5
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:6
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:7
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:8
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:9
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-23] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:0
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-23] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:1
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-23] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:2
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-23] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:3
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-23] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:4
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-23] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:5
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-23] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:6
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-23] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:7
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-23] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:8
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-23] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:9
2023-11-14 15:00:40.210 INFO 40508 --- [io-8083-exec-25] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:6
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-25] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:7
2023-11-14 15:00:40.218 INFO 40508 --- [io-8083-exec-25] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:8
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:0
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:1
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:2
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:3
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:4
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:5
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:6
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:7
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:8
2023-11-14 15:00:40.218 INFO 40508 --- [nio-8083-exec-7] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:9
2023-11-14 15:00:40.211 INFO 40508 --- [io-8083-exec-26] cn.sendmsg.test.redissonController : 无分布式锁的逻辑:0
相关文章:
如何实现Redisson分布式锁
首先,不要将分布式锁想的太复杂,如果我们只是平时业务中去使用,其实不算难,但是很多人写的文章不能让人快速上手,接下来,一起看下Redisson分布式锁的快速实现 Redisson 是一个在 Redis 的基础上实现的 Java…...
Kafka(三)生产者发送消息
文章目录 生产者发送思路自定义序列化类配置生产者参数提升吞吐量 发送消息关闭生产者结语示例源码仓库 生产者发送思路 如何确保消息格式正确的前提下最终一定能发送到Kafka? 这里的实现思路是 ack使用默认的all开启重试在一定时间内重试不成功,则入库ÿ…...
2020年五一杯数学建模C题饲料混合加工问题解题全过程文档及程序
2020年五一杯数学建模 C题 饲料混合加工问题 原题再现 饲料加工厂需要加工一批动物能量饲料。饲料加工需要原料,如加工猪饲料需要玉米、荞麦、稻谷等。加工厂从不同的产区收购了原料,原料在收购的过程中由于运输、保鲜以及产品本身属性等原因ÿ…...
公益SRC实战|SQL注入漏洞攻略
目录 一、信息收集 二、实战演示 三、使用sqlmap进行验证 四、总结 一、信息收集 1.查找带有ID传参的网站(可以查找sql注入漏洞) inurl:asp idxx 2.查找网站后台(多数有登陆框,可以查找弱口令,暴力破解等漏洞&…...
Word软件手动安装Zotero插件
文章目录 Word软件手动安装Zotero插件方法一方法二 参考资料 Word软件手动安装Zotero插件 方法一 关闭word在zotero中依次点击编辑—首选项—引用—文字编辑软件—重新安装加载项Microsoft word 方法二 寻找Zotero.dotm存储位置, 例如D:\Program Files\Zotero\ext…...
idea 插件推荐第二期
文章目录 便捷开发CodeGlance Pro (代码缩略图)GenerateAllSetter(快速生成对象所有set方法)GsonFormatPlus:json转实体RestfulToolkitX(找到controller快捷请求接口) 美化activate-power-mode-x (敲击计数、动效)Nyan…...
plsql查询中文出现乱码
添加环境变量:如下 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 变量名:TNS_ADMIN 变量值:D:\instantclient_11_2\network\admin 在Path中添加instantclient_11_2存放路径...
【Docker】五分钟完成Docker部署Java应用,你也可以的!!!
文章目录 前言一、部署步骤1.项目结构2.Dockerfile3.docker-compose.yml4.启动5.常用命令 总结 前言 本文基于Docker Compose部署Java应用,请确保你已经安装了Docker和Docker Compose。 十分钟就能上手docker?要不你也试试? 一、部署步骤 1…...
如何准备2024年的系统设计面试?
1 前言 如果你正在准备软件工程师或软件开发人员的面试,那么你可能知道由于其开放性质和广泛性,准备系统设计是多么困难,但同时你也不能忽略它。在软件工程界,如果你正在申请高级工程师/主管/架构师或更高级别的角色,系统设计是最受追捧的技能,也是整个过程中最重要的环节之一…...
【开源】基于JAVA的电子元器件管理系统
目录 一、摘要1.1 项目简介1.2 项目详细录屏 二、研究内容三、界面展示3.1 登录&注册&主页3.2 元器件单位模块3.3 元器件仓库模块3.4 元器件供应商模块3.5 元器件品类模块3.6 元器件明细模块3.7 元器件类型模块3.8 元器件采购模块3.9 元器件领用模块3.10 系统基础模块 …...
足底筋膜炎怎么治疗治愈
足底筋膜炎又称为跖筋膜炎,跖筋膜主要在足弓下方,它维持足弓稳定性,对于喜欢长期长跑、跳远,或者越野运动,或者部队中的士兵进行拉练,还有需要久坐或者久站的人群中,容易发生跖筋膜炎。治疗方法…...
Keil工程忽略文件.gitignore、自动删除脚本:keilkilll.bat、自动生成目录文件列表脚本
Keil工程忽略文件:.gitignore 忽略规则 *.rar *.o *.d *.crf *.htm *.dep *.map *.bak *.lnp *.lst *.ini *.iex *.sct *.scvd *.dbg* *.uvguix.* *Log.*#忽略.gitignore根目录下的文件夹,根据自己的需要修改 RTE/ Templates/ Examples/ OBJ/#不能忽略…...
软考高级职称哪个好考?明确给你答案
软考考试分为初、中、高三级,其中高级5个方向分别为系统分析师、信息系统项目管理师、网络规划设计师、系统架构设计师、系统规划与管理师。软考高级职称考什么好?有很多人是因为要评高级职称而选择参考软考高级资格考试,那么软考高级里哪个资…...
智能客服外包服务适用于哪些行业?
在当今快节奏的商业环境下,企业需要更高效、更智能且更灵活的客户服务解决方案。而智能客服外包服务正是满足这一需求的利器。不仅可以帮助企业提升客户服务的品质和效率,还能降低企业的运营成本。智能客服外包服务适用于哪些行业呢? 1.电子…...
数字化企业各业务模块模型
1.计划 1.1采购计划执行情况 序号 采购计划号 采购订单号 业务员 供应商 物料 数量 金额 计划入库日期 实际入库日期 状态 针对企业执行中或者未关闭的采购计划进行统计与分析,主要目的在于引领企业员工与领导关注长期在途的采购…...
WPF动画小知识
一、动画合集 创建一个Storyboard演示画板,在画板里对动画进行定义与处理。 常见动画类型 提醒:更多介绍可查看microsoft提供的相关文档 DoubleAnimation //普通Double型控制动画 DoubleAnimationUsingKeyFrames //Dou…...
数据结构 顺序表和链表
1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串.. 线性表在逻辑上是线性结构,也就说是连续的一条直线…...
LMI相机配置步骤,使用Gocator2550相机
在此之前可以先浏览我编写的相机SDK通用类和LMISDK,进行配套观看 https://blog.csdn.net/m0_51559565/article/details/134404394 //LMI相机SDK https://blog.csdn.net/m0_51559565/article/details/134403745 //相机通用类1.启动LMI加速器 LMI加速器用于将相机…...
掌握Python中的控制流语句:break, continue, quit的应用技巧详解
引言 在Python编程中,控制流语句是非常重要的一部分,它们可以帮助我们控制程序的执行流程。其中,break、continue和quit是常用的控制流语句,它们可以在循环中起到关键作用。本文将详细介绍这些控制流语句的应用技巧,帮…...
TS手动编译和自动编译方法
把 TS 文件编译成 JS 文件 安装 npm i -g typescript检查是否安装成功 tsc -v方法一 先通过 tsc 把 .ts 文件编译成 .js 文件,再通过 node 把 .js 文件运行 方法二 通过监视配置页面 初始化 tsc --init自动生成一个tsconfig.json 文件 点击进入tsconfig.js…...
机器学习与深度学习在地球物理勘探中的应用:基于电阻率数据预测极化率模型
1. 项目概述与核心价值在花岗岩这类地质条件复杂的地区搞勘探,最头疼的就是地下情况“看不清”。传统的电阻率(ERT)和激发极化(IP)联合反演,就像用一把刻度模糊的尺子去量一块表面坑洼不平的石头——面对高…...
电容损坏深度诊断,从外观到 ESR精准区分容衰与漏电
在 PCB 故障中,电容损坏占比超 40%,是当之无愧的 “头号杀手”。很多工程师仅靠 “鼓包漏液” 判断电容好坏,殊不知80% 的电容损坏是隐性的—— 外观平整但容值衰减、ESR 升高、轻微漏电,导致供电不稳、系统重启、噪声增大&#x…...
用Azure Kinect DK和Body Tracking SDK,5分钟实现一个实时人体骨骼点检测Demo(C++版)
5分钟实战:用Azure Kinect DK实现实时人体骨骼点追踪(C版) 当你第一次拿到Azure Kinect DK时,最令人兴奋的莫过于它强大的人体追踪能力。这款深度相机不仅能捕捉高清彩色图像,更能通过AI算法实时重建人体骨骼关节点。本…...
3分钟快速安装BetterNCM插件管理器,让你的网易云音乐功能翻倍
3分钟快速安装BetterNCM插件管理器,让你的网易云音乐功能翻倍 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼吗?想要解锁更多个…...
从单体到事件驱动的生死跃迁:DeepSeek架构委员会认证的6阶段迁移路线图(含风险热力图与回滚触发阈值表)
更多请点击: https://codechina.net 第一章:从单体到事件驱动的生死跃迁:DeepSeek架构委员会认证的6阶段迁移路线图(含风险热力图与回滚触发阈值表) 向事件驱动架构(EDA)演进不是功能迭代&…...
AB包相关知识
Lua与AB包/Addressables以及YooAsset 摘自千问: Lua 是菜谱(逻辑):决定了菜怎么做,味道如何。因为你需要随时换菜谱(热更新),所以菜谱不能死板地印在墙上(编译进主包&a…...
终极指南:Windows 10完美安装PL2303驱动,解决老旧USB转串口芯片兼容性问题
终极指南:Windows 10完美安装PL2303驱动,解决老旧USB转串口芯片兼容性问题 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 你是否还在为Windows…...
PostgreSQL Merge Join 大白话详解
用生活中最直观的例子,彻底搞懂 Merge Join 是什么、为什么快、什么时候用。一、先从生活场景开始 场景一:两摞乱序试卷找同学 期末考试,老师手里有两摞试卷: A 摞:数学试卷,500 份,乱序堆放B 摞…...
终极Windows风扇控制指南:FanControl让你的电脑安静又高效
终极Windows风扇控制指南:FanControl让你的电脑安静又高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendin…...
还在古法编程?OpenAI Codex 全自动编程!稳定中转 Token 保姆级教程
OpenAI Codex 从安装到进阶实战|终端 AI 编程完全指南(2026 最新) 摘要:OpenAI Codex 是目前最强大的终端 AI 编程工具,支持代码生成、项目重构、Bug 修复、脚本自动化、批量代码优化等全场景能力。本文从零起步&…...
