当前位置: 首页 > wzjs >正文

模板企业快速建站软文广告的案例

模板企业快速建站,软文广告的案例,无锡兼职做网站,如何做网站制作📌 1. 场景背景 最近做项目,使用到了延迟队列。场景是这样的:在在线视频学习中,学生每隔几秒上报当前学习进度,为避免频繁写数据库、提升性能,采用以下方案: 先写入 Redis,再延迟一…

📌 1. 场景背景

最近做项目,使用到了延迟队列。场景是这样的:在在线视频学习中,学生每隔几秒上报当前学习进度,为避免频繁写数据库、提升性能,采用以下方案:

先写入 Redis,再延迟一定时间(如20秒)后持久化到数据库。


⚙️ 2. 技术方案概览

使用 Java 提供的 DelayQueue​ 处理延迟任务。

关键组成:

组件说明
DelayTask<T>封装延迟任务,定义触发时间
DelayQueue用于存放所有的延迟任务,按时间顺序触发
LearningRecordsDelayTaskHandler延迟任务的核心调度类

🧩 3. DelayTask<T>​ 延迟任务封装类

public class DelayTask<T> implements Delayed {private T data;private long deadlineNanos;public DelayTask(T data, Duration delayTime) {this.data = data;this.deadlineNanos = System.nanoTime() + delayTime.toNanos();}@Overridepublic long getDelay(TimeUnit unit) {return unit.convert(Math.max(0, deadlineNanos - System.nanoTime()), TimeUnit.NANOSECONDS);}@Overridepublic int compareTo(Delayed o) {long diff = getDelay(TimeUnit.NANOSECONDS) - o.getDelay(TimeUnit.NANOSECONDS);return diff > 0 ? 1 : diff < 0 ? -1 : 0;}
}

✅ 说明:

  • deadlineNanos​:任务到期时间(单位:纳秒)
  • 实现 Delayed​ 接口,用于 DelayQueue​ 排序与调度

🧠 4. LearningRecordsDelayTaskHandler​ 任务处理类

主要职责:

  • 管理延迟任务队列
  • 处理过期任务
  • 管理 Redis 缓存的读写

队列定义:

private final DelayQueue<DelayTask<RecordTaskData>> queue = new DelayQueue<>();

🧵 5. 初始化与销毁

@PostConstruct
public void init() {CompletableFuture.runAsync(this::handleDelayTask);
}@PreDestroy
public void destroy() {begin = false;
}
  • 使用异步线程后台监听队列
  • 应用关闭时中止处理线程

🔄 6. 延迟任务处理流程

while (begin) {DelayTask<RecordTaskData> task = queue.take();...
}

流程图:

前端上报进度↓
写入 Redis 缓存↓
提交延迟任务(20秒后)↓
20秒后从 DelayQueue 取出任务↓
比较任务数据与当前 Redis 数据→ 相同:说明用户已停留 → 写库→ 不同:用户仍在更新 → 放弃

💾 7. Redis 缓存结构与读写

  • 键:learning:record:{lessonId}
  • 字段:{sectionId}
  • 值:RecordCacheData​ 的 JSON 字符串

写入缓存:

String key = "learning:record:" + lessonId;
redisTemplate.opsForHash().put(key, sectionId, json);
redisTemplate.expire(key, Duration.ofMinutes(1));

读取缓存:

Object cacheData = redisTemplate.opsForHash().get(key, sectionId.toString());

📤 8. 添加任务到队列

queue.add(new DelayTask<>(new RecordTaskData(record), Duration.ofSeconds(20)));
  • 提交一个包含用户观看记录的延迟任务,20秒后触发处理

✅ 9. 优点总结

优点描述
⏳ 延迟写库降低数据库压力,避免频繁更新
🔁 防抖处理用户频繁上报只处理最后一次
🧠 最终一致性延迟处理保证数据最终落库
💡 简单高效基于 JDK 自带 DelayQueue,无需额外中间件

http://www.dtcms.com/wzjs/377234.html

相关文章:

  • 中铁三局招聘官网淘宝seo
  • 学校网站logo怎么做推广app拉人头赚钱
  • 网站转化微信小程序seo关键词是什么
  • wordpress迁移后无法登录桂林网站优化
  • 国外做网站侵权seo扣费系统
  • 电子商务网站类型网站为什么要做seo
  • wordpress如何修改代码西安seo关键词排名
  • 手机app与电脑网站的区别东莞外贸推广公司
  • 国内所有免费b2b平台有哪些怎样优化标题关键词
  • 投资公司名称大全简单大气seo排名优化首页
  • 石家庄的建筑公司seo百度关键字优化
  • 长治制作公司网站的公司网络服务提供者
  • 个人网站做电影网站青柠影院免费观看电视剧高清
  • 代购网站系统互联网推广营销
  • 网站建设的工作流程衡阳百度推广
  • 做同城网站还有机会吗2023年10月爆发新冠
  • 小学微机作业做网站福州seo排名优化
  • 糖果网站建设策划书模板肇庆seo排名外包
  • wordpress 主题大全网站关键词优化教程
  • 网站建设有什么岗位职责宜昌网站seo收费
  • 网站建设公司哪个好百度2019旧版本下载
  • 外国男男做暧暧视频网站深圳网络推广案例
  • 云台山旅游景区网站建设内容链接买卖
  • 做网站每年都要费用的吗优化一下
  • 做网站建设需要什么资质百度免费推广怎么做
  • 网站背景怎么弄广告投放的方式有哪些
  • 沈阳网站建设工作室电脑培训学校
  • 网站建设ppt演示文稿神马搜索seo优化排名
  • 深圳通公司网站网络营销推广有哪些方法
  • 建站工具cms网站备案查询官网