From 44b7abcd0fe15c0df846d4dd44f7b77aa82e5604 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Wed, 28 Oct 2026 18:51:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(playback):=20=E5=88=A0=E9=99=A4=E8=A7=82?= =?UTF-8?q?=E7=9C=8B=E5=8E=86=E5=8F=B2=E6=97=B6=E5=90=8C=E6=AD=A5=E6=B8=85?= =?UTF-8?q?=E7=90=86=E8=BF=9B=E5=BA=A6=E7=BC=93=E5=86=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 缓冲已是读接口的权威来源,只删库行会被读覆盖层读回、并被下一次落库把行复活。 缓冲补 remove/clear(HDEL/DEL),删除路径先清缓冲再删库行,读覆盖层按库行 deleted 过滤;落库时缓冲状态已失效的条目直接丢弃,不再整批退回队列。 --- .../playback/service/WatchProgressBuffer.java | 28 +++++++++++++++ .../service/WatchProgressService.java | 34 ++++++++++++++----- 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/fruitshorts-module-playback/src/main/java/com/fruitshorts/playback/service/WatchProgressBuffer.java b/fruitshorts-module-playback/src/main/java/com/fruitshorts/playback/service/WatchProgressBuffer.java index 3dc36c2..3cf622b 100644 --- a/fruitshorts-module-playback/src/main/java/com/fruitshorts/playback/service/WatchProgressBuffer.java +++ b/fruitshorts-module-playback/src/main/java/com/fruitshorts/playback/service/WatchProgressBuffer.java @@ -93,6 +93,34 @@ public class WatchProgressBuffer { } } + /** + * 删除某部剧的缓冲状态,用于用户删除单条观看记录。 + * + *
缓冲是读接口的权威来源,删库行必须同步删缓冲,否则会被读覆盖层读回;
+ * 同时缓冲状态消失后,dirty 队列里该条引用在落库时会被丢弃(见
+ * {@code WatchProgressService#flushRefs}),不会再被写回库。
+ */
+ public boolean remove(InteractionIdentity identity, long dramaId) {
+ try {
+ redis.opsForHash().delete(BUF_KEY_PREFIX + identityKey(identity), Long.toString(dramaId));
+ return true;
+ } catch (Exception e) {
+ log.warn("观看进度缓冲删除失败: {}", e.getMessage());
+ return false;
+ }
+ }
+
+ /** 清空某身份的全部缓冲状态,用于用户清空观看历史。 */
+ public boolean clear(InteractionIdentity identity) {
+ try {
+ redis.delete(BUF_KEY_PREFIX + identityKey(identity));
+ return true;
+ } catch (Exception e) {
+ log.warn("观看进度缓冲清空失败: {}", e.getMessage());
+ return false;
+ }
+ }
+
/** 读单个剧的缓冲状态;无缓冲或解码失败返回 null。 */
public BufferedProgress get(InteractionIdentity identity, long dramaId) {
return get(identityKey(identity), dramaId);
diff --git a/fruitshorts-module-playback/src/main/java/com/fruitshorts/playback/service/WatchProgressService.java b/fruitshorts-module-playback/src/main/java/com/fruitshorts/playback/service/WatchProgressService.java
index 27f486c..cd4246b 100644
--- a/fruitshorts-module-playback/src/main/java/com/fruitshorts/playback/service/WatchProgressService.java
+++ b/fruitshorts-module-playback/src/main/java/com/fruitshorts/playback/service/WatchProgressService.java
@@ -279,14 +279,18 @@ public class WatchProgressService {
List