常見 ElastiCache 使用案例及 ElastiCache 如何提供協助 - Amazon ElastiCache

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

常見 ElastiCache 使用案例及 ElastiCache 如何提供協助

不論是提供最新的新聞、前 10 名排行榜、產品目錄或是出售活動門票,速度都是遊戲的重點。傳遞內容的速度,會顯著影響您網站和商業的成功與否。

在「對於耐心不足的 Web 使用者來說,一眨眼的等待時間也嫌太長」報導中,New York Times 指出,使用者可以注意到競爭網站之間 250 毫秒 (1/4 秒) 的差異。使用者傾向於放棄速度較慢的網站,而選擇速度較快的網站。Amazon 完成的測試,引自網頁載入時間與訪客之間的關聯,指出每載入 100 毫秒 (1/10 秒) 的負載時間,銷售會下降 1%。

當某人想要資料,若這些資料已經過快取,您就可以更迅速提供資料。無論是網頁還是影響商業決策的報告,都適用同樣的道理。您的企業是否能快取您的網頁、以最短的延遲將其傳遞?

很顯然,需要最大的項目,就是您最想要快取的。但為何不快取較不常用的項目? 即使是最最佳化的資料庫查詢或遠端API呼叫,也明顯比從記憶體內快取擷取平面金鑰慢。「明顯較慢」這件事,就會造成客戶流失。

下列範例說明使用 ElastiCache 可改善應用程式整體效能的一些方法。

記憶體內資料存放區

記憶體內鍵/值存放區的主要目的,是提供超快速 (亞毫秒級延遲) 和經濟實惠的資料複本存取。大多數資料存放區,都具有經常存取但不常更新的資料區域。此外,對資料庫進行查詢,總是比在鍵/值對快取中找出鍵要更慢,且費用更高。執行某些資料庫查詢的費用特別昂貴。其中一個例子是涉及跨多個資料表之聯結的查詢,或具有密集型計算的查詢。透過快取這類查詢結果,您只需支付查詢的一次性費用。然後就可以快速擷取資料多次,而無需重新執行查詢。

我應該快取什麼?

在決定要快取哪些資料時,請考慮下列因素:

速度和費用 - 從資料庫取得資料,總是比從快取要來得慢,且費用更高。某些資料庫查詢在本質上比其他查詢更慢且更昂貴。例如,在多個資料表上執行聯結查詢,與簡單的單一資料表查詢相比,前者的速度明顯較慢且費用更高。如果需要以較慢且費用較高的查詢方式來取得所需資料,則適合改為快取。如果需要以相對快速和簡單的查詢來取得資料,仍可能適合使用快取,具體取決於其他因素。

資料和存取模式 - 判斷要快取的內容也涉及了解資料本身及其存取模式。例如,快取快速變動或很少存取的資料並沒有意義。若要讓快取提供真正的益處,資料應為相對靜態且經常存取。例如社群媒體網站上的個人資料。相反地,如果快取資料不能提供速度或成本優勢,則不建議快取資料。例如,快取會傳回搜尋結果的網頁並沒有意義,因為查詢和結果通常都是獨一無二的。

過時 - 根據定義,快取的資料是過時的資料。即使某些情況下並非過時,仍應該一律視為過時。若要判斷您的資料是否適合快取,您需要判斷應用程式對過時資料的容錯能力。

您的應用程式或許能承受某個內容中的過時資料,但不能承受另一個內容中的過時資料。例如,假設您的網站提供公開交易股票價格。在附有免責聲明,表示可能有 n 分鐘延遲的情況下,您的客戶可能會接受一定程度的過時性。但是,如果是向銷售或購買的經紀人提供股票價格,您需要即時的資料。

如果下列描述成立,便可考慮快取您的資料:

  • 與快取擷取相比,取得您資料的速度緩慢或費用高昂。

  • 使用者經常存取您的資料。

  • 您的資料相對保持無變動,或者資料會快速變動但過時性不夠成大問題。

如需詳細資訊,請參閱 Memcached 的快取策略

遊戲排行榜

使用 Valkey 或 Redis OSS排序集,您可以將排行榜的運算複雜性從應用程式移至叢集。

排行榜 (例如遊戲得分的前 10 名) 的運算方式很複雜。當有大量玩家同時遊戲且分數不斷變動時,運算尤其複雜。Valkey 和 Redis OSS排序集保證唯一性和元素排序。使用排序集,每次將新元素新增至排序集時,都會即時重新排序。然後會以正確的數字順序新增至集合。

在下圖中,您可以看到 ElastiCache 遊戲排行榜的運作方式。

影像: ElastiCache 遊戲排行榜圖表
範例 Valkey 或 Redis OSS排行榜

在此範例中,四名玩家及其分數會透過 ZADD 輸入排序清單中。ZREVRANGEBYSCORE 命令會依照分數列出玩家,由高至低。接下來,ZADD 會用於更新 June 的分數 (透過覆寫現有項目)。最後,ZREVRANGEBYSCORE 會依照分數由高至低列出玩家。清單顯示 June 的排名已上升。

