> 백엔드 개발 > Golang > 중복을 피하기 위해 Redis를 사용하여 변화하는 시간 기본 설정에 따라 FCM을 통해 하루에 한 번 사용자에게 메시지를 보냅니다.

중복을 피하기 위해 Redis를 사용하여 변화하는 시간 기본 설정에 따라 FCM을 통해 하루에 한 번 사용자에게 메시지를 보냅니다.

王林
풀어 주다: 2024-02-06 09:00:09
앞으로
713명이 탐색했습니다.

使用 Redis,根据用户不断变化的时间偏好,通过 FCM 每天向用户发送一次消息,避免重复

질문 내용

Context

저는 게시물이 많고 각 게시물의 찬성 및 반대 투표 수는 내 Postgres 데이터베이스에 저장됩니다. 저는 Gin Golang 서버, Flutter 모바일 앱을 실행하고 FCM(Firebase Cloud Messaging)을 사용하여 사용자에게 알림을 보내고 있습니다.

건축 문제

우선 이 문제는 해결하기 쉽습니다. 효과적으로해결하는 방법을 모르겠습니다.

가장 많이 득표된 게시물을 대략 하루에 한 번씩 각 사용자에게 보내려고 합니다. 그러나 저는 사용자가 앱에서 가장 활동적인 시간(한 번에 모두가 아닌, 즉 매일 오전 12시가 아닌)을 기준으로 사용자에게 알림을 보내고 싶습니다.

그러므로 상호 작용 시 업데이트되는 active_times 的表中跟踪每个用户的一个条目,该条目有一个我根据他们与移动应用程序(如 Postgres 中的 time )이라는 필드가 있다고 가정해 보겠습니다. 사용자 활동을 기반으로 지속적으로 업데이트하고 있습니다.

내 직감으로는 ~2시간마다 내 서버에서 ~2시간 내에 time 字段的所有用户。然后,我将置顶帖子通知发送给这些用户。然后,我在 Redis 缓存中保存一个映射 user_ids 到 time_notification_recieveds 的哈希集,并将自动过期设置为大约 12 小时。对于每个后续查询,我首先检查Redis中的if user_id,不要发送给该用户,否则,发送并将id添加到Redis를 가진 사람들을 쿼리하는 cron 작업을 실행해야 한다고 말합니다.

이렇게 하면 알림이 전송된 후 사용자가 갑자기 로그인하거나 앱에서 직접 상호작용하는 경우 창을 가질 수 있습니다(활동을 time),他们最多会在 12 小时内收到通知稍后,但通常由于其活动窗口不会发生太大变化,因此大约每 24 小时(每天)发送一次。例如,这与他们的 time로 전환하면 창은 오후 2시가 됩니다. 그런 다음 알림을 보낸 후에는 오후 4시에 업데이트되었으며 2시간 이내에 다시 공격을 받았습니다

.

비고

이것이 효과적인 방법인가요? 처음에는 Postgres 데이터베이스를 사용하여 모든 ID를 저장하는 것을 고려했지만 이로 인해 데이터베이스가 금방 압도될 수 있다고 생각했습니다.

그리고 Redis는 이런 용도인가요? 이를 위해 취할 수 있는 완전히 다른 접근 방식이 있나요?

감사합니다!


정답


수백만 명의 사용자가 있을 때까지는 몇 시간마다 하는 모든 작업이 매우 효율적일 것입니다.

예를 들어 알림 예약을 위해 사용자 테이블에 "다음 알림 시간"이 포함된 별도의 열이 있습니다. 사용자가 시스템을 사용하다가 즉시 알림을 받는 상황을 원하지는 않으실 것 같은데요?

알림을 보낼 시기를 결정하려면 다음과 같은 미니 활동 히스토그램이 있는 표를 사용할 수 있습니다.

    사용자 ID
  • 시간
  • 카운터
그러면 사용자가 "활동"을 수행할 때마다 카운터가 증가합니다. 그런 다음 "다음에 알림을 보낼 시간"을 계산할 때 이 표를 보고 특정 사용자에게 가장 적합한 시간을 찾을 수 있습니다. 시간이 지남에 따라 알고리즘을 개선하여 단순한 활동 계산보다 더 복잡해질 수 있습니다. (사용자가 일반적으로 활동하기 한 시간 전에 알림을 받고 싶습니까? 또는 때때로 앱을 사용하지만 익숙하지 않은 시간 등)

위 내용은 중복을 피하기 위해 Redis를 사용하여 변화하는 시간 기본 설정에 따라 FCM을 통해 하루에 한 번 사용자에게 메시지를 보냅니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