會員批次過期的方案

橘子味芬达水發表於2024-10-12

問題:有一張200W資料量的會員表,每個會員會有長短不一的到期時間,現在想在快到期之前傳送郵件通知提醒續費”該怎麼實現

問題解析

200W資料意味著資料量比較大
每個會員都有過期時間,需要能夠篩選出快過期的會員
很顯然,如果直接去透過select語句做篩選,就掉入坑裡了,因為這裡會存在效能問題,那接下來看一下一些相對比較合理的回答。

問題答案
關於這個問題,可以有三種解決方案:

第一種,系統不主動輪詢,而是等使用者登入到系統以後,觸發一次檢查。

如果發現會員的過期時間小於設定的閾值,就觸發一次彈窗和郵件提醒。

這種方式規避了輪詢問題,不會對資料庫和後端應用程式造成任何壓力。

缺點是,如果使用者一直不登陸,就一直無法實現會員過期,並且也無法提前去根據運營策略傳送續期的提醒訊息。

第二種,我們可以使用搜尋引擎,比如Solr、或者Elasticsearch。

把會員表裡面的會員id和會員到期時間儲存一份到搜尋引擎中。

搜尋引擎的優勢在於大資料量的快速檢索,並且具有高可擴充套件性和高可靠性,非常適合大規模資料的處理。

第三種,可以使用Redis來實現。

使用者開通會員以後,在Redis裡面儲存這個會員id,以及設定這個id的過期時間。

然後可以使用redis的過期提醒功能,把配置項 notify-keyspace-events改為notify-keyspace-events "Ex"當Redis裡面的key過期以後,會觸發一個key過期事件,我們可以在應用程式中監聽這個事件來處理。

第四種,可以直接使用MQ提供的延遲佇列,當使用者開通會員以後,直接計算這個會員的過期時間,然後傳送一個延遲訊息到MQ上,一旦訊息達到過期時間,消費者就可以消費這個訊息來觸發會員過期的提醒。

相關文章