저는 게시물이 많고 각 게시물의 찬성 및 반대 투표 수는 내 Postgres 데이터베이스에 저장됩니다. 저는 Gin Golang 서버, Flutter 모바일 앱을 실행하고 FCM(Firebase Cloud Messaging)을 사용하여 사용자에게 알림을 보내고 있습니다.
우선 이 문제는 해결하기 쉽습니다. 효과적으로해결하는 방법을 모르겠습니다.
가장 많이 득표된 게시물을 대략 하루에 한 번씩 각 사용자에게 보내려고 합니다. 그러나 저는 사용자가 앱에서 가장 활동적인 시간(한 번에 모두가 아닌, 즉 매일 오전 12시가 아닌)을 기준으로 사용자에게 알림을 보내고 싶습니다.
그러므로 상호 작용 시 업데이트되는 active_times
的表中跟踪每个用户的一个条目,该条目有一个我根据他们与移动应用程序(如 Postgres 中的 time
)이라는 필드가 있다고 가정해 보겠습니다. 사용자 활동을 기반으로 지속적으로 업데이트하고 있습니다.
내 직감으로는 ~2시간마다 내 서버에서 ~2시간 내에 time
字段的所有用户。然后,我将置顶帖子通知发送给这些用户。然后,我在 Redis 缓存中保存一个映射 user_id
s 到 time_notification_recieved
s 的哈希集,并将自动过期设置为大约 12 小时。对于每个后续查询,我首先检查Redis中的if user_id,不要发送给该用户,否则,发送并将id添加到Redis
를 가진 사람들을 쿼리하는 cron 작업을 실행해야 한다고 말합니다.
이렇게 하면 알림이 전송된 후 사용자가 갑자기 로그인하거나 앱에서 직접 상호작용하는 경우 창을 가질 수 있습니다(활동을 time
),他们最多会在 12 小时内收到通知稍后,但通常由于其活动窗口不会发生太大变化,因此大约每 24 小时(每天)发送一次。例如,这与他们的 time
로 전환하면 창은 오후 2시가 됩니다. 그런 다음 알림을 보낸 후에는 오후 4시에 업데이트되었으며 2시간 이내에 다시 공격을 받았습니다
이것이 효과적인 방법인가요? 처음에는 Postgres 데이터베이스를 사용하여 모든 ID를 저장하는 것을 고려했지만 이로 인해 데이터베이스가 금방 압도될 수 있다고 생각했습니다.
그리고 Redis는 이런 용도인가요? 이를 위해 취할 수 있는 완전히 다른 접근 방식이 있나요?
감사합니다!
수백만 명의 사용자가 있을 때까지는 몇 시간마다 하는 모든 작업이 매우 효율적일 것입니다.
예를 들어 알림 예약을 위해 사용자 테이블에 "다음 알림 시간"이 포함된 별도의 열이 있습니다. 사용자가 시스템을 사용하다가 즉시 알림을 받는 상황을 원하지는 않으실 것 같은데요?
알림을 보낼 시기를 결정하려면 다음과 같은 미니 활동 히스토그램이 있는 표를 사용할 수 있습니다.
위 내용은 중복을 피하기 위해 Redis를 사용하여 변화하는 시간 기본 설정에 따라 FCM을 통해 하루에 한 번 사용자에게 메시지를 보냅니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!