Day4学习笔记

要控制定时任务在同一时间只有 1 个服务器能执行。(怎么做?)

  1. 分离定时任务程序和主程序,只在 1 个服务器运行定时任务。成本太大
  2. 写死配置,每个服务器都执行定时任务,但是只有 ip 符合配置的服务器才真实执行业务逻辑,其他的直接返回。成本最低;但是我们的 IP 可能是不固定的,把 IP 写的太死了
  3. 动态配置,配置是可以轻松的、很方便地更新的(代码无需重启),但是只有 ip 符合配置的服务器才真实执行业务逻辑。问题:服务器多了、IP 不可控还是很麻烦,还是要人工修改
  • 数据库
  • Redis
  • 配置中心(Nacos、Apollo、Spring Cloud Config)
  1. 分布式锁,只有抢到锁的服务器才能执行业务逻辑。坏处:增加成本;好处:不用手动配置,多少个服务器都一样。

单机就会存在单点故障。

分布式锁

实战分布式锁

  1. Redis 如果是集群(而不是只有一个 Redis),如果分布式锁的数据不同步怎么办?
  • Redis + lua 脚本实现

  • 红锁

Redisson 实现分布式锁

  • 定义:Java 客户端,数据网格

  • 实现了很多 Java 里支持的接口和数据结构

  • Redisson 是一个 java 操作 Redis 的客户端,提供了大量的分布式数据集来简化对 Redis 的操作和使用,可以让开发者像使用本地集合一样使用 Redis,完全感知不到 Redis 的存在。

  1. spring boot starter 引入(不推荐,版本迭代太快,容易冲突)https://github.com/redisson/redisson/tree/master/redisson-spring-boot-starter
  2. 直接引入: Quick start(快速开始)Quick start

打包测试

  • maven-package打包,生成target文件。cd进去相应文件夹。

  • 在使用Java命令设置端口启动项目。java -jar .\yupao-backend-0.0.1-SNAPSHOT.jar --server.port=8081(8081端口);开启三个服务。(配置不同端口开三个进程进行测试)

看门狗机制(逾期问题)

  • 开一个监听线程,如果方法还没执行完,就帮你重置 redis 锁的过期时间。

  • 原理:

  1. 监听当前线程,默认过期时间是 30 秒,每 10 秒续期一次(补到 30 秒)
  2. 如果线程挂掉(注意 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事务注解确保数据一致性

  • 应用场景:
    步骤都涉及到对数据库的操作。如果其中一个步骤失败(例如,在移除关联信息时遇到问题),而其他步骤已经完成(如已经检查了权限),那么就会导致数据不一致。通过将这些操作放在一个事务中,可以确保要么所有操作都成功,要么没有操作被应用,从而保持数据的一致性。
posted @   Sha11ow  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示