You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在其他端点提交新数据时实时仅返回新增项实现列表实时更新

两种思路可行性分析

  • 思路a(对比两次全量查询的差集返回增量):可行但不推荐。该方案不需要额外依赖,实现门槛低,仅适合数据规模极小的测试场景。缺点很明显:数据量增长后全量查询、差集比对的开销会持续上升,固定1秒的轮询间隔也会带来最高1秒的推送延迟,资源利用率和实时性都很差。
  • 思路b(监听数据插入事件直接推送增量):是该场景下的最优可行方案,实时性和资源消耗表现都远优于思路a,也是实时流推送场景的标准实现思路。

具体技术实现方案

核心逻辑是用一个全局可订阅的事件流桥接数据写入操作和SSE输出流:

  1. 先声明一个支持多订阅者的响应式事件处理器,比如Spring内置的Sink.many().multicast().onBackpressureBuffer()作为新增歌曲的事件总线,所有客户端的SSE连接都可以订阅这个总线的事件。
  2. 改造getAllSongs接口的返回逻辑:接口被调用后,先一次性返回repository.findAll()查询到的全量历史数据,再把上面的事件总线流拼接在全量数据之后,保持SSE连接不中断。
  3. 改造addSong接口:歌曲保存到数据库成功后,将新增的歌曲对象发送到事件总线中,所有已订阅的客户端都会实时收到这条增量数据。

如果你的项目使用的是R2DBC这类响应式数据库,还可以直接对接数据库的CDC(变更数据捕获)能力监听插入事件,不用手动改造addSong接口发送事件,也能覆盖其他非接口写入的数据变更场景。如果你的服务是分布式部署的,可以用Redis发布订阅、Kafka这类消息中间件替代内存事件总线,避免单节点事件无法跨实例同步的问题。

内容的提问来源于stack exchange,提问作者MrFisherman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:45:04