Day4学习笔记
要控制定时任务在同一时间只有 1 个服务器能执行。(怎么做?)
- 分离定时任务程序和主程序,只在 1 个服务器运行定时任务。成本太大
- 写死配置,每个服务器都执行定时任务,但是只有 ip 符合配置的服务器才真实执行业务逻辑,其他的直接返回。成本最低;但是我们的 IP 可能是不固定的,把 IP 写的太死了
- 动态配置,配置是可以轻松的、很方便地更新的(代码无需重启),但是只有 ip 符合配置的服务器才真实执行业务逻辑。问题:服务器多了、IP 不可控还是很麻烦,还是要人工修改
- 数据库
- Redis
- 配置中心(Nacos、Apollo、Spring Cloud Config)
- 分布式锁,只有抢到锁的服务器才能执行业务逻辑。坏处:增加成本;好处:不用手动配置,多少个服务器都一样。
单机就会存在单点故障。
- Redis 如果是集群(而不是只有一个 Redis),如果分布式锁的数据不同步怎么办?
-
Redis + lua 脚本实现
Redisson 实现分布式锁
-
定义:Java 客户端,数据网格
-
实现了很多 Java 里支持的接口和数据结构
-
Redisson 是一个 java 操作 Redis 的客户端,提供了大量的分布式数据集来简化对 Redis 的操作和使用,可以让开发者像使用本地集合一样使用 Redis,完全感知不到 Redis 的存在。
- spring boot starter 引入(不推荐,版本迭代太快,容易冲突)https://github.com/redisson/redisson/tree/master/redisson-spring-boot-starter
- 直接引入: Quick start(快速开始)Quick start
打包测试
-
maven-package打包,生成target文件。cd进去相应文件夹。
-
在使用Java命令设置端口启动项目。java -jar .\yupao-backend-0.0.1-SNAPSHOT.jar --server.port=8081(8081端口);开启三个服务。(配置不同端口开三个进程进行测试)
看门狗机制(逾期问题)
-
开一个监听线程,如果方法还没执行完,就帮你重置 redis 锁的过期时间。
-
原理:
- 监听当前线程,默认过期时间是 30 秒,每 10 秒续期一次(补到 30 秒)
- 如果线程挂掉(注意 debug 模式也会被它当成服务器宕机),则不会续期
lock.tryLock(0, -1, TimeUnit.MILLISECONDS)//其中-1表示不会在完成前释放,会自动续期
Redis和Redisson区别
- 后者更多应用于分布式场景,没有需求可以不上redissson
Optional.ofNullable(...)
.orElse(0)
-
作用:创建一个
Optional
容器,它可以包含一个非空值或为空(即不包含任何值)。 -
参数:接受一个可能为
null
的值作为参数。如果参数为null
,则创建一个空的Optional
;否则,创建一个包含指定值的Optional
。 -
特点:
- 处理
null
值:与Optional.of()
不同,ofNullable()
可以安全地接受null
参数而不会抛出异常。 - 避免 NullPointerException:通过将可能为
null
的值包装在Optional
中,可以避免直接操作null
值时可能出现的NullPointerException
。
- 处理
-
作用:从
Optional
中提取并返回实际值。如果Optional
为空(即原值为null
),则返回提供的默认值。 -
参数:提供一个默认值,在
Optional
为空时使用。在这个例子中,默认值是0
。 -
返回值:最终返回的是
team.getStatus()
的值(如果不是null
),或者是默认值0
(如果team.getStatus()
返回null
)。
java8特性,相较判空代码更优雅
@Transactional事务注解确保数据一致性
- 应用场景:
步骤都涉及到对数据库的操作。如果其中一个步骤失败(例如,在移除关联信息时遇到问题),而其他步骤已经完成(如已经检查了权限),那么就会导致数据不一致。通过将这些操作放在一个事务中,可以确保要么所有操作都成功,要么没有操作被应用,从而保持数据的一致性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具