常见 ElastiCache 使用案例及使用方法 ElastiCache 能够提供帮助 - 用于 Redis 的 Amazon ElastiCache
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

常见 ElastiCache 使用案例及使用方法 ElastiCache 能够提供帮助

无论是提供最新新闻、前10强排行榜、产品目录,还是为活动出售门票,速度都是游戏的名称。您的网站和业务的成功很大程度上受到您交付内容的速度的影响。

在"对于无病网络用户,“闪烁时间太长,无法等待”,”《纽约时报》指出,用户可以在竞争场所之间注册250毫秒(1/4秒)的差异。用户倾向于选择退出较慢的站点,从而支持较快的站点。在Amazon进行的测试,引述于 网页加载时间与访问者损失的关系,显示,负载时间每增加100毫秒(1/10秒),销售额下降1%。

如果有人需要数据,您可以更快地传递缓存的数据。不论是网页还是报表推动业务决策,都是如此。您的公司是否能在不缓存网页的情况下以可能最短的延迟传输网页?

看似很明显,您希望缓存请求最多的项目。但您为何不缓存请求次数极少的项目? 即使是最优化的数据库查询或远程API调用,也明显比从内存中缓存中检索扁平密钥慢。显著变慢是导致客户流失的原因。

下面的示例演示了使用 ElastiCache 提高应用程序的总体性能的一些方式。

内存中的数据存储

内存中密钥值存储的主要目的是,提供对数据副本的超快 (毫秒级延迟) 的、低成本的访问。大部分数据存储具有经常访问但很少更新的数据区域。此外,查询数据库将始终比在密钥值对缓存中查找密钥更慢且成本更高。某些数据库查询执行时特别昂贵。例如,涉及跨多个表联接的查询或具有密集计算的查询。通过缓存此类查询结果,您只需支付一次查询的价格。然后,您可以快速多次检索数据,而不必重新执行查询。

我应对哪些数据进行缓存?

在决定要缓存的数据时,请考虑这些因素:

速度和费用 – 从数据库获取数据总是比从缓存获取更慢且更昂贵。一些数据库查询原本就比其他查询更慢且费用更高。例如,在多个表上执行联接的查询比简单的单表查询要慢得多,而且成本更高。如果有趣的数据需要缓慢且昂贵的查询才能获取,则它适合用于缓存。如果获取数据需要相对快速简单的查询,则它可能仍是缓存的候选对象,具体取决于其他因素。

数据和访问模式 – 确定缓存内容还涉及了解数据本身及其访问模式。例如,缓存快速更改的数据或很少访问的数据没有意义。为了缓存提供真正的益处,数据应相对静态且经常访问。例如,社交媒体网站上的个人资料。另一方面,如果缓存没有速度或成本优势,您不希望缓存数据。例如,缓存返回搜索结果的网页没有意义,因为查询和结果通常是唯一的。

停滞 – 根据定义,缓存的数据是陈旧的数据。即使在某些情况下不是陈旧的,也应始终将其视为陈旧的。要判断您的数据是否适合缓存,请确定应用程序对陈旧数据的容忍度。

您的应用程序也许能够在一种环境中容忍过时数据,但不能在另一种环境中容忍过时数据。例如,假设您的站点服务于公开交易的股价。您的客户可能会接受一些陈旧陈旧的声明,并认为价格可能 n 分钟延迟。但是,如果您将股票价格提供给进行销售或购买的经纪人,则您需要实时数据。

如果符合以下条件,请考虑缓存您的数据:

  • 与缓存检索相比,您的数据速度慢或成本高。

  • 用户经常访问您的数据。

  • 您的数据保持相对相同,或者如果它快速变化,则不是一个大问题。

有关更多信息,请参阅下列内容:

游戏排行榜 (Redis 排序集)

Redis排序集将排行榜的计算复杂性从您的应用程序移到Redis群集。

排行榜,例如游戏的前10个分数,在计算上是复杂的。当存在大量并发玩家且不断改变得分时,尤其如此。Redis 排序集可确保唯一性和元素排序。使用 Redis 排序集时,每次将新元素添加到排序集时,它都会实时重新排序。然后以正确的数字顺序添加到集合。

