

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 常见 ElastiCache 用例以及 ElastiCache 如何提供帮助
<a name="elasticache-use-cases"></a>

无论是提供最新资讯、前 10 位的排行榜、产品目录还是销售活动的门票，速度都是关键。传输内容的速度对您的网站和业务的成功有很大的影响。

《纽约时报》曾报道：“[对于没有耐心的 Web 用户而言，一眨眼的功夫都显得太长](http://www.nytimes.com/2012/03/01/technology/impatient-web-users-flee-slow-loading-sites.html?pagewanted=all&_r=0)，”用户会记下竞争网站之间的 250 毫秒（1/4 秒）的差异。用户会离开速度较慢的网站并转至速度较快的网站。亚马逊开展了一项测试（引自[网页加载时间与访客流失率的相关性](http://pearanalytics.com/blog/2009/how-webpage-load-time-related-to-visitor-loss/)），结果表明，加载时间每增加 100 毫秒 (1/10 秒)，销售额就会减少 1%。

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

直观上显著的一点是，您需要缓存请求次数最多的项目。但您为何不缓存请求次数极少的项目？ 甚至最优化的数据库查询或远程 API 调用的速度也比从内存中的缓存检索平面密钥的速度慢得多。*显著变慢*是导致客户流失的原因。

以下示例说明了使用 ElastiCache 可以提高应用程序整体性能的一些方法。

**Topics**
+ [

## 内存中的数据存储
](#elasticache-use-cases-data-store)
+ [

## 游戏排行榜
](#elasticache-for-redis-use-cases-gaming)
+ [

## 消息发送（Pub/Sub）
](#elasticache-for-redis-use-cases-messaging)
+ [

## 推荐数据（哈希）
](#elasticache-for-redis-use-cases-recommendations)
+ [

## 生成式人工智能应用程序的语义缓存
](#elasticache-for-redis-use-cases-semantic-caching)
+ [

## ElastiCache 客户感言
](#elasticache-use-cases-testimonials)

## 内存中的数据存储
<a name="elasticache-use-cases-data-store"></a>

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

### 我应对哪些数据进行缓存？
<a name="elasticache-use-cases-data-store-what-to-cache"></a>

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

**速度和费用** – 与从缓存中获取数据相比，从数据库中获取数据始终更慢且费用更高。一些数据库查询原本就比其他查询更慢且费用更高。例如，在多个表上执行连接的查询要比简单的单表查询更慢且费用更高。如果要使用速度慢且费用高的查询来获取所需数据，则这种情况适合使用缓存。如果要使用相对快速且简单的查询来获取数据，则这种情况可能也适合使用缓存，但具体取决于其他因素。

**数据和访问模式** – 确定要缓存的数据还需要了解数据本身及其访问模式。例如，对快速变化或很少访问的数据进行缓存是没有意义的。为了使缓存具有真实的益处，数据应相对静态且被频繁访问。例如，社交媒体网站上的个人资料。另一方面，如果对数据进行缓存不会带来速度或成本优势，那么您将无需缓存数据。例如，对返回搜索结果的网页进行缓存是没有意义的，因为这些查询与结果通常是唯一的。

**过时性**– 根据定义，缓存的数据是过时的数据。即使在某些情况下它不是过时的，它也应该始终被认为是过时的并按过时数据处理。在判断数据是否适合使用缓存时，请确定应用程序对过时数据的容忍性。

您的应用程序也许能够在一种环境中容忍过时数据，但不能在另一种环境中容忍过时数据。例如，假设您的站点提供公开交易的股票价格。您的客户可能会接受一些过时性，并且免责声明价格可能存在 *n* 分钟延迟。但是，在向卖出或买入股票的经纪人提供股票的价格时，您需要实时数据。

在以下情况下，需要考虑对数据进行缓存：
+ 与缓存检索相比，获取数据的速度更慢且费用更高。
+ 用户经常访问您的数据。
+ 您的数据保持相对相同，或者如果数据迅速发生变化，过时性不是一个大问题。

有关更多信息，请参阅 [Memcached 缓存策略](Strategies.md)。

## 游戏排行榜
<a name="elasticache-for-redis-use-cases-gaming"></a>

使用 Valkey 或 Redis OSS 排序集，您可以将排行榜的计算复杂性从应用程序转移到集群。

排行榜（例如，游戏的排名前 10 位的分数）的计算量比较大。当有大量并发玩家和不断变化的分数时，这一点尤其如此。Valkey 或 Redis OSS 排序集可确保唯一性和元素排序。对于排序集，每次有新元素加入排序集时，它都会实时重新排序。然后以正确的数字顺序添加到集合内。

在下图中，您可以看到 ElastiCache 游戏排行榜的工作原理。

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCache-Redis-Gaming.png)


**Example Valkey 或 Redis OSS 排行榜**  
在本示例中，使用 `ZADD` 将 4 个游戏玩家及其分数输入排序后的列表中。命令 `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 可以获知自己在所有玩家中的排名。由于排名是从零开始的，因此 *ZREVRANK* 会为排名第二的 June 返回 1。  

```
ZREVRANK leaderboard June 
1
```

有关更多信息，请参阅有关排序集的 [Valkey 文档](https://valkey.io/topics/sorted-sets/)。

## 消息发送（Pub/Sub）
<a name="elasticache-for-redis-use-cases-messaging"></a>

当您发送电子邮件时，可将它发送给一个或多个指定收件人。在 Valkey 和 Redis OSS pub/sub 范式中，您在不知道接收者（如果有）的情况下将消息发送到特定频道。消息的接收者是订阅该频道的人。例如，假设您订阅了 *news.sports.golf* 频道。您和所有其他订阅 *news.sports.golf* 频道的人会收到所有发布到 *news.sports.golf* 的消息。

Pub/sub 功能与任何键空间都没有关联。因此，它不会影响任何级别。在下图中，你可以找到使用 Valkey 和 Redis OSS 进行 ElastiCache消息传递的示例。

![\[\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/ElastiCache-Redis-PubSub.png)


### 订阅
<a name="elasticache-use-cases-messaging-subscribing"></a>

要接收某个频道的消息，请订阅该频道。您可以订阅单个频道、多个指定频道或者与某个模式匹配的所有频道。要取消订阅，您可以取消订阅在订阅时指定的频道。或者，如果您使用模式匹配订阅，则可以使用之前使用的相同模式取消订阅。

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

```
SUBSCRIBE news.sports.golf
```
过段时间以后，客户使用 UNSUBSCRIBE 命令并指定要取消订阅的频道，来取消对该频道的订阅。  

```
UNSUBSCRIBE news.sports.golf
```

**Example - 订阅多个指定的频道**  
要订阅多个特定频道，请使用 SUBSCRIBE 命令列出频道。在以下示例中，客户将订阅 *news.sports.golf*、*news.sports.soccer* 和 *news.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
```

**Example - 使用模式匹配进行订阅**  
客户可以使用 PSUBSCRIBE 命令订阅与某个模式匹配的所有频道。  
在以下示例中，客户将订阅所有体育频道。您不需要像使用 `SUBSCRIBE` 那样单个列出所有体育频道。相反，使用 `PSUBSCRIBE` 命令，您可以使用模式匹配。  

```
PSUBSCRIBE news.sports.*
```

**Example 取消订阅**  
要取消对这些频道的订阅，请使用 `PUNSUBSCRIBE` 命令。  

```
PUNSUBSCRIBE news.sports.*
```
+ 发送到 [P]SUBSCRIBE 命令与 [P]UNSUBSCRIBE 命令的频道字符串必须匹配。您不能 `PSUBSCRIBE` 到 *new.\$1* 和从 *news.sports\$1*`PUNSUBSCRIBE` 或从 *news.sports.golf*`UNSUBSCRIBE`。
+ `PSUBSCRIBE``PUNSUBSCRIBE`且不适用于 ElastiCache 无服务器。

### 发布
<a name="elasticache-for-redis-use-cases-messaging-publishing"></a>

要向某个频道的所有订阅者发送消息，请使用 `PUBLISH` 命令，并指定频道和消息。以下示例将发布一条消息：“It’s Saturday and sunny。I’m headed to the links.” 到 *news.sports.golf* 频道。

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

客户无法向其订阅的频道发布消息。

有关更多信息，请参阅 Valkey 文档中的 [Pub/Sub](https://valkey.io/topics/pubsub)。

## 推荐数据（哈希）
<a name="elasticache-for-redis-use-cases-recommendations"></a>

在 Valkey 或 Redis OSS 中使用 INCR 或 DECR 简化了编译推荐。每当用户对产品“给予好评”时，您就会增加一个 *item:productID:like* 计数器。每当用户对产品“给予差评”时，您就会增加一个 *item:productID:dislike* 计数器。借助哈希，您还可以维护一个已对产品给予好评或差评的人员的列表。

**Example - 给予好评和给予差评**  

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

## 生成式人工智能应用程序的语义缓存
<a name="elasticache-for-redis-use-cases-semantic-caching"></a>

由于与大型语言模型的推理调用相关的成本和延迟，大规模运行生成式 AI 应用程序可能具有挑战性 (LLMs)。您可以在生成式 AI 应用程序中使用 ElastiCache 语义缓存，从而降低 LLM 推理调用的成本和延迟。借助语义缓存，您可以通过基于向量的匹配来查找当前提示与先前提示之间的相似性，从而返回缓存的响应。如果用户的提示在语义上与先前的提示相似，则系统将返回缓存的响应，而不是发起新的 LLM 推理调用，从而降低生成式人工智能应用程序的成本，并提供更快的响应速度以改善用户体验。您可以通过为提示配置相似度阈值并应用标签或数值元数据筛选条件，来控制将哪些查询路由到缓存。

矢量搜索提供的内联实时索引更新 ElastiCache 有助于确保缓存随着用户提示和 LLM 响应流入而持续更新。这种实时索引对于维持缓存结果的新鲜度和缓存命中率至关重要，对于高峰流量尤其如此。此外，通过成熟的缓存原语（例如按密钥 TTLs、可配置的驱逐策略、原子操作以及丰富的数据结构和脚本支持）来 ElastiCache 简化语义缓存的操作。

**生成式人工智能助手和座席的记忆**

您可以通过 ElastiCache 实现可显示跨会话对话历史记录的记忆机制来提供更个性化、更具情境感知的响应。 LLMs对话记忆让生成式人工智能助手和座席能够保留和使用过去的互动，从而提供个性化响应并提升相关性。但是，简单地将之前的所有互动汇总到提示中是无效的，因为无关的额外令牌会增加成本，降低响应质量，并有可能超出 LLM 的上下文窗口。相反，您可以使用向量搜索，在每次调用 LLM 时，仅检索并提供上下文中最相关的数据。

ElastiCache for Valkey 提供与开源内存层的集成，提供内置连接器来存储和检索 LLM 应用程序和代理的内存。Vector search for ElastiCache 提供了快速的索引更新，使内存保持最新，并使新的记忆可以立即被搜索。低延迟向量搜索支持快速查找记忆，使其能够在每个请求的在线路径中实施，而不仅限于后台任务。除了向量搜索之外， ElastiCache for Valkey 还提供会话状态、用户首选项和功能标志的缓存原语，从而提供一种将短期会话状态和长期 “记忆” 存储在一个数据存储中的单一服务。

**检索增强生成（RAG）**

RAG 是在即时 LLMs 提供 up-to-date信息以提高回复相关性的过程。RAG 通过将输出与现实世界的数据来源关联来减少幻觉并提高事实准确性。RAG 应用程序利用向量搜索，从知识库中检索语义相关的内容。提供的低延迟矢量搜索 ElastiCache 使其适合在具有数百万个及以上向量的大型数据集的工作负载中实现 RAG。此外，对在线矢量索引更新的支持 ElastiCache 非常适合需要确保任何上传的数据均可立即搜索的上传工作流程的助手。代理人工智能系统中的 RAG 可确保代理获得用于准确 up-to-date操作的信息。低延迟向量搜索对代理式人工智能系统中的 RAG 也至关重要，在这些系统中，单个查询可以触发多个 LLM 调用，并累积底层向量搜索产生的延迟。

下图说明了一个示例架构，该架构 ElastiCache 用于实现语义缓存、内存机制和 RAG，以增强生产中的生成式 AI 应用程序。

![\[示意图：生成式人工智能助手执行的语义搜索。\]](http://docs.aws.amazon.com/zh_cn/AmazonElastiCache/latest/dg/images/vector-search-gen-ai1.png)


**语义搜索**

向量搜索根据语义或特征的相似度，检索最相关的文本、语音、图像或视频数据。该功能支持依赖于跨不同数据模式进行相似度搜索的机器学习应用程序，包括推荐引擎、异常检测、个性化和知识管理系统。推荐系统采用向量表示来捕捉用户行为和项目特征中的复杂模式，从而能够推荐最相关的内容。Vector search for ElastiCache 非常适合这些应用程序，因为它具有近乎实时的更新和低延迟，可以进行相似度比较，从而根据实时用户互动提供即时、高度相关的推荐。

## ElastiCache 客户感言
<a name="elasticache-use-cases-testimonials"></a>

要了解爱彼迎、PBS、Esri等企业如何通过改善客户体验 ElastiCache 来利用亚马逊来发展业务，请参阅[其他人如何使用亚马逊](https://aws.amazon.com/elasticache/testimonials/)。 ElastiCache

您还可以观看[教程视频](Tutorials.md#tutorial-videos)，了解其他ElastiCache 客户使用案例。