Saya mempunyai banyak siaran dan kiraan undian naik dan undian turun bagi setiap siaran disimpan dalam pangkalan data Postgres saya. Saya menjalankan pelayan Gin Golang, apl mudah alih Flutter dan menghantar pemberitahuan kepada pengguna menggunakan FCM (Firebase Cloud Messaging).
Pertama sekali, masalah ini mudah diselesaikan. Cuma saya tak tahu macam mana nak berkesan menyelesaikannya.
Saya ingin menghantar siaran undian teratas kepada setiap pengguna kira-kira sekali sehari. Walau bagaimanapun, saya ingin menghantar pemberitahuan kepada pengguna berdasarkan masa mereka paling aktif dalam apl (bukan sekali gus, iaitu bukan hanya 12 pagi setiap hari).
Jadi, katakan saya mempunyai medan bernama active_times
的表中跟踪每个用户的一个条目,该条目有一个我根据他们与移动应用程序(如 Postgres 中的 time
) yang dikemas kini pada interaksi. Saya sentiasa mengemas kini berdasarkan aktiviti pengguna.
Nafsu saya memberitahu saya bahawa saya harus menjalankan tugas cron dalam pelayan saya setiap ~2 jam yang bertanya kepada mereka yang mempunyai time
字段的所有用户。然后,我将置顶帖子通知发送给这些用户。然后,我在 Redis 缓存中保存一个映射 user_id
s 到 time_notification_recieved
s 的哈希集,并将自动过期设置为大约 12 小时。对于每个后续查询,我首先检查Redis中的if user_id,不要发送给该用户,否则,发送并将id添加到Redis
dalam tempoh ~2 jam itu.
Ini akan membolehkan saya mempunyai tetingkap jika pengguna tiba-tiba log masuk atau berinteraksi secara langsung pada apl selepas pemberitahuan dihantar kepada mereka (menukar aktiviti mereka kepada time
),他们最多会在 12 小时内收到通知稍后,但通常由于其活动窗口不会发生太大变化,因此大约每 24 小时(每天)发送一次。例如,这与他们的 time
tetingkap ialah 2 petang, kemudian selepas saya menghantar pemberitahuan kepada mereka, ia adalah dikemas kini pada pukul 4 petang dan mereka diserang semula dalam masa 2 jam
Adakah ini kaedah yang berkesan? Saya pada mulanya mempertimbangkan untuk menggunakan pangkalan data Postgres untuk menyimpan semua ID ini, tetapi saya fikir ini mungkin akan mengatasi pangkalan data dengan cepat.
Selain itu, adakah ini untuk Redis? Adakah terdapat pendekatan yang sama sekali berbeza yang boleh saya ambil untuk melakukan ini?
Terima kasih!
Sehingga anda mempunyai berjuta-juta pengguna, apa sahaja yang anda lakukan setiap beberapa jam akan menjadi sangat berkesan.
Saya akan mempunyai lajur berasingan (contohnya) dalam jadual pengguna dengan "Masa Pemberitahuan Seterusnya" untuk menjadualkan pemberitahuan. Saya rasa anda tidak mahu berada dalam situasi di mana pengguna menggunakan sistem dan kemudian segera mendapat pemberitahuan, bukan?
Untuk menentukan masa untuk menghantar pemberitahuan, anda boleh menggunakan jadual dengan histogram aktiviti mini seperti itu
Kaunter kemudiannya dinaikkan setiap kali pengguna melakukan "aktiviti". Kemudian, apabila mengira "Lain kali untuk menghantar pemberitahuan", anda boleh melihat jadual ini untuk mencari masa terbaik untuk pengguna tertentu itu. Lama kelamaan anda boleh menambah baik algoritma supaya ia menjadi lebih kompleks daripada mengira aktiviti sahaja. (Mungkin anda ingin dimaklumkan sejam sebelum pengguna biasanya aktif? Atau mungkin masa apabila mereka kadangkala menggunakan apl itu tetapi tidak biasa dengannya, dsb.)
Atas ialah kandungan terperinci Gunakan Redis untuk menghantar mesej kepada pengguna sekali sehari melalui FCM berdasarkan perubahan pilihan masa mereka untuk mengelakkan pertindihan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!