在下图中,您可以看到 ElastiCache for Redis 游戏排行榜如何工作。

图片: ElastiCache for Redis 游戏排行榜图

例 - Redis 排行榜

在本示例中,四个游戏玩家及其分数使用 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

下列命令告诉了六月她在所有玩家中的排名。由于排名是从零开始的,因此 ZREVRANK 会为排名第二的 June 返回 1。

ZREVRANK leaderboard June 1

有关更多信息,请参见 Redis文档 关于已排序集。

消息发送 (Redis Pub/Sub)

当您发送电子邮件时,可将它发送给一个或多个指定收件人。在 pub/sub 范式中,您在不知道接收者 (如果有) 的情况下将消息发送到特定频道。接收消息的人员是订阅信道的人。例如,假设您订阅了 news.sports.golf 频道。您和所有其他订阅的 新闻.体育.高尔夫 通道,将任何消息发布到 新闻.体育.高尔夫.

Redis pub/sub 功能与任何密钥空间都没有关联。因此,它不会影响任何级别。在下图中,您可以找到 ElastiCache for Redis 消息的示意图。

图像:ElastiCache for Redis 消息图

Subscribing

要在信道上接收消息,请订阅信道。您可以订阅单个频道、多个指定频道或者与某个模式匹配的所有频道。要取消订阅,您可以取消订阅订阅时指定的信道。或者,如果您使用模式匹配方式进行订阅,您将使用您之前使用的模式进行取消订阅。

例 - 订阅单个频道

要订阅单个频道,可以使用 SUBSCRIBE 命令并指定您要订阅的频道。在以下示例中,客户将订阅 news.sports.golf 频道。

SUBSCRIBE news.sports.golf

过段时间以后,客户使用 UNSUBSCRIBE 命令并指定要取消订阅的频道,来取消对该频道的订阅。

UNSUBSCRIBE news.sports.golf

例 - 订阅多个指定的频道

要订阅多个特定频道,请使用 SUBSCRIBE 命令列出频道。在以下示例中,客户端订阅 新闻.体育.高尔夫, 新闻.体育.足球,和 新闻.体育.滑雪 通道。

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

要取消对特定信道的订阅,请使用“取消订阅”命令并指定取消订阅的信道。

UNSUBSCRIBE news.sports.golf

要取消多个信道的订阅,请使用“取消订阅”命令并指定要取消订阅的信道。

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 命令的频道字符串必须匹配。无法 PSUBSCRIBE新闻。*PUNSUBSCRIBE新闻.体育。*UNSUBSCRIBE新闻.体育.高尔夫.

Publishing

要将消息发送给所有用户至信道,请使用 PUBLISH 命令,指定信道和消息。以下示例发布了消息“ItSaturdayandsunny。我要前往链接。” 到 新闻.体育.高尔夫 通道。

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

客户端无法"发布到其订阅的信道。

有关更多信息,请参阅 Redis 文档中的 Pub/Sub

推荐数据(Redis 哈希)

在 Redis 中使用 INCR 或 DECR 简化了编译推荐。每当用户对产品“给予好评”时,您就会增加一个 item:productID:like 计数器。每当用户对产品“给予差评”时,您就会增加一个 item:productID:dislike 计数器。借助 Redis 哈希,您还可以维护一个已对产品给予好评或差评的人员的列表。下图说明 ElastiCache for Redis 实时分析存储。

图像:ElastiCache for Redis 实时分析存储

例 - 给予好评和给予差评

INCR item:38923:likes HSET item:38923:ratings Susan 1 INCR item:38923:dislikes HSET item:38923:ratings Tommy -1

其他 Redis 用法

博客文章 如何充分利用Redis,只需将其添加到您的堆栈 由SalvatoreSanfilippo讨论许多常见的数据库问题,以及如何使用Redis轻松解决这些问题。此方法从数据库中删除负载并提高性能。

ElastiCache 客户评价

了解Airbnb、PBS、Esri等企业如何使用 Amazon ElastiCache 以改善客户体验发展业务, 其他人如何使用 Amazon ElastiCache.

您还可以观看 ElastiCache 视频 以了解更多 ElastiCache 客户使用案例。