Ich habe viele Beiträge und die Anzahl der Upvotes und Downvotes für jeden Beitrag wird in meiner Postgres-Datenbank gespeichert. Ich betreibe einen Gin Golang-Server, eine mobile Flutter-App und sende Benachrichtigungen an Benutzer über FCM (Firebase Cloud Messaging).
Zuallererst ist dieses Problem leicht zu lösen. Ich weiß einfach nicht, wie ich es effektiv lösen soll. Ich möchte jedem Benutzer ungefähr einmal am Tag die am besten bewerteten Beiträge senden. Ich möchte jedoch Benachrichtigungen an Benutzer senden, die auf der Zeit basieren, zu der sie in der App am aktivsten sind (nicht alle auf einmal, d. h. nicht nur jeden Tag um 12 Uhr).
Angenommen, ich habe ein Feld mit dem Namen
, das bei Interaktion aktualisiert wird. Ich aktualisiere ständig basierend auf der Benutzeraktivität.
active_times
的表中跟踪每个用户的一个条目,该条目有一个我根据他们与移动应用程序(如 Postgres 中的 time
Mein Bauch sagt mir, dass ich alle ~2 Stunden einen Cron-Job auf meinem Server ausführen sollte, der innerhalb dieses ~2-Stunden-Fensters nach denjenigen fragt, die
time
字段的所有用户。然后,我将置顶帖子通知发送给这些用户。然后,我在 Redis 缓存中保存一个映射 user_id
s 到 time_notification_recieved
s 的哈希集,并将自动过期设置为大约 12 小时。对于每个后续查询,我首先检查Redis中的if user_id,不要发送给该用户,否则,发送并将id添加到Redis
Dies ermöglicht es mir, ein Fenster zu haben, wenn sich der Benutzer plötzlich anmeldet oder direkt in der App interagiert, nachdem die Benachrichtigung an ihn gesendet wurde (wobei seine Aktivität verschoben wird auf
.
time
),他们最多会在 12 小时内收到通知稍后,但通常由于其活动窗口不会发生太大变化,因此大约每 24 小时(每天)发送一次。例如,这与他们的 time
Bemerkungen
Ist Redis auch dafür gedacht? Gibt es einen völlig anderen Ansatz, den ich dafür wählen kann?
Danke!
Richtige AntwortIch hätte (zum Beispiel) eine separate Spalte in der Benutzertabelle mit „Nächste Benachrichtigungszeit“ zum Planen von Benachrichtigungen. Ich schätze, Sie möchten nicht in eine Situation geraten, in der ein Benutzer das System verwendet und dann sofort eine Benachrichtigung erhält, oder?
Um zu bestimmen, wann Benachrichtigungen gesendet werden sollen, können Sie eine Tabelle mit einem Mini-Aktivitätshistogramm verwenden
Benutzer-ID
Das obige ist der detaillierte Inhalt vonVerwenden Sie Redis, um einmal täglich Nachrichten über FCM an Benutzer zu senden, basierend auf ihren sich ändernden Zeitpräferenzen, um Duplikate zu vermeiden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!