ZADD leaderboard 132 Robert ZADD leaderboard 231 Sandra ZADD leaderboard 32 June ZADD leaderboard 381 Adam ZREVRANGEBYSCORE leaderboard +inf -inf 1) Adam 2) Sandra 3) Robert 4) June ZADD leaderboard 232 June ZREVRANGEBYSCORE leaderboard +inf -inf 1) Adam 2) June 3) Sandra 4) Robert

下列命令可讓 June 得知她在所有玩家中的排名。由於排名為零,因此 6 月會ZREVRANK傳回 1,其處於第二個位置。

ZREVRANK leaderboard June 1

如需詳細資訊,請參閱有關排序集的 Valkey 文件

訊息 (Pub/Sub)

當您傳送電子郵件時,您會將郵件傳送給一或多個指定的收件人。在 Valkey 和 Redis OSS pub/sub 範式中,您會將訊息傳送至特定頻道,不知道誰會收到訊息。訂閱該頻道的人員會收到訊息。例如,假設您訂閱了 news.sports.golf 頻道。您和 news.sports.golf 頻道的其他訂閱者,都會收到發佈至 news.sports.golf 頻道的所有訊息。

Pub/sub 功能與任何金鑰空間無關。因此,在任何層級上都不會造成干擾。在下圖中,您可以找到使用 Valkey 和 Redis 傳送訊息的 ElastiCache圖例OSS。

映像: ElastiCache 訊息圖表

訂閱

若要接收某頻道的訊息,您需訂閱該頻道。您可以訂閱單一頻道、多個頻道或所有匹配某種模式的頻道。若要取消訂閱,請從您訂閱的指定頻道取消訂閱。或者,如果您使用模式比對功能進行訂閱,取消訂閱時也會使用與之前相同的模式。

範例 - 訂閱單一頻道

若要訂閱單一頻道,請使用 SUBSCRIBE命令來指定您要訂閱的頻道。在下列範例中,用戶端訂閱了 news.sports.golf 頻道。

SUBSCRIBE news.sports.golf

一段時間後,用戶端會使用指定取消訂閱之頻道的UNSUBSCRIBE命令來取消對頻道的訂閱。

UNSUBSCRIBE news.sports.golf
範例 - 訂閱多個特定頻道

若要訂閱多個特定頻道,請使用 SUBSCRIBE命令列出頻道。在下列範例中,用戶端同時訂閱了news.sports.golfnews.sports.soccernews.sports.skiing 頻道。

SUBSCRIBE news.sports.golf news.sports.soccer news.sports.skiing

若要取消特定頻道的訂閱,請使用 UNSUBSCRIBE命令並指定要取消訂閱的頻道。

UNSUBSCRIBE news.sports.golf

若要取消多個頻道的訂閱,請使用 UNSUBSCRIBE命令並指定要取消訂閱的頻道。

UNSUBSCRIBE news.sports.golf news.sports.soccer

若要取消所有訂閱,請使用 UNSUBSCRIBE 並指定每個頻道。或使用 UNSUBSCRIBE 且不指定頻道。

UNSUBSCRIBE news.sports.golf news.sports.soccer news.sports.skiing

UNSUBSCRIBE
範例 - 使用模式匹配的訂閱

用戶端可以使用 PSUBSCRIBE命令訂閱符合模式的所有頻道。

在下列範例中,用戶端訂閱了所有體育頻道。您不需要分別列出所有體育頻道,如同使用 SUBSCRIBE。而是可透過 PSUBSCRIBE 命令使用模式比對功能。

PSUBSCRIBE news.sports.*
範例 取消訂閱

若要取消訂閱這些頻道,請使用 PUNSUBSCRIBE 命令。

PUNSUBSCRIBE news.sports.*
重要

傳送至 【P】SUBSCRIBE 命令和傳送至 【P】UNSUBSCRIBE 命令的頻道字串必須相符。您不能對 news.* 使用 PSUBSCRIBE、對 news.sports.* 使用 PUNSUBSCRIBE,也不能對 news.sports.golf 使用 UNSUBSCRIBE

發布

若要向某頻道中的所有訂閱者傳送訊息,請使用 PUBLISH 命令,指定頻道和訊息。下列範例將「這是個晴朗的星期六,我要前往連結了。」訊息發佈 到 news.sports.golf 頻道。

PUBLISH news.sports.golf "It's Saturday and sunny. I'm headed to the links."

用戶端無法發佈至訂閱的頻道。

如需詳細資訊,請參閱 Valkey 文件中的 Pub/Sub

建議資料 (雜湊)

在 Valkey INCR 或 Redis DECR中使用 或 OSS可讓編譯建議變得簡單。當每次有使用者「喜歡」某項產品時,會遞增 item:productID:like 計數器。當每次有使用者「不喜歡」某項產品時,會遞增 item:productID:dislike 計數器。使用雜湊,您也可以維護喜歡或不喜歡產品的每個人清單。

範例 - 喜歡和不喜歡
INCR item:38923:likes HSET item:38923:ratings Susan 1 INCR item:38923:dislikes HSET item:38923:ratings Tommy -1

ElastiCache 客戶見證

若要了解 Airbnb、、PBSEsri 等企業如何使用 Amazon ElastiCache 來擴展業務,並改善客戶體驗,請參閱 Others 如何使用 Amazon。 ElastiCache

您也可以觀看教學影片,了解其他ElastiCache 客戶使用案例。