

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

# 使用 ElastiCache
<a name="WorkingWithElastiCache"></a>

 本節提供如何管理各種 ElastiCache 實作元件的詳細資訊。

**Topics**
+ [快照和還原](backups.md)
+ [ElastiCache 中的引擎版本和升級](engine-versions.md)
+ [ElastiCache 最佳實務和快取策略](BestPractices.md)
+ [在 ElastiCache 中管理您的節點型叢集](manage-self-designed-cluster.md)
+ [自動連接 EC2 執行個體和 ElastiCache 快取](compute-connection.md)
+ [擴展 ElastiCache](Scaling.md)
+ [Bloom 篩選條件入門](BloomFilters.md)
+ [Serverless 中的 Watch 入門](ServerlessWatch.md)
+ [向量搜尋入門](vector-search.md)
+ [JSON for Valkey 和 Redis OSS 入門](json-gs.md)
+ [為您的 ElastiCache 資源加上標籤](Tagging-Resources.md)
+ [使用 Amazon ElastiCache Well-Architected Lens](WellArchitechtedLens.md)
+ [ElastiCache 的常見故障診斷步驟和最佳實務](wwe-troubleshooting.md)

# 快照和還原
<a name="backups"></a>

執行 Valkey、Redis OSS 或 Serverless Memcached 的 Amazon ElastiCache 快取可以透過建立快照來備份其資料。您可以使用備份來還原快取或將資料植入新的快取。備份包含快取的中繼資料，以及快取中的所有資料。所有備份都會寫入 Amazon Simple Storage Service (Amazon S3)，該服務提供耐久性儲存空間。您可以隨時建立新的 Valkey、Redis OSS 或 Serverless Memcached 快取，並填入來自備份的資料，以還原資料。透過 ElastiCache，您可以使用AWS 管理主控台、AWS Command Line Interface(AWS CLI) 和 ElastiCache API 來管理備份。

如果您打算刪除快取，而且有必要保留資料，您可以採取額外的預防措施。若要達成此目標，請先建立手動備份、確認其狀態為*可用*，然後刪除快取。這樣做可確保備份失敗時，快取資料仍然可用。您可以依照前述的最佳實務，重試進行備份。

**Topics**
+ [備份限制](#backups-constraints)
+ [節點型叢集備份的效能影響](#backups-performance)
+ [排程自動備份](backups-automatic.md)
+ [取得手動備份](backups-manual.md)
+ [建立最終備份](backups-final.md)
+ [描述備份](backups-describing.md)
+ [複製備份](backups-copying.md)
+ [匯出備份](backups-exporting.md)
+ [從備份還原到新的快取](backups-restoring.md)
+ [刪除備份](backups-deleting.md)
+ [標記備份](backups-tagging.md)
+ [教學課程：使用外部建立的備份植入新的節點型叢集](backups-seeding-redis.md)

## 備份限制
<a name="backups-constraints"></a>

規劃或建立備份時，請考慮下列限制：
+ 只有執行於 Valkey、Redis OSS 或 Serverless Memcached 的快取才支援備份和還原。
+ 對於 Valkey 或 Redis OSS （停用叢集模式） 叢集，`cache.t1.micro`節點上不支援備份和還原。所有其他快取節點類型則受到支援。
+ 對於 Valkey 或 Redis OSS （啟用叢集模式） 叢集，所有節點類型都支援備份和還原。
+ 在任何連續的 24 小時期間內，每個無伺服器快取最多可以建立 24 個手動備份。對於 Valkey 和 Redis OSS 節點型叢集，您可以在叢集中為每個節點建立不超過 20 個手動備份。 
+ Valkey 或 Redis OSS （啟用叢集模式） 僅支援在叢集層級 （適用於 API 或 CLI 的複寫群組層級） 上進行備份。Valkey 或 Redis OSS （啟用叢集模式） 不支援在碎片層級進行備份 （適用於 API 或 CLI 的節點群組層級）。
+ 在備份程序期間，您無法在無伺服器快取上執行任何其他 API 或 CLI 操作。您可以在備份期間對節點型叢集執行 API 或 CLI 操作。
+ 如果您使用具有資料分層的 Valkey 或 Redis OSS 快取，則無法將備份匯出至 Amazon S3。
+ 只能將使用 r6gd 節點類型的叢集備份還原到使用 r6gd 節點類型的叢集。

## 節點型叢集備份的效能影響
<a name="backups-performance"></a>

無伺服器快取上的備份對於應用程式來說公開透明，不會影響效能。不過，建立節點型叢集的備份時，視可用的預留記憶體而定，可能會對效能造成影響。節點型叢集的備份不適用於 ElastiCache for Memcached，但適用於 ElastiCache for Redis OSS。

以下是改善節點型叢集備份效能的指導方針。
+ 設定 `reserved-memory-percent` 參數 - 為了降低過度分頁的風險，建議您設定 *reserved-memory-percent* 參數。此參數可防止 Valkey 和 Redis OSS 耗用節點的所有可用記憶體，並有助於減少分頁數量。您也可以直接使用更大的節點來提升效能。如需 *reserved-memory* 和 *reserved-memory-percent* 參數的詳細資訊，請參閱[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。

   
+ 從僅供讀取複本建立備份 – 如果您在具有多個節點的節點群組中執行 Valkey 或 Redis OSS，您可以從主節點或其中一個僅供讀取複本進行備份。由於 BGSAVE 期間所需的系統資源，我們建議您從其中一個僅供讀取複本建立備份。從複本建立備份時，主要節點會保持不受 BGSAVE 資源需求的影響。主要節點可繼續服務請求而不會變慢。

  若要執行此操作，請參閱「[建立手動備份 (主控台)](backups-manual.md#backups-manual-CON)」，並在 **Create Backup (建立備份)**視窗裡的 **Cluster Name (叢集名稱)** 欄位中，選擇複本而非預設主節點。

如果您刪除複寫群組並請求最終備份，ElastiCache 一律會從主節點進行備份。這可確保在刪除複寫群組之前擷取最新的 Valkey 或 Redis OSS 資料。

# 排程自動備份
<a name="backups-automatic"></a>

您可以為任何 Valkey 或 Redis OSS 無伺服器快取或節點型叢集啟用自動備份。自動備份啟用時，ElastiCache 每天都會建立快取的備份。不會對快取造成任何影響，而且變更會立即生效。自動備份可協助防止資料遺失。如果發生失敗，您可以建立新的快取，從最近的備份還原您的資料。這會產生暖啟動的快取，並預先載入您的資料以供使用。如需詳細資訊，請參閱[從備份還原到新的快取](backups-restoring.md)。

您可以為任何 Memcached Serverless 快取啟用自動備份。自動備份啟用時，ElastiCache 每天都會建立快取的備份。不會對快取造成任何影響，而且變更會立即生效。自動備份可協助防止資料遺失。如果發生失敗，您可以建立新的快取，從最近的備份還原您的資料。這會產生暖啟動的快取，並預先載入您的資料以供使用。如需詳細資訊，請參閱[從備份還原到新的快取](backups-restoring.md)。

當您排程自動備份時，您應該規劃下列設定：
+ **備份開始時間**：一天當中 ElastiCache 開始建立備份的時間。您可以將備份時段設定在最方便的任何時間。如果您未指定備份時段，ElastiCache 會自動指派一個時段。

   
+ **備份保留期限** - 要在 Amazon S3 中保留備份的天數。例如，如果您將保留期限設為 5，則今天進行的備份會保留 5 天。超過保留期限之後，則會自動刪除備份。

  保留期上限為 35 天。如果將備份保留期限設為 0，則會停用快取的自動備份。

當您排程自動備份時，ElastiCache 會開始建立備份。您可以將備份時段設定在最方便的任何時間。如果您未指定備份時段，ElastiCache 會自動指派一個時段。

您可以使用 ElastiCache 主控台AWS CLI、 或 ElastiCache API，在建立新快取或更新現有快取時啟用或停用自動備份。對於 Valkey 和 Redis OSS，方法是勾選**進階 Valkey 設定**或**進階 Redis OSS 設定**區段中的**啟用自動備份**方塊。對於 Memcached，方法是勾選**進階 Memcached 設定**區段中的**啟用自動備份**方塊。

# 取得手動備份
<a name="backups-manual"></a>

除了自動備份，您還可以隨時建立「手動」**備份。不同於自動備份會在指定的保留期之後自動刪除，手動備份沒有過了一段時間會自動刪除的保留期。即使您刪除快取，該快取中的任何手動備份仍會保留。如果您不想再保留手動備份，則必須自行明確予以刪除。

除了直接建立手動備份，您還可以利用下列其中一種方式來建立手動備份：
+ [複製備份](backups-copying.md)。與來源備份是自動或手動建立無關。
+ [建立最終備份](backups-final.md)。在刪除叢集或節點前立即建立一個備份。

您可以使用AWS 管理主控台、AWS CLI或 ElastiCache API 建立快取的手動備份。

您可以從啟用叢集模式和停用叢集模式的複本產生手動備份。



## 建立手動備份 (主控台)
<a name="backups-manual-CON"></a>

**建立快取的備份 (主控台)**

1. 登入AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 從導覽窗格中，根據您的偏好設定，選擇 **Valkey 快取**、**Redis OSS 快取**或 **Memcached 快取**。

1. 選擇您要備份之快取名稱左側的方塊。

1. 選擇 **Backup (備份)**。

1. 在 **Create Backup (建立備份)** 對話方塊的 **Backup Name (備份名稱)** 方塊中，輸入您的備份名稱。我們建議名稱指出備份的叢集，以及建立備份的日期和時間。

   叢集命名限制條件如下：
   + 必須包含 1-40 個英數字元或連字號。
   + 必須以字母開頭。
   + 不能連續包含兩個連字號。
   + 結尾不能是連字號。

1. 選擇 **Create Backup (建立備份)**。

   叢集的狀態會變更為「快照中」**。

## 建立手動備份 (AWS CLI)
<a name="backups-manual-CLI"></a>

**使用 手動備份無伺服器快取AWS CLI**

若要使用 建立快取的手動備份AWS CLI，請使用 `create-serverless-snapshot`AWS CLI操作搭配下列參數：
+ `--serverless-cache-name` - 您要備份之無伺服器快取的名稱。
+ `--serverless-cache-snapshot-name` - 要建立的快照名稱。

針對 Linux、macOS 或 Unix：
+ 

  ```
  aws elasticache create-serverless-snapshot \
                          --serverless-cache-name CacheName \
                          --serverless-cache-snapshot-name bkup-20231127
  ```

針對 Windows：
+ 

  ```
  aws elasticache create-serverless-snapshot ^
      --serverless-cache-name CacheName ^
      --serverless-cache-snapshot-name bkup-20231127
  ```

**使用 手動備份以節點為基礎的叢集AWS CLI**

若要使用 建立節點型叢集的手動備份AWS CLI，請使用 `create-snapshot`AWS CLI操作搭配下列參數：
+ `--cache-cluster-id`
  + 如果您要備份的叢集不含任何複本節點，`--cache-cluster-id` 是您要備份的叢集名稱，例如 *mycluster*。
  + 如果您要備份的叢集含有一或多個複本節點，`--cache-cluster-id` 是您要用於備份之叢集中的節點名稱。例如，名稱可以是 *mycluster-002*。

  只有在備份 Valkey 或 Redis OSS （停用叢集模式） 叢集時，才使用此參數。

   
+ `--replication-group-id` – 做為備份來源的 Valkey 或 Redis OSS （啟用叢集模式） 叢集 (CLI/API：複寫群組） 名稱。備份 Valkey 或 Redis OSS （啟用叢集模式） 叢集時，請使用此參數。

   
+ `--snapshot-name` - 要建立的快照名稱。

  叢集命名限制條件如下：
  + 必須包含 1-40 個英數字元或連字號。
  + 必須以字母開頭。
  + 不能連續包含兩個連字號。
  + 結尾不能是連字號。

### 範例 1：備份沒有複本節點的 Valkey 或 Redis OSS （停用叢集模式） 叢集
<a name="backups-manual-CLI-example1"></a>

下列AWS CLI操作`bkup-20150515`會從`myNonClusteredRedis`沒有僅供讀取複本的 Valkey 或 Redis OSS （停用叢集模式） 叢集建立備份。

針對 Linux、macOS 或 Unix：

```
aws elasticache create-snapshot \
    --cache-cluster-id myNonClusteredRedis \
    --snapshot-name bkup-20150515
```

針對 Windows：

```
aws elasticache create-snapshot ^
    --cache-cluster-id myNonClusteredRedis ^
    --snapshot-name bkup-20150515
```

### 範例 2：使用複本節點備份 Valkey 或 Redis OSS （停用叢集模式） 叢集
<a name="backups-manual-CLI-example2"></a>

下列AWS CLI操作`bkup-20150515`會從 Valkey 或 Redis OSS （停用叢集模式） 叢集 建立備份`myNonClusteredRedis`。此備份具有一個或多個僅供讀取複本。

針對 Linux、macOS 或 Unix：

```
aws elasticache create-snapshot \
    --cache-cluster-id myNonClusteredRedis-001 \
    --snapshot-name bkup-20150515
```

針對 Windows：

```
aws elasticache create-snapshot ^
    --cache-cluster-id myNonClusteredRedis-001 ^
    --snapshot-name bkup-20150515
```

**輸出範例：使用複本節點備份 Valkey 或 Redis OSS （停用叢集模式） 叢集**

此操作的輸出將會如下所示。

```
{
    "Snapshot": {
        "Engine": "redis", 
        "CacheParameterGroupName": "default.redis6.x", 
        "VpcId": "vpc-91280df6", 
        "CacheClusterId": "myNonClusteredRedis-001", 
        "SnapshotRetentionLimit": 0, 
        "NumCacheNodes": 1, 
        "SnapshotName": "bkup-20150515", 
        "CacheClusterCreateTime": "2017-01-12T18:59:48.048Z", 
        "AutoMinorVersionUpgrade": true, 
        "PreferredAvailabilityZone": "us-east-1c", 
        "SnapshotStatus": "creating", 
        "SnapshotSource": "manual", 
        "SnapshotWindow": "08:30-09:30", 
        "EngineVersion": "6.0", 
        "NodeSnapshots": [
            {
                "CacheSize": "", 
                "CacheNodeId": "0001", 
                "CacheNodeCreateTime": "2017-01-12T18:59:48.048Z"
            }
        ], 
        "CacheSubnetGroupName": "default", 
        "Port": 6379, 
        "PreferredMaintenanceWindow": "wed:07:30-wed:08:30", 
        "CacheNodeType": "cache.m3.2xlarge",
        "DataTiering": "disabled"
    }
}
```

### 範例 3：備份 Valkey 或 Redis OSS 的叢集 （啟用叢集模式）
<a name="backups-manual-CLI-example3"></a>

下列AWS CLI操作`bkup-20150515`會從 Valkey 或 Redis OSS （啟用叢集模式） 叢集 建立備份`myClusteredRedis`。注意使用 `--replication-group-id` (而非 `--cache-cluster-id`) 識別來源。另請注意，ElastiCache 會在存在時使用複本節點進行備份，如果複本節點無法使用，則預設為主節點。

針對 Linux、macOS 或 Unix：

```
aws elasticache create-snapshot \
    --replication-group-id myClusteredRedis \
    --snapshot-name bkup-20150515
```

針對 Windows：

```
aws elasticache create-snapshot ^
    --replication-group-id myClusteredRedis ^
    --snapshot-name bkup-20150515
```

**輸出範例：備份 Valkey 或 Redis OSS （啟用叢集模式） 叢集**

此操作的輸出將會如下所示。

```
{
    "Snapshot": {
        "Engine": "redis", 
        "CacheParameterGroupName": "default.redis6.x.cluster.on", 
        "VpcId": "vpc-91280df6", 
        "NodeSnapshots": [
            {
                "CacheSize": "", 
                "NodeGroupId": "0001"
            }, 
            {
                "CacheSize": "", 
                "NodeGroupId": "0002"
            }
        ], 
        "NumNodeGroups": 2, 
        "SnapshotName": "bkup-20150515", 
        "ReplicationGroupId": "myClusteredRedis", 
        "AutoMinorVersionUpgrade": true, 
        "SnapshotRetentionLimit": 1, 
        "AutomaticFailover": "enabled", 
        "SnapshotStatus": "creating", 
        "SnapshotSource": "manual", 
        "SnapshotWindow": "10:00-11:00", 
        "EngineVersion": "6.0", 
        "CacheSubnetGroupName": "default", 
        "ReplicationGroupDescription": "2 shards 2 nodes each", 
        "Port": 6379, 
        "PreferredMaintenanceWindow": "sat:03:30-sat:04:30", 
        "CacheNodeType": "cache.r3.large",
        "DataTiering": "disabled"
    }
}
```

### 相關主題
<a name="backups-manual-CLI-see-also"></a>

如需詳細資訊，請參閱 *AWS CLI命令參考*中的 [create-snapshot](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-snapshot.html)。

## 使用 建立備份CloudFormation
<a name="backups-CFN"></a>

您可以使用CloudFormation建立 ElastiCache Redis OSS 或 Valkey 快取的備份，方法是使用 `AWS::ElastiCache::ServerlessCache`或 `AWS::ElastiCache::ReplicationGroup` 屬性。

**使用 `AWS::ElastiCache::ServerlessCache` 資源 **

使用此項目來使用 AWS::ElastiCache::ServerlessCache 資源建立備份：

```
Resources:
                    iotCatalog:
                        Type: AWS::ElastiCache::ServerlessCache
                            Properties:
                            ...
                            ServerlessCacheName: "your-cache-name"
                            Engine: "redis"
                            CacheUsageLimits
```

**使用 AWS::ElastiCache::ReplicationGroup 資源 **

使用 `AWS::ElastiCache::ReplicationGroup` 資源：

```
Resources:
                    iotCatalog:
                        Type: AWS::ElastiCache::ReplicationGroup 
                            Properties:
                            ...
                            ReplicationGroupDescription: "Description of your replication group"
                            Engine: "redis"
                            CacheNodeType
                            NumCacheClusters
                            AutomaticFailoverEnabled
                            AtRestEncryptionEnabled
```

# 建立最終備份
<a name="backups-final"></a>

您可以使用 ElastiCache 主控台、AWS CLI或 ElastiCache API 建立最終備份。

## 建立最終備份 (主控台)
<a name="backups-final-CON"></a>

您可以使用 ElastiCache 主控台，在刪除 Valkey、Memcached 或 Redis OSS 無伺服器快取，或 Valkey 或 Redis OSS 節點型叢集時建立最終備份。

若要在刪除快取時建立最終備份，請在刪除對話方塊的**建立備份**下選擇**是**，並為備份命名。

**相關主題**
+ [使用AWS 管理主控台](Clusters.Delete.md#Clusters.Delete.CON)
+ [刪除複寫群組 (主控台)](Replication.DeletingRepGroup.md#Replication.DeletingRepGroup.CON)

## 建立最終備份 (AWS CLI)
<a name="backups-final-CLI"></a>

您可以在使用 刪除快取時建立最終備份AWS CLI。

**Topics**
+ [刪除 Valkey 快取、Memcached 無伺服器快取或 Redis OSS 快取時](#w2aac24b7c29b7b1b7)
+ [刪除沒有僅供讀取複本的 Valkey 或 Redis OSS 叢集時](#w2aac24b7c29b7b1b9)
+ [刪除具有僅供讀取複本的 Valkey 或 Redis OSS 叢集時](#w2aac24b7c29b7b1c11)

### 刪除 Valkey 快取、Memcached 無伺服器快取或 Redis OSS 快取時
<a name="w2aac24b7c29b7b1b7"></a>

若要建立最終備份，請使用 `delete-serverless-cache`AWS CLI操作搭配下列參數。
+ `--serverless-cache-name` - 要刪除的快取名稱。
+ `--final-snapshot-name` - 備份的名稱。

下列程式碼會在刪除快取 `myserverlesscache` 時建立最終備份 `bkup-20231127-final`。

針對 Linux、macOS 或 Unix：

```
aws elasticache delete-serverless-cache \
        --serverless-cache-name myserverlesscache \
        --final-snapshot-name bkup-20231127-final
```

針對 Windows：

```
aws elasticache delete-serverless-cache ^
        --serverless-cache-name myserverlesscache ^
        --final-snapshot-name bkup-20231127-final
```

如需詳細資訊，請參閱《*AWS CLI命令參考*》中的 [delete-serverless-cache](https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-serverless-cache.html)。

### 刪除沒有僅供讀取複本的 Valkey 或 Redis OSS 叢集時
<a name="w2aac24b7c29b7b1b9"></a>

若要為沒有僅供讀取複本的節點型叢集建立最終備份，請使用 `delete-cache-cluster`AWS CLI操作搭配下列參數。
+ `--cache-cluster-id` - 正在刪除的叢集名稱。
+ `--final-snapshot-identifier` - 備份的名稱。

下列程式碼會在刪除叢集 `myRedisCluster` 時建立最終備份 `bkup-20150515-final`。

針對 Linux、macOS 或 Unix：

```
aws elasticache delete-cache-cluster \
        --cache-cluster-id myRedisCluster \
        --final-snapshot-identifier bkup-20150515-final
```

針對 Windows：

```
aws elasticache delete-cache-cluster ^
        --cache-cluster-id myRedisCluster ^
        --final-snapshot-identifier bkup-20150515-final
```

如需詳細資訊，請參閱 *AWS CLI命令參考*中的 [delete-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-cache-cluster.html)。

### 刪除具有僅供讀取複本的 Valkey 或 Redis OSS 叢集時
<a name="w2aac24b7c29b7b1c11"></a>

若要在刪除複寫群組時建立最終備份，請使用 `delete-replication-group`AWS CLI操作搭配下列參數：
+ `--replication-group-id` - 正在刪除的複寫群組名稱。
+ `--final-snapshot-identifier` - 最終備份的名稱。

下列程式碼會在刪除複寫群組 `myReplGroup` 時建立最終備份 `bkup-20150515-final`。

針對 Linux、macOS 或 Unix：

```
aws elasticache delete-replication-group \
        --replication-group-id myReplGroup \
        --final-snapshot-identifier bkup-20150515-final
```

針對 Windows：

```
aws elasticache delete-replication-group ^
        --replication-group-id myReplGroup ^
        --final-snapshot-identifier bkup-20150515-final
```

如需詳細資訊，請參閱 *AWS CLI命令參考*中的 [delete-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-replication-group.html)。

# 描述備份
<a name="backups-describing"></a>

下列程序說明如何顯示您的備份清單。如果您需要，也可以檢視特定備份的詳細資訊。

## 描述備份 (主控台)
<a name="backups-describing-CON"></a>

**使用 顯示備份AWS 管理主控台**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 從導覽窗格，選擇 **Backups (備份)**。

1. 若要查看特定備份的詳細資訊，請選擇備份名稱左側的方塊。

## 說明無伺服器備份 (AWS CLI)
<a name="backups-describing-serverless-CLI"></a>

若要顯示無伺服器備份的清單，以及選擇性地顯示特定備份的詳細資訊，請使用 `describe-serverless-cache-snapshots` CLI 操作。

**範例**

下列操作使用參數 `--max-records` 列出最多 20 個與您的帳戶相關的備份。省略參數 `--max-records` 會列出最多 50 個備份。

```
aws elasticache describe-serverless-cache-snapshots --max-records 20
```

下列操作使用參數 `--serverless-cache-name` 單獨列出與快取 `my-cache` 相關聯的備份。

```
aws elasticache describe-serverless-cache-snapshots --serverless-cache-name my-cache
```

下列操作使用參數 `--serverless-cache-snapshot-name` 顯示備份 `my-backup` 的詳細資訊。

```
aws elasticache describe-serverless-cache-snapshots --serverless-cache-snapshot-name my-backup
```

如需詳細資訊，請參閱《AWS CLI命令參考》中的 [describe-serverless-cache-snapshots](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-serverless-cache-snapshots.html)。

## 描述節點型叢集備份 (AWS CLI)
<a name="backups-describing-CLI"></a>

若要顯示節點型叢集備份的清單，以及特定備份的選擇性詳細資訊，請使用 `describe-snapshots` CLI 操作。

**範例**

下列操作使用參數 `--max-records` 列出最多 20 個與您的帳戶相關的備份。省略參數 `--max-records` 會列出最多 50 個備份。

```
aws elasticache describe-snapshots --max-records 20
```

下列操作使用參數 `--cache-cluster-id` 只列出與叢集 `my-cluster` 相關的備份。

```
aws elasticache describe-snapshots --cache-cluster-id my-cluster
```

下列操作使用參數 `--snapshot-name` 顯示備份 `my-backup` 的詳細資訊。

```
aws elasticache describe-snapshots --snapshot-name my-backup
```

如需詳細資訊，請參閱《AWS CLI命令參考》中的 [describe-snapshots](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-snapshots.html)。

# 複製備份
<a name="backups-copying"></a>

您可以建立任何備份的副本，不論是自動或手動建立的備份。您也可匯出備份，以從 ElastiCache 外部進行存取。如需匯出備份的指導方針，請參閱[匯出備份](backups-exporting.md)。

下列步驟說明如何複製備份。

## 複製備份 (主控台)
<a name="backups-copying-CON"></a>

**複製備份 (主控台)**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 若要查看您的備份清單，請從左側導覽窗格，選擇 **Backups (備份)**。

1. 從備份清單，選擇您要複製之備份名稱左側的方塊。

1. 選擇**動作**、**複製**。

1. 在 **New backup name (新的備份名稱)** 方塊中，輸入新的備份名稱。

1. 請選擇 **Copy** (複製)。

## 複製無伺服器備份 (AWS CLI)
<a name="backups-copying-CLI"></a>

若要複製無伺服器快取的備份，請使用 `copy-serverless-cache-snapshot` 操作。

**Parameters**
+ `--source-serverless-cache-snapshot-name` - 要複製的備份名稱。
+ `--target-serverless-cache-snapshot-name` - 備份的複本名稱。

下列範例會建立自動備份的複本。

針對 Linux、macOS 或 Unix：

```
aws elasticache copy-serverless-cache-snapshot \
    --source-serverless-cache-snapshot-name automatic.my-cache-2023-11-27-03-15 \
    --target-serverless-cache-snapshot-name my-backup-copy
```

針對 Windows：

```
aws elasticache copy-serverless-cache-snapshot ^
    --source-serverless-cache-snapshot-name automatic.my-cache-2023-11-27-03-15 ^
    --target-serverless-cache-snapshot-name my-backup-copy
```

如需詳細資訊，請參閱 *AWS CLI* 中的 [https://docs.aws.amazon.com/cli/latest/reference/elasticache/copy-serverless-cache-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/copy-serverless-cache-snapshot.html)。

## 複製節點型叢集備份 (AWS CLI)
<a name="backups-copying-self-designed-CLI"></a>

若要複製節點型叢集的備份，請使用 `copy-snapshot`操作。

**Parameters**
+ `--source-snapshot-name` - 要複製的備份名稱。
+ `--target-snapshot-name` - 備份的複本名稱。
+ `--target-bucket` - 保留以供匯出備份。建立備份複本時，請勿使用此參數。如需詳細資訊，請參閱[匯出備份](backups-exporting.md)。

下列範例會建立自動備份的複本。

針對 Linux、macOS 或 Unix：

```
aws elasticache copy-snapshot  \
    --source-snapshot-name automatic.my-redis-primary-2014-03-27-03-15 \
    --target-snapshot-name amzn-s3-demo-bucket
```

針對 Windows：

```
aws elasticache copy-snapshot ^
    --source-snapshot-name automatic.my-redis-primary-2014-03-27-03-15 ^
    --target-snapshot-name amzn-s3-demo-bucket
```

如需詳細資訊，請參閱 *AWS CLI* 中的 [https://docs.aws.amazon.com/cli/latest/reference/elasticache/copy-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/copy-snapshot.html)。

# 匯出備份
<a name="backups-exporting"></a>

Amazon ElastiCache 支援將 ElastiCache for Redis OSS 備份匯出至 Amazon Simple Storage Service (Amazon S3) 儲存貯體，可讓您從 ElastiCache 外部存取它。您可以使用 ElastiCache 主控台、AWS CLI或 ElastiCache API 匯出備份。

如果您需要在另一個AWS區域中啟動叢集，匯出備份會很有幫助。您可以在一個區域中匯出資料AWS、將 .rdb 檔案複製到新AWS區域，然後使用該 .rdb 檔案植入新的快取，而不是等待新的叢集透過使用填入。如需植入新叢集的資訊，請參閱[教學課程：使用外部建立的備份植入新的節點型叢集](backups-seeding-redis.md)。另一個您可能想要匯出快取資料的原因是使用 .rdb 檔案進行離線處理。

**重要**  
 ElastiCache 備份和您要將其複製到的 Amazon S3 儲存貯體必須位於相同的AWS區域。  
雖然複製到 Amazon S3 儲存貯體的備份已經過加密，但強烈建議您不要授權其他人存取要存放備份的 Amazon S3 儲存貯體。
使用資料分層的叢集不支援將備份匯出到 Amazon S3。如需詳細資訊，請參閱[ElastiCache 中的資料分層](data-tiering.md)。
匯出備份適用於：以節點為基礎的 Valkey 叢集、以節點為基礎的 Redis OSS 叢集，以及 Valkey、Memcached 和 Redis OSS 無伺服器快取。匯出備份不適用於節點型 Memcached 叢集。

您必須先在與備份相同的區域中擁有 Amazon S3 儲存貯體，才能將備份匯出至 Amazon S3 儲存貯AWS體。授權 ElastiCache 存取儲存貯體。前兩個步驟示範如何執行此操作。

## 建立 Amazon S3 儲存貯體
<a name="backups-exporting-create-s3-bucket"></a>

下列步驟使用 Amazon S3 主控台建立 Amazon S3 儲存貯體，您將在其中匯出及儲存 ElastiCache 備份。

**建立 Amazon S3 儲存貯體**

1. 登入AWS 管理主控台，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 選擇 **Create Bucket** (建立儲存貯體)。

1. 在 **Create a Bucket - Select a Bucket Name and Region (建立儲存貯體 - 選取儲存貯體名稱和區域)** 中，執行下列動作：

   1. 在 **Bucket Name (儲存貯體名稱)** 中，輸入 Amazon S3 儲存貯體的名稱。

      Amazon S3 儲存貯體的名稱必須具 DNS 合規性。否則，ElastiCache 無法存取您的備份檔案。DNS 合規的規則如下：
      + 名稱長度須為 3 到 63 個字元。
      + 名稱必須是一連串一或多個標籤，並以句號 (.) 分隔，其中每個標籤：
        + 以小寫字母或數字開頭。
        + 以小寫字母或數字結尾。
        + 僅包含小寫字母、數字和破折號。
      + 不得使用 IP 地址格式 (例如 192.0.2.0)。

   1. 從**區域**清單中，為您的 Amazon S3 儲存貯體選擇AWS區域。此AWS區域必須與您要匯出的 ElastiCache 備份AWS區域相同。

   1. 選擇**建立**。

如需有關建立 Amazon S3 儲存貯體的詳細資訊，請參閱 *Amazon Simple Storage Service 使用者指南*中的[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html)。

## 授予 ElastiCache 存取 Amazon S3 儲存貯體的權限
<a name="backups-exporting-grant-access"></a>

若要讓 ElastiCache 能夠將快照複製到 Amazon S3 儲存貯體，您必須更新 IAM 儲存貯體政策，以授予 ElastiCache 對儲存貯體的存取權。

**警告**  
即使複製到 Amazon S3 儲存貯體的備份已經過加密，有權存取 Amazon S3 儲存貯體的所有人還是可以存取您的資料。因此，我們強烈建議您設定 IAM 政策，以防止未經授權存取此 Amazon S3 儲存貯體。如需詳細資訊，請參閱《Amazon S3 使用者指南》中的[管理存取權](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)。

若要在 Amazon S3 儲存貯體上建立適當許可，請執行下列步驟。

**授權 ElastiCache 存取 S3 儲存貯體**

1. 登入AWS 管理主控台，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 選擇您要複製備份的目的地 Amazon S3 儲存貯體名稱。這應該是您在[建立 Amazon S3 儲存貯體](#backups-exporting-create-s3-bucket)中建立的 S3 儲存貯體。

1. 選擇 **Permissions** (許可) 標籤，然後在 **Permissions** (許可) 中，選擇 **Access control list (ACL)** (存取控制清單 (ACL))，接著選擇 **Edit** (編輯)。

1. 透過下列選項，新增承授者正規 ID `540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353`：
   + **Objects (物件)：List (列出)、Write (寫入)**
   + **Bucket ACL (儲存貯體 ACL)：Read (讀取)、Write (寫入)**
**注意**  
對於 PDT GovCloud 區域，正式 ID 為 `40fa568277ad703bd160f66ae4f83fc9dfdfd06c2f1b5060ca22442ac3ef8be6`。
對於 OSU GovCloud 區域，正式 ID 為 `c54286759d2a83da9c480405349819c993557275cf37d820d514b42da6893f5c`。

1. 選擇**儲存**。

## 匯出 ElastiCache 備份
<a name="backups-exporting-procedures"></a>

現在您已經建立 S3 儲存貯體並授權 ElastiCache 存取它。接下來，您可以使用 ElastiCache AWS主控台、CLI 或 ElastiCache API 將快照匯出至其中。

以下是已更新政策可能有的外觀範例。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Policy15397346",
    "Statement": [
        {
            "Sid": "Stmt15399484",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::hkg-elasticache-backup",
                "arn:aws:s3:::hkg-elasticache-backup/*"
            ]
        }
    ]
}
```

------

對於選擇加入區域，以下是 S3 儲存貯體更新後 IAM 政策的外觀範例。(以下範例使用亞太區域 (香港) 區域。)

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Policy15397346",
    "Statement": [
        {
            "Sid": "Stmt15399483",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::hkg-elasticache-backup",
                "arn:aws:s3:::hkg-elasticache-backup/*"
            ]
        },
        {
            "Sid": "Stmt15399484",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::hkg-elasticache-backup",
                "arn:aws:s3:::hkg-elasticache-backup/*"
            ]
        }
    ]
}
```

------

### 匯出 ElastiCache 備份 (主控台)
<a name="backups-exporting-CON"></a>

下列步驟使用 ElastiCache 主控台將備份匯出到 Amazon S3 儲存貯體，讓您可以從 ElastiCache 外部進行存取。Amazon S3 儲存貯體必須與 ElastiCache 備份位於相同的AWS區域。

**將 ElastiCache 備份匯出至 Amazon S3 儲存貯體**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 若要查看您的備份清單，請從左側導覽窗格，選擇 **Backups (備份)**。

1. 從備份清單，選擇您要匯出之備份名稱左側的方塊。

1. 請選擇 **Copy** (複製)。

1. 在 **Create a Copy of the Backup? (是否建立備份複本？)** 中，執行下列動作：

   1. 在 **New backup name (新的備份名稱)** 方塊中，輸入新的備份名稱。

      該名稱必須介於 1 到 1,000 個字元之間，而且能夠以 UTF-8 編碼。

      ElastiCache 會將執行個體識別碼和 `.rdb` 新增至您在這裡輸入的值。例如，如果您輸入 `my-exported-backup`，ElastiCache 會建立 `my-exported-backup-0001.rdb`。

   1. 在 **Target S3 Location (目標 S3 位置)** 清單中，選擇您要複製備份的目的地 Amazon S3 儲存貯體名稱 (您在 [建立 Amazon S3 儲存貯體](#backups-exporting-create-s3-bucket) 中建立的儲存貯體)。

      **目標 S3 位置**必須是備份AWS區域中的 Amazon S3 儲存貯體，具有下列許可，匯出程序才能成功。
      + 物件存取權 - **Read (讀取)** 和 **Write (寫入)**。
      + 許可存取權 - **Read (讀取)**。

      如需詳細資訊，請參閱[授予 ElastiCache 存取 Amazon S3 儲存貯體的權限](#backups-exporting-grant-access)。

   1. 請選擇 **Copy** (複製)。

**注意**  
如果您的 S3 儲存貯體沒有讓 ElastiCache 匯出備份到其中所需的許可，您將會收到下列其中一個錯誤訊息。請返回[授予 ElastiCache 存取 Amazon S3 儲存貯體的權限](#backups-exporting-grant-access)，新增指定的許可並重新嘗試匯出您的備份。  
ElastiCache 尚未具備 S3 儲存貯體的 READ (讀取) 許可 %s。  
**解決方式：**新增儲存貯體的 Read (讀取) 許可。
ElastiCache 尚未具備 S3 儲存貯體的 WRITE (寫入) 許可 %s。  
**解決方式：**新增儲存貯體的 Write (寫入) 許可。
ElastiCache 尚未具備 S3 儲存貯體的 READ\$1ACP 許可 %s。  
**解決方式：**新增儲存貯體的 **Read (讀取)** 許可存取。

如果您想要將備份複製到另一個AWS區域，請使用 Amazon S3 將其複製。如需詳細資訊，請參閱 *Amazon Simple Storage Service 使用者指南*中的[複製物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/MakingaCopyofanObject.html)。

### 匯出 ElastiCache 無伺服器備份 (AWS CLI)
<a name="backups-exporting-CLI"></a>

**匯出無伺服器快取的備份**

使用 `export-serverless-cache-snapshot` CLI 作業並指定下列參數，將備份匯出到 Amazon S3 儲存貯體：

**Parameters**
+ `--serverless-cache-snapshot-name` - 要複製的備份名稱。
+ `--s3-bucket-name` - 您要匯出備份的 Amazon S3 儲存貯體名稱。系統會在指定的儲存貯體中建立一個備份複本。

  `--s3-bucket-name` 必須是備份AWS區域中的 Amazon S3 儲存貯體，具有下列許可，匯出程序才能成功。
  + 物件存取權 - **Read (讀取)** 和 **Write (寫入)**。
  + 許可存取權 - **Read (讀取)**。

下列操作會將備份複製到 my-s3-bucket。

針對 Linux、macOS 或 Unix：

```
aws elasticache export-serverless-cache-snapshot \
    --serverless-cache-snapshot-name automatic.my-redis-2023-11-27 \
    --s3-bucket-name my-s3-bucket
```

針對 Windows：

```
aws elasticache export-serverless-cache-snapshot ^
    --serverless-cache-snapshot-name automatic.my-redis-2023-11-27 ^
    --s3-bucket-name my-s3-bucket
```

### 匯出節點型 ElastiCache 叢集備份 (AWS CLI)
<a name="backups-exporting-self-designed-CON"></a>

**匯出節點型叢集的備份**

使用 `copy-snapshot` CLI 作業並指定下列參數，將備份匯出到 Amazon S3 儲存貯體：

**Parameters**
+ `--source-snapshot-name` - 要複製的備份名稱。
+ `--target-snapshot-name` - 備份的複本名稱。

  該名稱必須介於 1 到 1,000 個字元之間，而且能夠以 UTF-8 編碼。

  ElastiCache 會將執行個體識別碼和 `.rdb` 新增至您在這裡輸入的值。例如，如果您輸入 `my-exported-backup`，ElastiCache 會建立 `my-exported-backup-0001.rdb`。
+ `--target-bucket` - 您要匯出備份的 Amazon S3 儲存貯體名稱。系統會在指定的儲存貯體中建立一個備份複本。

  `--target-bucket` 必須是備份AWS區域中的 Amazon S3 儲存貯體，具有下列許可，匯出程序才能成功。
  + 物件存取權 - **Read (讀取)** 和 **Write (寫入)**。
  + 許可存取權 - **Read (讀取)**。

  如需詳細資訊，請參閱[授予 ElastiCache 存取 Amazon S3 儲存貯體的權限](#backups-exporting-grant-access)。

下列操作會將備份複製到 my-s3-bucket。

針對 Linux、macOS 或 Unix：

```
aws elasticache copy-snapshot \
    --source-snapshot-name automatic.my-redis-primary-2016-06-27-03-15 \
    --target-snapshot-name my-exported-backup \
    --target-bucket my-s3-bucket
```

針對 Windows：

```
aws elasticache copy-snapshot ^
    --source-snapshot-name automatic.my-redis-primary-2016-06-27-03-15 ^
    --target-snapshot-name my-exported-backup ^
    --target-bucket my-s3-bucket
```

# 從備份還原到新的快取
<a name="backups-restoring"></a>

您可以將現有的備份從 Valkey 還原至新的 Valkey 快取或節點型叢集，並將現有的 Redis OSS 備份還原至新的 Redis OSS 快取或節點型叢集。您也可以將現有的 Memcached 無伺服器快取備份還原至新的 Memcached 無伺服器快取。

## 將備份還原到無伺服器快取 (主控台)
<a name="backups-restoring-CON"></a>

**注意**  
ElastiCache Serverless 支援與 Valkey 7.2 及更高版本相容的 RDB 檔案，以及 5.0 和最新版本之間的 Redis OSS 版本。

**將備份還原到無伺服器快取 (主控台)**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 從導覽窗格，選擇 **Backups (備份)**。

1. 在備份清單中，選擇您要還原之備份名稱左側的方塊。

1. 選擇**動作**，然後選擇**還原**。

1. 輸入新的無伺服器快取的名稱，以及選用的說明。

1. 按一下**建立**以建立新的快取，並從備份匯入資料。

## 將備份還原至節點型叢集 （主控台）
<a name="backups-restoring-self-designedCON"></a>

**將備份還原至節點型叢集 （主控台）**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 從導覽窗格，選擇 **Backups (備份)**。

1. 在備份清單中，選擇您要從中還原之備份名稱左側的方塊。

1. 選擇**動作**，然後選擇**還原**。

1. 選擇**節點型快取**，並自訂叢集設定，例如節點類型、大小、碎片數量、複本、可用區域配置和安全設定。

1. 選擇**建立**以建立新的節點型叢集，並從備份匯入資料。

## 將備份還原到無伺服器快取 (AWS CLI)
<a name="backups-restoring-CLI"></a>

**注意**  
ElastiCache Serverless 支援與 Valkey 7.2 及更高版本相容的 RDB 檔案，以及 5.0 和最新版本之間的 Redis OSS 版本。

**將備份還原到新的無伺服器快取 (AWS CLI)**

下列AWS CLI範例使用 建立新的快取`create-serverless-cache`，並從備份匯入資料。

針對 Linux、macOS 或 Unix：

```
aws elasticache create-serverless-cache \

    --serverless-cache-name CacheName \
    --engine redis
    --snapshot-arns-to-restore Snapshot-ARN
```

針對 Windows：

```
aws elasticache create-serverless-cache ^

    --serverless-cache-name CacheName ^
    --engine redis ^
    --snapshot-arns-to-restore Snapshot-ARN
```

# 刪除備份
<a name="backups-deleting"></a>

自動備份會在超過保留期限之後自動刪除。如果您刪除叢集，也會刪除其所有自動備份。如果您刪除複寫群組，也會從該群組中的叢集刪除所有自動備份。

ElastiCache 提供刪除 API 作業，可讓您隨時刪除備份，不論備份是自動或手動建立的備份都適用。由於手動備份沒有留存期限，因此手動刪除是唯一的移除方式。

您可以使用 ElastiCache 主控台、AWS CLI或 ElastiCache API 刪除備份。

## 刪除備份 (主控台)
<a name="backups-deleting-CON"></a>

下列程序使用 ElastiCache 主控台來刪除備份。

**刪除備份**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 在導覽窗格中，選擇**備份**。

   Backups (備份) 畫面會隨即顯示，其中包含您的備份清單。

1. 選擇您要刪除之備份名稱左側的方塊。

1. 選擇 **刪除**。

1. 如果要刪除此備份，請在 **Delete Backup (刪除備份)** 確認畫面上選擇 **Delete (刪除)**。狀態會變更為「刪除中」**。

## 刪除無伺服器備份 (AWS CLI)
<a name="backups-deleting-serverless-CLI"></a>

使用 delete-snapshot AWS CLI操作搭配下列參數來刪除無伺服器備份。
+ `--serverless-cache-snapshot-name` - 要刪除的備份名稱。

下列程式碼會刪除備份 `myBackup`。

```
aws elasticache delete-serverless-cache-snapshot --serverless-cache-snapshot-name myBackup
```

如需詳細資訊，請參閱《*AWS CLI命令參考*》中的 [delete-serverless-cache-snapshot](https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-serverless-cache-snapshot.html)。

## 刪除節點型叢集備份 (AWS CLI)
<a name="backups-deleting-CLI"></a>

使用 delete-snapshot AWS CLI操作搭配下列參數來刪除以節點為基礎的叢集備份。
+ `--snapshot-name` - 要刪除的備份名稱。

下列程式碼會刪除備份 `myBackup`。

```
aws elasticache delete-snapshot --snapshot-name myBackup
```

如需詳細資訊，請參閱 *AWS CLI命令參考*中的 [delete-snapshot](https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-snapshot.html)。

# 標記備份
<a name="backups-tagging"></a>

您可以用標籤的形式將自己的中繼資料指派給每個備份。標籤可讓您以不同的方式分類備份，例如依據目的、擁有者或環境。當您有許多相同類型的資源時，這將會很有用，因為—您可以依據先前指派的標籤，快速識別特定的資源。如需詳細資訊，請參閱[您可以標記的資源](Tagging-Resources.md#Tagging-your-resources)。

成本分配標籤是追蹤跨多個 AWS 服務成本的一種方式，方法是將發票上的費用依標籤值分組。若要進一步了解成本分配標籤，請參閱[使用成本分配標籤](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

使用 ElastiCache 主控台 AWS CLI、 或 ElastiCache API，您可以在備份上新增、列出、修改、移除或複製成本分配標籤。如需詳細資訊，請參閱[使用成本配置標籤監控成本](Tagging.md)。

# 教學課程：使用外部建立的備份植入新的節點型叢集
<a name="backups-seeding-redis"></a>

當您建立新的 Valkey 或 Redis OSS 節點型叢集時，您可以使用來自 Valkey 或 Redis OSS .rdb 備份檔案的資料植入叢集。如果您目前在 ElastiCache 外部管理 Valkey 或 Redis OSS 執行個體，並想要使用現有的 Valkey 或 Redis OSS 資料填入新的 ElastiCache for Redis OSS 節點型叢集，則粒子化叢集非常有用。

若要從 Amazon ElastiCache 中建立的 Valkey 或 Redis OSS 備份植入新的 Valkey 或 Redis OSS 節點型叢集，請參閱 [從備份還原到新的快取](backups-restoring.md)。

當您使用 Valkey 或 Redis OSS .rdb 檔案植入新的節點型叢集時，您可以執行下列動作：
+ 從未分割叢集升級至執行 Redis OSS 3.2.4 版的 Valkey 或 Redis OSS （啟用叢集模式） 節點型叢集。
+ 在新的節點型叢集中指定多個碎片 （在 API 和 CLI 中稱為節點群組）。此數目可能與用來建立備份檔案的節點型叢集中的碎片數目不同。
+ 為新的節點型叢集指定不同的節點類型 - 大於或小於進行備份之叢集中使用的節點類型。如果您擴展到較小的節點類型，請確定新的節點類型有足夠的記憶體可供您的資料和 Valkey 或 Redis OSS 額外負荷使用。如需詳細資訊，請參閱[確保您有足夠的記憶體來建立 Valkey 或 Redis OSS 快照](BestPractices.BGSAVE.md)。
+ 將您的金鑰分佈在新 Valkey 或 Redis OSS （啟用叢集模式） 叢集的插槽，與用來建立備份檔案的叢集不同。

**注意**  
您無法從從 Valkey 或 Redis OSS （啟用叢集模式） 叢集建立的 .rdb 檔案植入 Valkey 或 Redis OSS （停用叢集模式） 叢集。

**重要**  
您必須確保您的 Valkey 或 Redis OSS 備份資料不超過節點的資源。例如，您無法將具有 5 GB Valkey 或 Redis OSS 資料的 .rdb 檔案上傳至具有 2.9 GB 記憶體的 cache.m3.medium 節點。  
如果備份太大，產生的叢集狀態會是 `restore-failed`。如果發生此情況，您必須刪除叢集並重新開始。  
如需完整的節點類型和規格清單，請參閱「[Redis OSS 節點類型特定參數](ParameterGroups.Engine.md#ParameterGroups.Redis.NodeSpecific)」和 [Amazon ElastiCache 產品功能和詳細資訊](https://aws.amazon.com/elasticache/details/)。
您只能使用 Amazon S3 伺服器端加密 (SSE-S3) 來加密 Valkey 或 Redis OSS .rdb 檔案。如需詳細資訊，請參閱[使用伺服器端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html)。

以下主題會逐步引導您從 ElastiCache for Valkey 或 Redis OSS 外部遷移叢集至 ElastiCache for Redis OSS。

**Topics**
+ [步驟 1：建立 Valkey 或 Redis OSS 備份](#backups-seeding-redis-create-backup)
+ [步驟 2：建立 Amazon S3 儲存貯體和資料夾](#backups-seeding-redis-create-s3-bucket)
+ [步驟 3：將備份上傳到 Amazon S3](#backups-seeding-redis-upload)
+ [步驟 4：授予 .rdb 檔案的讀取存取權給 ElastiCache](#backups-seeding-redis-grant-access)

**Topics**
+ [步驟 1：建立 Valkey 或 Redis OSS 備份](#backups-seeding-redis-create-backup)
+ [步驟 2：建立 Amazon S3 儲存貯體和資料夾](#backups-seeding-redis-create-s3-bucket)
+ [步驟 3：將備份上傳到 Amazon S3](#backups-seeding-redis-upload)
+ [步驟 4：授予 .rdb 檔案的讀取存取權給 ElastiCache](#backups-seeding-redis-grant-access)

## 步驟 1：建立 Valkey 或 Redis OSS 備份
<a name="backups-seeding-redis-create-backup"></a>

**建立 Valkey 或 Redis OSS 備份以植入 ElastiCache for Redis OSS 執行個體**

1. 連線到您現有的 Valkey 或 Redis OSS 執行個體。

1. 執行 `BGSAVE`或 `SAVE`操作以建立備份。記下您的 .rdb 檔案位置。

   `BGSAVE` 是非同步的，不會封鎖其他用戶端的處理。如需詳細資訊，請參閱 Valkey 網站上的 [BGSAVE](https://valkey.io/commands/bgsave)。

   `SAVE` 是同步的，並會封鎖其他處理序直到完成為止。如需詳細資訊，請參閱 Valkey 網站上的[儲存](https://valkey.io/commands/save)。

如需建立備份的詳細資訊，請參閱 Valkey 網站上的[持續性](https://valkey.io/topics/persistence)。

## 步驟 2：建立 Amazon S3 儲存貯體和資料夾
<a name="backups-seeding-redis-create-s3-bucket"></a>

建立備份檔案之後，您需要將它上傳到 Amazon S3 儲存貯體中的資料夾。若要執行此操作，您必須先擁有 Amazon S3 儲存貯體，且該儲存貯體中有資料夾。如果您已有具備適當許可的 Amazon S3 儲存貯體和資料夾，您可以跳到「[步驟 3：將備份上傳到 Amazon S3](#backups-seeding-redis-upload)」。

**建立 Amazon S3 儲存貯體**

1. 登入AWS 管理主控台，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 依照 *Amazon Simple Storage Service 使用者指南*中的[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)提供的指引操作，建立 Amazon S3 儲存貯體。

   Amazon S3 儲存貯體的名稱必須具 DNS 合規性。否則，ElastiCache 無法存取您的備份檔案。DNS 合規的規則如下：
   + 名稱長度須為 3 到 63 個字元。
   + 名稱必須是一連串一或多個標籤，並以句號 (.) 分隔，其中每個標籤：
     + 以小寫字母或數字開頭。
     + 以小寫字母或數字結尾。
     + 僅包含小寫字母、數字和破折號。
   + 不得使用 IP 地址格式 (例如 192.0.2.0)。

   您必須在與新 ElastiCache for Redis OSS 叢集相同的AWS區域中建立 Amazon S3 儲存貯體。此方法將會確保 ElastiCache 從 Amazon S3 讀取您的 .rdb 檔案時，資料傳輸速度達到最快。
**注意**  
為了讓您的資料盡可能保持安全，請盡可能限制您 Amazon S3 儲存貯體的許可。同時，許可仍然需要允許儲存貯體及其內容用於植入新的 Valkey 或 Redis OSS 叢集。

**在 Amazon S3 儲存貯體中新增資料夾**

1. 登入AWS 管理主控台，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 選擇您要上傳 .rdb 檔案的目的地儲存貯體名稱。

1. 選擇 **Create folder** (建立資料夾)。

1. 輸入您的新資料夾名稱。

1. 選擇**儲存**。

   記下儲存貯體名稱和資料夾名稱。

## 步驟 3：將備份上傳到 Amazon S3
<a name="backups-seeding-redis-upload"></a>

現在，上傳您在[步驟 1：建立 Valkey 或 Redis OSS 備份](#backups-seeding-redis-create-backup)中建立的 .rdb 檔案 上傳到在 [步驟 2：建立 Amazon S3 儲存貯體和資料夾](#backups-seeding-redis-create-s3-bucket) 中建立的 Amazon S3 儲存貯體和資料夾。如需此任務的詳細資訊，請參閱[將物件新增至儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)。在步驟 2 到 3 之間，選擇您已建立的資料夾名稱。

**將 .rdb 檔案上傳到 Amazon S3 資料夾**

1. 登入AWS 管理主控台，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 選擇您在步驟 2 中建立的 Amazon S3 儲存貯體名稱。

1. 選擇您在步驟 2 中建立的資料夾名稱。

1. 選擇**上傳**。

1. 選擇 **Add files (新增檔案)**。

1. 瀏覽至您要上傳的一或多個檔案，然後選擇一或多個檔案。若要選擇多個檔案，請按住 Ctrl 鍵並選擇每個檔案名稱。

1. 選擇 **Open** (開啟)。

1. 確認 **Upload (上傳)** 對話方塊中所列的一或多個檔案正確，然後選擇 **Upload (上傳)**。

記下 .rdb 檔案的路徑。例如，如果您的儲存貯體名稱為 `myBucket` 且路徑為 `myFolder/redis.rdb`，請輸入 `myBucket/myFolder/redis.rdb`。您需要此路徑，才能將此備份資料植入新叢集。

如需詳細資訊，請參閱 *Amazon Simple Storage Service 使用者指南*中的[儲存貯體限制與局限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)。

## 步驟 4：授予 .rdb 檔案的讀取存取權給 ElastiCache
<a name="backups-seeding-redis-grant-access"></a>

現在，授予 .rdb 備份檔案的讀取存取權給 ElastiCache。您可以根據儲存貯體位於預設AWS區域或選擇加入AWS區域，以不同的方式授予 ElastiCache 對備份檔案的存取權。

AWS 2019 年 3 月 20 日之前推出的區域預設為啟用。您可以立即開始在這些AWS區域中工作。2019 年 3 月 20 日之後推出的區域 (例如亞太區域 (香港) 和 中東 (巴林)) 預設為停用。您必須先啟用或選擇加入這些區域才能使用它們，如 *AWS 一般參考* 中的[管理AWS區域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)所說明。

根據您的AWS區域選擇您的方法：
+ 對於預設區域，請使用[授予預設區域中 .rdb 檔案的讀取存取權給 ElastiCache](#backups-seeding-redis-default-region)中的程序。
+ 對於選擇加入區域，請使用[授予 選擇加入區域中 .rdb 檔案的讀取存取權給 ElastiCache](#backups-seeding-opt-in-region)中的程序。

### 授予預設區域中 .rdb 檔案的讀取存取權給 ElastiCache
<a name="backups-seeding-redis-default-region"></a>

AWS 2019 年 3 月 20 日之前推出的區域預設為啟用。您可以立即開始在這些AWS區域中工作。2019 年 3 月 20 日之後推出的區域 (例如亞太區域 (香港) 和 中東 (巴林)) 預設為停用。您必須先啟用或選擇加入這些區域才能使用它們，如 *AWS 一般參考* 中的[管理AWS區域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)所說明。

**授予 ElastiCache 預設啟用AWS之 區域中備份檔案的讀取存取權**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇包含您 .rdb 檔案的 S3 儲存貯體名稱。

1. 選擇包含您 .rdb 檔案的資料夾名稱。

1. 選擇您的 .rdb 備份檔案名稱。所選檔案的名稱將會顯示在頁面頂端的標籤上方。

1. 選擇**許可**。

1. 如果 **aws-scs-s3-readonly** 或下列清單中的其中一個正式 ID 不會列為使用者，請執行下列動作：

   1. 在**存取其他AWS帳戶**下，選擇**新增承授者**。

   1. 在方塊中，新增AWS區域的正式 ID，如下所示：
      + AWS GovCloud （美國西部） 區域：

        ```
        40fa568277ad703bd160f66ae4f83fc9dfdfd06c2f1b5060ca22442ac3ef8be6
        ```
**重要**  
備份必須位於 中的 S3 儲存貯體中，AWS GovCloud (US)才能下載到 中的 Valkey 或 Redis OSS 叢集AWS GovCloud (US)。
      + AWS預設啟用的區域：

        ```
        540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353
        ```

   1. 針對下列項目選擇 **Yes (是)** 以設定儲存貯體的許可：
      + **列出/寫入物件**
      + **讀取/寫入物件 ACL 許可**

   1. 選擇**儲存**。

1. 選擇 **Overview (概觀)**，然後選擇 **Download (下載)**。

### 授予 選擇加入區域中 .rdb 檔案的讀取存取權給 ElastiCache
<a name="backups-seeding-opt-in-region"></a>

AWS 2019 年 3 月 20 日之前推出的區域預設為啟用。您可以立即開始在這些AWS區域中工作。2019 年 3 月 20 日之後推出的區域 (例如亞太區域 (香港) 和 中東 (巴林)) 預設為停用。您必須先啟用或選擇加入這些區域才能使用它們，如 *AWS 一般參考* 中的[管理AWS區域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)所說明。

現在，授予 .rdb 備份檔案的讀取存取權給 ElastiCache。

**授予 ElastiCache 對備份檔案的讀取存取**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 選擇包含您 .rdb 檔案的 S3 儲存貯體名稱。

1. 選擇包含您 .rdb 檔案的資料夾名稱。

1. 選擇您的 .rdb 備份檔案名稱。所選檔案的名稱將會顯示在頁面頂端的標籤上方。

1. 選擇**許可**索引標籤。

1. 在 **Permissions** (許可) 中，選擇 **Bucket policy** (儲存貯體政策)，然後選擇 **Edit** (編輯)。

1. 更新政策以授予 ElastiCache 執行作業所需的許可：
   + 將 `[ "Service" : "region-full-name.elasticache-snapshot.amazonaws.com" ]` 新增至 `Principal`。
   + 新增下列將快照匯出至 Amazon S3 儲存貯體所需的許可：
     + `"s3:GetObject"`
     + `"s3:ListBucket"`
     + `"s3:GetBucketAcl"`

   以下是已更新政策可能有的外觀範例。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "Policy15397346",
       "Statement": [
           {
               "Sid": "Stmt15399483",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:ListBucket",
                   "s3:GetBucketAcl"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket",
                   "arn:aws:s3:::amzn-s3-demo-bucket/backup1.rdb",
                   "arn:aws:s3:::amzn-s3-demo-bucket/backup2.rdb"
               ]
           }
       ]
   }
   ```

------

1. 選擇**儲存變更**。

### 使用 .rdb 檔案資料種子 ElastiCache 叢集
<a name="backups-seeding-redis-seed-cluster"></a>

現在，您已準備好建立 ElastiCache 叢集，並將 .rdb 檔案資料植入其中。若要建立叢集，請依照[為 Valkey 或 Redis OSS 建立叢集](Clusters.Create.md)或[從頭開始建立 Valkey 或 Redis OSS 複寫群組](Replication.CreatingReplGroup.NoExistingCluster.md)中的指示進行。請務必選擇 Valkey 或 Redis OSS 做為叢集引擎。

您用來告訴 ElastiCache 在何處尋找您上傳到 Amazon S3 的備份的方法，取決於您用來建立叢集的方法：

**使用 .rdb 檔案資料種子 ElastiCache for Redis OSS 叢集或複寫群組**
+ **使用 ElastiCache 主控台**

  選取 **Cluster settings** (叢集設定) 時，請選擇 **Restore from backups** (從備份還原) 做為叢集建立方法，然後在 **Backup source** (備份來源) 區段中，選擇 **Other backups** (其他備份) 做為您的 **Source** (來源)。在 **Seed RDB file S3 location (植入 RDB 檔案 S3 位置)** 方塊中，輸入檔案的 Amazon S3 路徑。如果您有多個 .rdb 檔案，請以逗號分隔清單輸入每個檔案的路徑。Amazon S3 路徑看起來像 `myBucket/myFolder/myBackupFilename.rdb`。
+ **使用AWS CLI**

  如果您使用 `create-cache-cluster` 或 `create-replication-group` 操作，請使用參數 `--snapshot-arns` 來指定每個 .rdb 檔案的完整 ARN。例如 `arn:aws:s3:::myBucket/myFolder/myBackupFilename.rdb`。此 ARN 必須解析為您存放在 Amazon S3 中的備份檔案。
+ **使用 ElastiCache API**

  如果您使用 `CreateCacheCluster` 或 `CreateReplicationGroup` ElastiCache API 作業，請使用參數 `SnapshotArns` 來指定每個 .rdb 檔案的完整 ARN。例如 `arn:aws:s3:::myBucket/myFolder/myBackupFilename.rdb`。此 ARN 必須解析為您存放在 Amazon S3 中的備份檔案。

**重要**  
植入 Valkey 或 Redis OSS （啟用叢集模式） 叢集時，您必須在新的叢集或複寫群組中設定每個節點群組 （碎片）。請使用參數 `--node-group-configuration` (API：`NodeGroupConfiguration`) 來執行此操作。如需詳細資訊，請參閱下列內容：  
CLI：AWS CLI參考中的 [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html) 
API：「ElastiCache API 參考」中的 [CreateReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html)

在建立叢集的過程中，Valkey 或 Redis OSS 備份中的資料會寫入叢集。您可以檢視 ElastiCache 事件訊息以監控進度。若要執行此操作，請查看 ElastiCache 主控台，並選擇 **Cache Events (快取事件)**。您也可以使用AWS ElastiCache 命令列界面或 ElastiCache API 來取得事件訊息。如需詳細資訊，請參閱[檢視 ElastiCache 事件](ECEvents.Viewing.md)。

# ElastiCache 中的引擎版本和升級
<a name="engine-versions"></a>

本節涵蓋支援的 Valkey、Memcached 和 Redis OSS 引擎，以及如何升級。請注意，Redis OSS 7.2 提供的所有功能預設可在 Valkey 7.2 及更高版本中使用。您也可以從某些現有的 ElastiCache for Redis OSS 引擎升級至 Valkey 引擎。

# 升級引擎版本，包括跨引擎升級
<a name="VersionManagement.HowTo"></a>

**Valkey 和 Redis OSS**

透過 Valkey 和 Redis OSS，您可以使用 ElastiCache 主控台 AWS CLI、 或 ElastiCache API 修改叢集或複寫群組的版本升級，並指定較新的引擎版本。

您也可以從 Redis OSS 跨升級至 Valkey。如需跨升級的詳細資訊，請參閱 [如何從 Redis OSS 升級到 Valkey](#VersionManagement.HowTo.cross-engine-upgrade)。

**Topics**
+ [如何從 Redis OSS 升級到 Valkey](#VersionManagement.HowTo.cross-engine-upgrade)
+ [解決封鎖的 Valkey 或 Redis OSS 引擎升級](#resolving-blocked-engine-upgrades)


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/VersionManagement.HowTo.html)

**Memcached**

使用 Memcached，若要開始叢集的版本升級，請修改它並指定較新的引擎版本。您可以使用 ElastiCache 主控台、 AWS CLI或 ElastiCache API 進行升級：
+ 若要使用 AWS 管理主控台，請參閱 – [使用 ElastiCache AWS 管理主控台](Clusters.Modify.md#Clusters.Modify.CON)。
+ 若要使用 AWS CLI，請參閱 [AWS CLI 搭配 ElastiCache 使用](Clusters.Modify.md#Clusters.Modify.CLI)。
+ 若要使用 ElastiCache API，請參閱「[使用 ElastiCache API](Clusters.Modify.md#Clusters.Modify.API)」。

## 如何從 Redis OSS 升級到 Valkey
<a name="VersionManagement.HowTo.cross-engine-upgrade"></a>

Valkey 旨在做為 Redis OSS 7 的插入式取代。您可以使用主控台、API 或 CLI，指定新的引擎和主要引擎版本，從 Redis OSS 升級到 Valkey。升級不會變更端點 IP 地址和應用程式的所有其他層面。從 Redis OSS 5.0.6 及更高版本升級時，您不會遇到停機時間。

**注意**  
**AWS Redis OSS 至 Valkey 升級的 CLI 版本需求：**  
對於 AWS CLI v1：最低必要版本 1.35.2 （目前版本：1.40.22)
對於 AWS CLI v2：最低必要版本 2.18.2 （目前版本：2.27.22)

**注意**  
從早於 5.0.6 的 Redis OSS 版本升級時，您可能會在 DNS 傳播期間遇到 30 到 60 秒的容錯移轉時間。
若要將現有的 Redis OSS （停用叢集模式） 單一節點叢集升級至 Valkey 引擎，請先遵循下列步驟：[使用現有叢集建立複寫群組](Replication.CreatingReplGroup.ExistingCluster.md)。將 Redis OSS （停用叢集模式） 單一節點叢集新增至複寫群組後，您就可以跨引擎升級至 Valkey。

### 將複寫群組從 Redis OSS 升級到 Valkey
<a name="cross-engine-upgrades.replication-group"></a>

如果您有現有的 Redis OSS 複寫群組正在使用預設快取參數群組，您可以使用 modify-replication-group API 指定新的引擎和引擎版本，以升級至 Valkey。

若為 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
   --replication-group-id myReplGroup \
   --engine valkey \
   --engine-version 8.0
```

針對 Windows：

```
aws elasticache modify-replication-group ^
   --replication-group-id myReplGroup ^
   --engine valkey ^
   --engine-version 8.0
```

如果您將自訂快取參數群組套用至想要升級的現有 Redis OSS 複寫群組，您也需要在請求中傳遞自訂的 Valkey 快取參數群組。輸入 Valkey 自訂參數群組必須與現有的 Redis OSS 自訂參數群組具有相同的 Redis OSS 靜態參數值。

若為 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
   --replication-group-id myReplGroup \
   --engine valkey \
   --engine-version 8.0 \
   --cache-parameter-group-name myParamGroup
```

針對 Windows：

```
aws elasticache modify-replication-group ^
   --replication-group-id myReplGroup ^
   --engine valkey ^
   --engine-version 8.0 ^
   --cache-parameter-group-name myParamGroup
```

### 使用 CLI 將 Redis OSS 無伺服器快取升級至 Valkey
<a name="cross-engine-upgrades.cli"></a>

若為 Linux、macOS 或 Unix：

```
aws elasticache modify-serverless-cache \
   --serverless-cache-name myCluster \
   --engine valkey \
   --major-engine-version 8
```

針對 Windows：

```
aws elasticache modify-serverless-cache ^
   --serverless-cache-name myCluster ^
   --engine valkey ^
   --major-engine-version 8
```

### 使用主控台將 Redis OSS 升級到 Valkey
<a name="cross-engine-upgrades.console"></a>

**從 Redis OSS 5 升級到 Valkey**

1. 選取要升級的 Redis OSS 快取。

1. 應會出現**升級到 Valkey** 視窗。選取**升級至 Valkey** 按鈕。

1. 前往**快取設定**，然後選取**引擎版本**。建議使用最新版本的 Valkey。

1. 如果此快取是無伺服器快取，則您需要更新參數群組。前往**快取設定的****參數群組**區域，選取適當的參數群組，例如 *default.valkey8*。

1. 選取**升級**。

此快取現在會列在 主控台的 Valkey 區域中。

**注意**  
在 DNS 傳播期間，直接從 Redis OSS 4 或更低版本升級至 Valkey 可能包含 30 到 60 秒的較長容錯移轉時間。

### 如何從 Valkey 降級至 Redis OSS
<a name="cross-engine-downgrades.console"></a>

 如果基於任何原因您想要復原升級的叢集，Amazon ElastiCache 支援將 Valkey 7.2 快取復原至 Redis OSS 7.1。您可以使用與引擎升級相同的主控台、API 或 CLI 步驟執行轉返，並將 Redis OSS 7.1 指定為目標引擎版本。轉返使用與升級相同的程序。復原不會變更端點 IP 地址和應用程式的所有其他層面，也不會發生停機時間。

 此外，您可以將從 Valkey 7.2 快取建立的快照還原為 Redis OSS 7.1 快取。從快照還原時，您可以將 Redis OSS 7.1 指定為目標引擎版本。使用此選項時，將從快照建立新的快取。從快照還原不會影響從中建立快照的 Valkey 快取。

 執行轉返時，適用下列要求和限制：
+  ElastiCache 僅支援從 Valkey 7.2 轉返至 Redis OSS 7.1。即使您從比 Redis OSS 7.1 更舊的版本升級至 Valkey 7.2，也是如此。
+  與正在復原的複寫群組或無伺服器快取相關聯的任何使用者群組和使用者都必須設定為引擎類型 `REDIS`。

## 解決封鎖的 Valkey 或 Redis OSS 引擎升級
<a name="resolving-blocked-engine-upgrades"></a>

如下表所示，如果您有待處理的擴展操作，則會封鎖您的 Valkey 或 Redis OSS 引擎升級操作。


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/VersionManagement.HowTo.html)

**解決封鎖的 Valkey 或 Redis OSS 引擎升級**
+ 執行以下任意一項：
  + 清除**立即套用**核取方塊，為下一個維護時段排程 Redis OSS 或 Valkey 引擎升級操作。

    若是 CLI，使用 `--no-apply-immediately`。若是 API，使用 `ApplyImmediately=false`。
  + 請等到下一個維護時段 （或之後） 執行 Redis OSS 引擎升級操作。
  + 選擇**立即套用**核取方塊，將 Redis OSS 擴展操作新增至此叢集修改。

    若是 CLI，使用 `--apply-immediately`。若是 API，使用 `ApplyImmediately=true`。

    此方法會立即執行引擎升級，而取消下一個維護時段的引擎升級。

# ElastiCache 延伸支援
<a name="extended-support"></a>

使用 ElastiCache 延伸支援，您可以在標準支援日期結束後繼續在主要引擎版本上執行快取，但需額外付費。如果您在標準支援日期結束後未升級，則會向您收取費用。

延伸支援提供下列更新和技術支援：
+ 快取和快取引擎的關鍵和高 CVEs 的安全更新
+ 重大問題的錯誤修正和修補程式
+ 在標準 ElastiCache 服務水準協議中開啟支援案例並接收疑難排解協助的能力

此付費方案可讓您有更多時間升級至支援的主要引擎版本。

例如，Redis OSS 4.0.10 的 ElastiCache 標準支援結束日期為 2026 年 1 月 31 日。如果您尚未準備好在該日期之前手動升級至 Valkey 或升級至 Redis OSS 6 或更新版本，ElastiCache 會自動在延伸支援中註冊快取，而且您可以繼續執行 Redis OSS 4.0.10。從標準支援結束後下個月的第一天開始，2026 年 2 月 1 日，ElastiCache 會自動向您收取延長支援的費用。

延伸支援在主要引擎版本的標準支援結束日期後，最多可使用 3 年。對於 Elasticache for Redis OSS 第 4 版和第 5 版，將為 2029 年 1 月 31 日。在此日期之後，仍在執行 Redis OSS 第 4 版和第 5 版的任何快取都會自動升級至最新版的 Valkey。

一旦引擎的支援期間結束，繼續執行該舊版本的快取會自動轉換為延伸支援。您會在延長支援定價開始日期之前收到通知，以便您可以改為升級執行個體。您也可以透過升級至支援的版本，隨時明確選擇退出。

如需標準支援結束日期和延長支援結束日期的詳細資訊，請參閱 [適用於 Redis OSS 生命週期結束排程的 ElastiCache 版本](engine-versions.md#deprecated-engine-versions) for Valkey、Memcached 或 Redis OSS。

**Topics**
+ [ElastiCache 延長支援費用](extended-support-charges.md)
+ [具有 ElastiCache 延伸支援的版本](extended-support-versions.md)
+ [ElastiCache 和客戶對 ElastiCache 延伸支援的責任](extended-support-responsibilities.md)

# ElastiCache 延長支援費用
<a name="extended-support-charges"></a>

從標準支援結束後的第二天開始，註冊 ElastiCache 延伸支援的所有引擎都會產生費用。如需 ElastiCache 標準支援結束日期，請參閱 [具有 ElastiCache 延伸支援的版本](extended-support-versions.md)。

當您採取下列其中一個動作時，ElastiCache 延伸支援的額外收費會自動停止：
+ 升級至標準支援涵蓋的引擎版本。
+ 刪除在ElastiCache標準支援日期結束後執行主要版本的快取。

如果您的目標引擎版本未來進入延伸支援，則費用會重新啟動。

例如，假設適用於 Redis OSS 的 ElastiCache 第 4 版在 2026 年 2 月 1 日進入延伸支援，而您在 2027 年 1 月 1 日將 v4 上的快取升級至 v6。對於 ElastiCache 第 4 版的 Redis OSS，您只需支付 11 個月的延長支援費用。如果您在標準支援結束日期 2027 年 1 月 31 日之後繼續執行適用於 Redis OSS 的 ElastiCache 第 6 版，則這些快取將從 2027 年 2 月 1 日開始再次產生延長支援費用。

您可以透過防止 ElastiCache 在標準支援日期結束後建立或還原快取，來避免 ElastiCacheExtended Support 的費用。 ElastiCache ElastiCache 

如需詳細資訊，請參閱 [Amazon ElastiCache 定價](https://aws.amazon.com/elasticache/pricing/)。

# 具有 ElastiCache 延伸支援的版本
<a name="extended-support-versions"></a>

Redis 開放原始碼軟體 (OSS) 第 4 版和第 5 版分別在 2020 年和 2022 年達到其社群的生命週期結束。這表示社群不會發佈進一步的更新、錯誤修正或安全修補程式。ElastiCache 上 ElastiCache Redis OSS 第 4 版和第 5 版的標準支援將於 2026 年 1 月 31 日結束。繼續使用不支援的 Redis OSS 版本，可能會讓您的資料容易受到已知[常見漏洞與暴露 ](https://nvd.nist.gov/vuln-metrics/cvss)(CVEs。

從 2026 年 2 月 1 日開始，仍在 Redis OSS 第 4 版和第 5 版上執行的 ElastiCache 快取將自動註冊到擴充支援，以提供持續可用性和安全性。雖然延伸支援提供彈性，但我們建議您將終止標準支援視為生產工作負載的規劃里程碑。強烈建議您在標準支援結束前，將 Redis OSS v4 和 v5 快取升級至 ElastiCache for Valkey 或 Redis OSS v6 或更新版本。

下表摘要說明 Amazon ElastiCache 標準支援結束日期和延長支援日期。

**延長支援和生命週期結束排程**


| 主要引擎版本 | 標準支援結束 | 延伸支援 Y1 Premium 的開始 | 延伸支援 Y2 Premium 的開始 | 延伸支援 Y3 Premium 的開始 | 延長支援結束和版本 EOL | 
| --- | --- | --- | --- | --- | --- | 
| Redis OSS v4 | 1/31/2026 | 2/1/2026 | 2/1/2027 | 2/1/2028 | 1/31/2029 | 
| Redis OSS v5 | 1/31/2026 | 2/1/2026 | 2/1/2027 | 2/1/2028 | 1/31/2029 | 
| Redis OSS v6 | 1/31/2027 | 2/1/2027 | 2/1/2028 | 2/1/2029 | 1/31/2030 | 

延伸支援僅適用於每個主要 Redis OSS 版本的最新支援修補程式版本。當延伸支援從 2026 年 2 月 1 日開始，如果您的 Redis OSS v4 和 v5 叢集尚未在最新的修補程式版本上，它們將自動升級至適用於 Redis OSS v4 的 v4.0.10，以及適用於 Redis OSS v5 的 v5.0.6，然後再註冊延伸支援。這可確保您透過延伸支援接收安全性更新和錯誤修正。在延伸支援轉換期間，您不需要採取任何動作來升級至這些最新的修補程式版本。

# ElastiCache 和客戶對 ElastiCache 延伸支援的責任
<a name="extended-support-responsibilities"></a>

以下是 Amazon ElastiCache 的責任，以及您對 ElastiCache 延伸支援的責任。

**Amazon ElastiCache 責任**

在 ElastiCache 標準支援結束日期之後，Amazon ElastiCache 將為在 ElastiCache 延伸支援中註冊的引擎提供修補程式、錯誤修正和升級。這將發生長達 3 年，或直到您在延伸支援中停止使用引擎為止，以先發生者為準。

**您的責任**

您有責任在 ElastiCache 延伸支援中套用針對快取提供的修補程式、錯誤修正和升級。Amazon ElastiCache 保留隨時變更、取代或撤銷此類修補程式、錯誤修正和升級的權利。如果為了解決安全或關鍵穩定性問題而需要修補程式，Amazon ElastiCache 保留使用修補程式更新您的快取，或要求您安裝修補程式的權利。

在 ElastiCache 延長支援結束日期之前，您也必須負責將引擎升級至較新的引擎版本。ElastiCache 延長支援結束日期通常是 ElastiCache 標準支援結束日期後 3 年。

如果您未升級引擎，則在 ElastiCache 延長支援結束日期之後，Amazon ElastiCache 會嘗試將引擎升級至 ElastiCache 標準支援下支援的較新引擎版本。如果升級失敗，Amazon ElastiCache 會保留刪除在 ElastiCache 標準支援日期結束後執行引擎之快取的權利。不過，在這樣做之前，Amazon ElastiCache 會從該引擎保留您的資料。

# ElastiCache 的版本管理
<a name="VersionManagement"></a>

管理您要如何更新 ElastiCache 快取，以及為 Valkey、Memcached 和 Redis OSS 引擎更新的節點型叢集。

## ElastiCache Serverless Cache 的版本管理
<a name="VersionManagement-serverless"></a>

管理 ElastiCache Serverless 快取是否升級以及何時升級，並根據您自己的期限和時間表執行版本升級。

ElastiCache Serverless 會自動將最新的次要和修補程式軟體版本套用至快取，而不會對您的應用程式造成任何影響或停機。您不需要進行任何動作。

當新的主要版本可用時，ElastiCache Serverless 會在主控台中傳送通知，並在 EventBridge 中傳送事件給您。您可以選擇使用主控台、CLI 或 API 修改快取，然後選取最新的引擎版本，以將快取升級至最新的主要版本。與次要和修補程式升級類似，主要版本升級會在不停機的情況下執行。

## 節點型 ElastiCache 叢集的版本管理
<a name="VersionManagement-clusters"></a>

使用節點型 ElastiCache 叢集時，您可以控制為叢集提供支援的軟體何時升級至 ElastiCache 支援的新版本。您可以控制何時將快取升級至最新的可用主要、次要和修補程式版本。您可以修改引擎版本並指定新的引擎版本，以初始化叢集或複寫群組的引擎版本升級。

您可以控制為叢集供電的通訊協定合規軟體是否和何時升級至 ElastiCache 支援的新版本。這一層控制可讓您維持特定版本的相容性、在部署至生產環境前先利用您的應用程式測試新版本，並根據自己的期限和時間表執行版本升級。

由於版本升級可能涉及一定的相容性風險，因此這些升級不會自行啟動，必須由您啟動。

**Valkey 和 Redis OSS 叢集**

**注意**  
如果跨一或多個區域複寫 Valkey 或 Redis OSS 叢集，則會針對次要區域升級引擎版本，然後針對主要區域升級引擎版本。
 ElastiCache for Redis OSS 版本是以構成主要和次要元件的語意版本來識別。例如，在 Redis OSS 6.2 中，主要版本為 6，次要版本為 2。操作節點型叢集時，ElastiCache for Redis OSS 也會公開修補程式元件，例如 Redis OSS 6.2.1，且修補程式版本為 1。  
主要版本適用於 API 不相容的變更，次要版本適用於以回溯相容方式新增的新功能。修補程式版本適用於回溯相容的錯誤修正和非功能變更。

使用 Valkey 和 Redis OSS，您可以透過修改並指定新的引擎版本來啟動對叢集或複寫群組的引擎版本升級。如需詳細資訊，請參閱[修改複寫群組](Replication.Modify.md)。

**Memcached**

使用 Memcached，若要升級至較新的版本，您必須修改叢集，並指定要使用的新引擎版本。升級至更新版本的 Memcached 是一種破壞性程序，您會失去所有資料，並從空白快取開始。如需詳細資訊，請參閱[修改 ElastiCache 叢集](Clusters.Modify.md)。

從舊版 Memcached 升級到 Memcached 1.4.33 版或更新版本時，請注意下列要求。`CreateCacheCluster` 和 `ModifyCacheCluster` 必須滿足下列條件：
+ 如果 `slab_chunk_max > max_item_size`。
+ 如果 `max_item_size modulo slab_chunk_max != 0`。
+ 如果 `max_item_size > ((max_cache_memory - memcached_connections_overhead) / 4)`。

  `(max_cache_memory - memcached_connections_overhead)` 值是節點可供資料使用的記憶體。如需詳細資訊，請參閱[Memcached 連線額外負荷](ParameterGroups.Engine.md#ParameterGroups.Memcached.Overhead)。

## 支援的引擎和版本
<a name="supported-engine-versions"></a>

ElastiCache 無伺服器快取支援適用於 Valkey 和更新版本的 ElastiCache 7.2 版、適用於 Memcached 和更新版本的 ElastiCache 1.6 版，以及適用於 Redis OSS 和更新版本的 ElastiCache 7.0 版。

節點型 ElastiCache 叢集支援適用於 Valkey 和更新版本的 ElastiCache 7.2 版、適用於 Memcached 和更新版本的 ElastiCache 1.4.5 版，以及適用於 Redis OSS 和更新版本的 ElastiCache 4.0.10 版。

**Topics**
+ [支援的 Valkey 版本](#supported-engine-versions.valkey)
+ [Valkey 8.2](#valkey-version-8.2)
+ [Valkey 8.1](#valkey-version-8.1)
+ [Valkey 8.0](#valkey-version-8)
+ [適用於 Valkey 的 ElastiCache 7.2.6 版](#valkey-version-7.2.6)

### 支援的 Valkey 版本
<a name="supported-engine-versions.valkey"></a>

支援的 Valkey 版本如下。請注意，根據預設，Valkey 支援 ElastiCache 7.2 for Redis OSS 提供的大多數功能。
+ 您也可以升級 5.0.6 以前版本的 ElastiCache 叢集。所涉及的程序相同，但可能會在 DNS 傳播期間產生較長的容錯移轉時間 (30s-1m)。
+ 從 Redis OSS 7 開始，ElastiCache 支援在 Valkey 或 Redis OSS （停用叢集模式） 與 Valkey 或 Redis OSS （啟用叢集模式） 之間切換。
+ Amazon ElastiCache for Redis OSS 引擎升級程序旨在盡最大努力保留現有的資料，並需要成功的 Redis OSS 複寫。
+ 升級引擎時，ElastiCache 會終止現有的用戶端連線。為了在引擎升級期間將停機時間降至最低，我們建議您[為 Redis OSS 用戶端實作最佳實務](BestPractices.Clients.redis.md)，其中包含錯誤重試和指數退避，以及[將維護期間停機時間降至最低](BestPractices.MinimizeDowntime.md)的最佳實務。
+ 升級引擎時，您無法直接從 Valkey 或 Redis OSS （停用叢集模式） 升級到 Valkey 或 Redis OSS （啟用叢集模式）。下列程序說明如何從 Valkey 或 Redis OSS （停用叢集模式） 升級到 Valkey 或 Redis OSS （啟用叢集模式）。

**從 Valkey 或 Redis OSS （停用叢集模式） 升級到 Valkey 或 Redis OSS （啟用叢集模式） 引擎版本**

  1. 備份您的 Valkey 或 Redis OSS （停用叢集模式） 叢集或複寫群組。如需詳細資訊，請參閱[取得手動備份](backups-manual.md)。

  1. 使用備份建立並植入具有一個碎片 （節點群組） 的 Valkey 或 Redis OSS （啟用叢集模式） 叢集。指定新的引擎版本，並在建立叢集或複寫群組時啟用叢集模式。如需詳細資訊，請參閱[教學課程：使用外部建立的備份植入新的節點型叢集](backups-seeding-redis.md)。

  1. 刪除舊的 Valkey 或 Redis OSS （停用叢集模式） 叢集或複寫群組。如需詳細資訊，請參閱 [在 ElastiCache 中刪除叢集](Clusters.Delete.md) 或 [刪除複寫群組](Replication.DeletingRepGroup.md) 。

  1. 將新的 Valkey 或 Redis OSS （啟用叢集模式） 叢集或複寫群組擴展為您需要的碎片數量 （節點群組）。如需詳細資訊，請參閱[擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)
+ 升級主要引擎版本 (例如從 5.0.6 升級到 6.0) 時，還需要選擇一個與新引擎版本相容的新參數群組。
+ 對於停用異地同步備份的單一 Redis OSS 叢集和叢集，我們建議向 Redis OSS 提供足夠的記憶體，如中所述[確保您有足夠的記憶體來建立 Valkey 或 Redis OSS 快照](BestPractices.BGSAVE.md)。在這類案例中，主要叢集將無法在升級期間處理服務的請求。
+ 對於啟用異地同步備份的 Redis OSS 叢集，我們也建議您在低傳入寫入流量期間排程引擎升級。升級至 Redis OSS 5.0.6 或更新版本時，主要叢集會繼續在升級程序期間供服務請求使用。

  系統會依下列方式處理及修補含多個碎片的叢集和複寫群組：
  + 所有碎片都會平行處理。不論任何時間，一個碎片上都只能執行一項升級操作。
  + 在每個碎片中，都會先處理所有複本，再處理主要複本。如果某個碎片中的複本較少，則該碎片中的主要複本可能會在其他碎片的複本處理完成前就已處理。
  + 跨所有碎片時，則會循序處理主要節點。一次只會升級一個主要節點。
+ 如果您目前的叢集和複寫群組已啟用加密功能，就無法升級到不支援加密的引擎版本，例如從 3.2.6 升級到 3.2.10。

**Memcached 考量事項**

升級節點型 Memcached 叢集時，請考慮下列事項。
+ 引擎版本管理功能是為了讓您能夠盡可能控制執行修補的方式，但在系統或快取軟體可能存在關鍵安全漏洞的情況下，ElastiCache 保留代您修補叢集的權利。
+ 由於 Memcached 引擎不支援永久儲存，因此 Memcached 引擎版本升級一定是破壞性程序，並會清除叢集中的所有快取資料。

### 適用於 Valkey 的 ElastiCache 8.2 版
<a name="valkey-version-8.2"></a>

以下是 Valkey 8.2 引進的一些新功能 （相較於 ElastiCache Valkey 8.1)：
+ 原生支援[向量搜尋](vector-search.md)，可讓您在記憶體中存放、編製索引、搜尋和更新數十億個高維度向量內嵌，延遲低至微秒。

如需 Valkey 的詳細資訊，請參閱 [Valkey](https://valkey.io/)。

如需介紹向量搜尋的 Valkey 8.2 版本的詳細資訊，請參閱 [Valkey 搜尋](https://github.com/valkey-io/valkey-search)。

### 適用於 Valkey 的 ElastiCache 8.1 版
<a name="valkey-version-8.1"></a>

以下是 Valkey 8.1 引進的一些新功能 （相較於 ElastiCache Valkey 8.0)：
+ [新的雜湊資料表](https://valkey.io/blog/new-hash-table/)實作，可減少記憶體額外負荷，以降低常見金鑰/值模式高達 20% 的記憶體使用量。
+ 原生支援 [Bloom 篩選條件](https://valkey.io/topics/bloomfilters/)，這是一種新的資料類型，相較於使用設定資料類型，可讓您使用高達 98% 的記憶體來執行查詢。
+ 記錄慢速執行、大型請求和大型回應的新命令 [COMMANDLOG](https://valkey.io/commands/commandlog-get/)。
+ 新的條件式更新支援使用 IFEQ 引數的 SET 命令。
+ 效能改善，包括 ZRANK 命令延遲降低高達 45%、PFMERGE 和 PFCOUNT 效能提升高達 12 倍，以及 BITCOUNT 輸送量提高高達 514%。

如需 Valkey 的詳細資訊，請參閱 [Valkey](https://valkey.io/)

如需 Valkey 8.1 版本的詳細資訊，請參閱 [Valkey 8.1 版本備註](https://github.com/valkey-io/valkey/blob/8.1/00-RELEASENOTES)

### 適用於 Valkey 的 ElastiCache 8.0 版
<a name="valkey-version-8"></a>

以下是 Valkey 8.0 引進的一些新功能 （相較於 ElastiCache Valkey 7.2.6)：
+ 記憶體效率改善，可讓使用者儲存每個節點最多 20% 的資料，而不需進行任何應用程式變更。
+ 新推出的節點型叢集每個插槽指標基礎設施，提供個別插槽效能和資源用量的詳細可見性。
+ 適用於 Valkey 8.0 的 ElastiCache Serverless 每 2-3 分鐘可以將支援的每秒請求 (RPS) 加倍，從 13 分鐘內的零達到每個快取 5M RPS，並具有一致的低於毫秒的 p50 讀取延遲。

如需 Valkey 的詳細資訊，請參閱 [Valkey](https://valkey.io/)

如需 Valkey 8 版本的詳細資訊，請參閱 [Valkey 8 版本備註](https://github.com/valkey-io/valkey/blob/8.0/00-RELEASENOTES)

### 適用於 Valkey 的 ElastiCache 7.2.6 版
<a name="valkey-version-7.2.6"></a>

2024 年 10 月 10 日發行適用於 Valkey 的 ElastiCache 7.2.6 版。以下是 7.2 中引進的一些新功能 （相較於適用於 Redis OSS 的 ElastiCache 7.1 版）：
+ 各種資料類型的效能和記憶體最佳化：清單和設定類型索引鍵的記憶體最佳化、排序集命令的速度最佳化、叢集模式中具有多個索引鍵的命令的效能最佳化、pub/sub 效能改善、SCAN、SSCAN、HSCAN、ZSCAN 命令的效能最佳化，以及許多其他較小的最佳化。
+ ZRANK 和 ZREVRANK 命令的新 WITHSCORE 選項
+ CLIENT NO-TOUCH 可讓用戶端執行命令，而不會影響金鑰的 LRU/LFU。
+ 新的命令 CLUSTER MYSHARDID，傳回節點的碎片 ID，以根據複寫在叢集模式中邏輯上將節點分組。

如需 Valkey 的詳細資訊，請參閱 [Valkey](https://valkey.io/)

如需 ElastiCache 7.2 for Valkey 版本的詳細資訊，請參閱 [Redis OSS 7.2.4 版本備註 ](https://github.com/valkey-io/valkey/blob/d2c8a4b91e8c0e6aefd1f5bc0bf582cddbe046b7/00-RELEASENOTES)(ElastiCache 7.2 for Valkey 包含從 ElastiCache 7.1 for Redis OSS 到 ElastiCache 7.2.4 for Redis OSS 的所有變更）。GitHub [上 Valkey 的 Valkey 7.2 版本備註](https://github.com/valkey-io/valkey/blob/7.2/00-RELEASENOTES)。

## 適用於 Valkey 的 ElastiCache 8.2 版
<a name="valkey-version-8.2.main"></a>

以下是 Valkey 8.2 引進的一些新功能 （相較於 ElastiCache Valkey 8.1)：
+ 原生支援[向量搜尋](vector-search.md)，可讓您在記憶體中存放、編製索引、搜尋和更新數十億個高維度向量內嵌，延遲低至微秒。

如需 Valkey 的詳細資訊，請參閱 [Valkey。](https://valkey.io/)

如需介紹向量搜尋的 Valkey 8.2 版本的詳細資訊，請參閱 [Valkey 搜尋](https://github.com/valkey-io/valkey-search)。

## 適用於 Valkey 的 ElastiCache 8.1 版
<a name="valkey-version-8.1.main"></a>

以下是 Valkey 8.1 引進的一些新功能 （相較於 ElastiCache Valkey 8.0)：
+ [新的雜湊資料表](https://valkey.io/blog/new-hash-table/)實作，可減少記憶體額外負荷，以降低常見索引鍵/值模式高達 20% 的記憶體使用量。
+ 原生支援 [Bloom 篩選條件](https://valkey.io/topics/bloomfilters/)，這是一種新的資料類型，相較於使用設定資料類型，可讓您使用高達 98% 的記憶體來執行查詢。
+ 記錄慢速執行、大型請求和大型回應的新命令 [COMMANDLOG](https://valkey.io/commands/commandlog-get/)。
+ 新的條件式更新支援使用 IFEQ 引數的 SET 命令。
+ 效能改善，包括 ZRANK 命令延遲降低高達 45%、PFMERGE 和 PFCOUNT 效能提升高達 12 倍，以及 BITCOUNT 輸送量提高高達 514%。

如需 Valkey 的詳細資訊，請參閱 [Valkey](https://valkey.io/)

如需 Valkey 8.1 版本的詳細資訊，請參閱 [Valkey 8.1 版本備註](https://github.com/valkey-io/valkey/blob/8.1/00-RELEASENOTES)

## 適用於 Valkey 的 ElastiCache 8.0 版
<a name="valkey-version-8.main"></a>

以下是 Valkey 8.0 引進的一些新功能 （相較於 ElastiCache Valkey 7.2.6)：
+ 記憶體效率改善，可讓使用者儲存每個節點最多 20% 的資料，而不需進行任何應用程式變更。
+ 新推出的節點型叢集每個插槽指標基礎設施，提供個別插槽效能和資源用量的詳細可見性。
+ ElastiCache Serverless for Valkey 8.0 每 2 到 3 分鐘可以將支援的每秒請求數 (RPS) 加倍，在 13 分鐘內從零達到每個快取 5M 萬 RPS，並具有一致的低於毫秒的 p50 讀取延遲。

如需 Valkey 的詳細資訊，請參閱 [Valkey](https://valkey.io/)

如需 Valkey 8 版本的詳細資訊，請參閱 [Valkey 8 版本備註](https://github.com/valkey-io/valkey/blob/8.0/00-RELEASENOTES)

## 適用於 Valkey 的 ElastiCache 7.2.6 版
<a name="valkey-version-7.2.6.main"></a>

2024 年 10 月 10 日發行適用於 Valkey 的 ElastiCache 7.2.6 版。以下是 7.2 中引進的一些新功能 （相較於適用於 Redis OSS 的 ElastiCache 7.1 版）：
+ 各種資料類型的效能和記憶體最佳化：清單和設定類型索引鍵的記憶體最佳化、排序集命令的速度最佳化、叢集模式中具有多個索引鍵的命令的效能最佳化、pub/sub 效能改善、SCAN、SSCAN、HSCAN、ZSCAN 命令的效能最佳化，以及許多其他較小的最佳化。
+ ZRANK 和 ZREVRANK 命令的新 WITHSCORE 選項
+ CLIENT NO-TOUCH 可讓用戶端執行命令，而不會影響金鑰的 LRU/LFU。
+ 新的命令 CLUSTER MYSHARDID，傳回節點的碎片 ID，以根據複寫在叢集模式中邏輯上將節點分組。

如需 Valkey 的詳細資訊，請參閱 [Valkey](https://valkey.io/)

如需 ElastiCache 7.2 for Valkey 版本的詳細資訊，請參閱 [Redis OSS 7.2.4 版本備註 ](https://github.com/valkey-io/valkey/blob/d2c8a4b91e8c0e6aefd1f5bc0bf582cddbe046b7/00-RELEASENOTES)(ElastiCache 7.2 for Valkey 包含從 ElastiCache 7.1 for Redis OSS 到 ElastiCache 7.2.4 for Redis OSS 的所有變更）。GitHub [上 Valkey 的 Valkey 7.2 版本備註](https://github.com/valkey-io/valkey/blob/7.2/00-RELEASENOTES)。

## 支援的 Redis OSS 引擎版本
<a name="supported-engine-versions.redis"></a>

ElastiCache Serverless 快取和節點型叢集支援所有 Redis OSS 7.1 版和之前版本。
+ [適用於 Redis OSS 的 ElastiCache 7.1 版 （增強版）](#redis-version-7.1)

**Topics**
+ [適用於 Redis OSS 的 ElastiCache 7.1 版 （增強版）](#redis-version-7.1)
+ [適用於 Redis OSS 的 ElastiCache 7.0 版 （增強版）](#redis-version-7.0)
+ [適用於 Redis OSS 的 ElastiCache 6.2 版 （增強版）](#redis-version-6.2)
+ [適用於 Redis OSS 的 ElastiCache 6.0 版 （增強版）](#redis-version-6.0)
+ [適用於 Redis OSS 的 ElastiCache 5.0.6 版 （增強版）](#redis-version-5-0.6)
+ [適用於 Redis OSS 的 ElastiCache 5.0.5 版 （已棄用，請使用 5.0.6 版）](#redis-version-5-0.5)
+ [適用於 Redis OSS 的 ElastiCache 5.0.4 版 （已棄用，請使用 5.0.6 版）](#redis-version-5-0.4)
+ [適用於 Redis OSS 的 ElastiCache 5.0.3 版 （已棄用，請使用 5.0.6 版）](#redis-version-5-0.3)
+ [適用於 Redis OSS 的 ElastiCache 5.0.0 版 （已棄用，請使用 5.0.6 版）](#redis-version-5-0)
+ [適用於 Redis OSS 的 ElastiCache 4.0.10 版 （增強版）](#redis-version-4-0-10)
+ [過去的生命週期結束 (EOL) 版本 (3.x)](#redis-version-3-2-10-scheduled-eol)
+ [過去的生命週期結束 (EOL) 版本 (2.x)](#redis-version-2-x-eol)

### 適用於 Redis OSS 的 ElastiCache 7.1 版 （增強版）
<a name="redis-version-7.1"></a>

此版本包含效能改進，可讓工作負載提高輸送量並降低操作延遲。適用於 Redis OSS 的 ElastiCache 7.1 版推出[兩個主要增強功能](https://aws.amazon.com/blogs/database/achieve-over-500-million-requests-per-second-per-cluster-with-amazon-elasticache-for-redis-7-1/)：

我們擴展了增強型 I/O 執行緒功能，現在也能夠處理呈現層邏輯。依呈現層，我們是指增強型 I/O 執行緒，現在不僅讀取用戶端輸入，還會將輸入剖析為 Redis OSS 二進位命令格式。然後再將其轉發到主執行緒來執行，藉此實現效能增益。改善 Redis OSS 記憶體存取模式。來自許多資料結構操作的執行步驟為交錯式，以確保平行記憶體存取並降低記憶體存取延遲。在 Graviton3 型 `R7g.4xlarge` 或更大型的版本上執行 ElastiCache 時，客戶能夠達到每個節點每秒超過 1 百萬次請求。透過 ElastiCache for Redis OSS 7.1 版的效能改善，相較於 ElastiCache for Redis OSS 7.0 版，客戶可以實現多 100% 的輸送量和低 50% 的 P99 延遲。這些增強功能會在至少具有 8 個實體核心 (Graviton 上為 `2xlarge`，x86 上為 `4xlarge`) 的節點大小上啟用，不論 CPU 類型為何，而且不需進行用戶端變更。

**注意**  
ElastiCache v7.1 與 Redis OSS v7.0 相容。

### 適用於 Redis OSS 的 ElastiCache 7.0 版 （增強版）
<a name="redis-version-7.0"></a>

ElastiCache for Redis OSS 7.0 新增了許多改善和新功能的支援：
+ [函數](https://valkey.io/topics/functions-intro/)：ElastiCache for Redis OSS 7 新增對 Redis OSS Functions 的支援，並提供受管體驗，讓開發人員可以使用存放在 ElastiCache 叢集上的應用程式邏輯來執行 [LUA 指令碼](https://valkey.io/topics/eval-intro/)，而無需用戶端透過每個連線將指令碼重新傳送至伺服器。
+ [ACL 改進](https://valkey.io/topics/acl/)：Valkey 和 Redis OSS 7 新增對下一版本存取控制清單 (ACLs) 的支援。用戶端現在可以在 Valkey 和 Redis OSS 中指定特定金鑰或金鑰空間的多組許可。
+ [碎片 Pub/Sub](https://valkey.io/topics/pubsub/)：ElastiCache for Valkey 和 Redis OSS 7 新增了在叢集模式啟用 (CME) 中執行 ElastiCache 時，以碎片方式執行 Pub/Sub 功能的支援。Pub/Sub 功能可讓發佈者傳送訊息給頻道上任何數量的訂閱者。頻道繫結至 ElastiCache 叢集中的碎片，無需跨碎片傳播頻道資訊，進而改善可擴展性。
+ 增強型 I/O 多工：ElastiCache for Valkey 和 Redis OSS 7 推出增強型 I/O 多工，可為與 ElastiCache 叢集有許多並行用戶端連線的高輸送量工作負載提供更高的輸送量和更低的延遲。例如，使用 r6g.xlarge 節點叢集並執行 5200 個並行用戶端時，相較於適用於 Redis OSS 的 ElastiCache 第 6 版，您可以實現高達 72% 的輸送量 （每秒讀取和寫入操作） 和高達 71% 的 P99 延遲。

如需 Valkey 的詳細資訊，請參閱 [Valkey](https://valkey.io/)。如需 Redis OSS 7.0 版本的詳細資訊，請參閱 GitHub [上 Redis OSS 的 Redis OSS 7.0 版本備註](https://github.com/redis/redis/blob/7.0/00-RELEASENOTES)。

### 適用於 Redis OSS 的 ElastiCache 6.2 版 （增強版）
<a name="redis-version-6.2"></a>

ElastiCache for Redis OSS 6.2 包括使用具有 8 vCPUs或更多的 x86 節點類型，或具有 4 個 vCPU 或更多的 Graviton2 節點類型，來改善啟用 TLS 的叢集的效能。 vCPUs 這些增強功能將加密卸載至其他 vCPU，藉此提升輸送量並縮短用戶端建立連線的時間。使用 Redis OSS 6.2，您也可以使用存取控制清單 (ACL) 規則來管理對 Pub/Sub 頻道的存取。

 在此版本中，我們還推出對含有在本機上連接至 NVMe SSD 之叢集節點的資料分層的支援。如需詳細資訊，請參閱[ElastiCache 中的資料分層](data-tiering.md)。

Redis OSS 引擎 6.2.6 版也推出原生 JavaScript 物件標記法 (JSON) 格式的支援，這是一種簡單、無結構描述的方式，可編碼 Redis OSS 叢集內的複雜資料集。透過 JSON 支援，您可以為透過 JSON 操作的應用程式利用效能和 Redis OSS APIs。如需詳細資訊，請參閱 [JSON 入門](json-gs.md)。同時包括 JSON 相關指標 `JsonBasedCmds` 和 `JsonBasedCmdsLatency`，這會整合至 CloudWatch 中，監控此資料類型的使用情況。如需詳細資訊，請參閱[Valkey 和 Redis OSS 的指標](CacheMetrics.Redis.md)。

您可以藉由使用 6.2 來指定引擎版本。ElastiCache 會自動叫用可用的 Redis OSS 6.2 偏好修補程式版本。例如，當您建立/修改叢集時，請將 `--engine-version` 參數設定為 6.2。叢集將在建立/修改時，使用目前可用的 Redis OSS 6.2 偏好修補程式版本啟動。在 API 中指定引擎版本 6.x 會導致 Redis OSS 6 的最新次要版本。

針對現有的 6.0 叢集，您可以選擇加入下一個自動次要版本升級，方法是將 `AutoMinorVersionUpgrade`、`yes`、`CreateCacheCluster` 或 `ModifyCacheCluster` API 中的 `CreateReplicationGroup` 參數設為 `ModifyReplicationGroup`。ElastiCache 將使用自助式更新，將現有 6.0 叢集的次要版本升級至 6.2。如需詳細資訊，請參閱 [Amazon ElastiCache 中的自助服務更新](Self-Service-Updates.md)。

呼叫 DescribeCacheEngineVersions API 時，會將 `EngineVersion` 參數值設為 6.2，且會在 `CacheEngineVersionDescription` 欄位中傳回附有修補程式版本的實際引擎版本。 

如需 Redis OSS 6.2 版本的詳細資訊，請參閱 GitHub 上 [Redis OSS 的 Redis OSS 6.2 版本備註](https://github.com/redis/redis/blob/6.2/00-RELEASENOTES)。

### 適用於 Redis OSS 的 ElastiCache 6.0 版 （增強版）
<a name="redis-version-6.0"></a>

Amazon ElastiCache 推出下一個版本的 ElastiCache for Redis OSS 引擎，包括[使用角色型存取控制驗證使用者](Clusters.RBAC.md)、用戶端快取和重大的操作改進。

 從 Redis OSS 6.0 開始，ElastiCache 將為每個 Redis OSS 次要版本提供單一版本，而不是提供多個修補程式版本。ElastiCache 會自動管理執行中叢集的修補程式版本，以確保效能提升和安全性提升。

您也可以將 `AutoMinorVersionUpgrade` 參數設定為 以選擇加入下一個自動次要版本升級，`yes`ElastiCache 將透過自助式更新來管理次要版本升級。如需詳細資訊，請參閱[ElastiCache 中的服務更新](Self-Service-Updates.md)。

您可以使用 `6.0` 來指定引擎版本。ElastiCache 會自動叫用可用的 Redis OSS 6.0 偏好修補程式版本。例如，當您建立/修改叢集時，請將 `--engine-version` 參數設定為 6.0。叢集將在建立/修改時以目前可用的 Redis OSS 6.0 偏好修補程式版本啟動。任何具有特定修補程式版本值的請求都將遭到拒絕、擲回例外狀況，且處理會失敗。

呼叫 DescribeCacheEngineVersions API 時，會將 `EngineVersion` 參數值設為 6.0，且會在 `CacheEngineVersionDescription` 欄位中傳回附有修補程式版本的實際引擎版本。 

如需 Redis OSS 6.0 版本的詳細資訊，請參閱 GitHub [上 Redis OSS 的 Redis OSS 6.0 版本備註](https://github.com/redis/redis/blob/6.0/00-RELEASENOTES)。

### 適用於 Redis OSS 的 ElastiCache 5.0.6 版 （增強版）
<a name="redis-version-5-0.6"></a>

Amazon ElastiCache 推出適用於 Redis OSS 引擎的下一個 ElastiCache 版本，其中包括錯誤修正和下列累積更新：
+ 特定條件下的引擎穩定性保證。
+ 改善的 Hyperloglog 錯誤處理。
+ 改進交握命令，進行可靠複寫。
+ 以 `XCLAIM` 命令持續追蹤訊息遞送。
+ 改善物件中的 `LFU ` 欄位管理。
+ 改進使用 `ZPOP` 時的交易管理。
+ 重新命名命令的能力：稱為 `rename-commands`的參數，可讓您重新命名潛在危險或昂貴的 Redis OSS 命令，這可能會導致意外的資料遺失，例如 `FLUSHALL`或 `FLUSHDB`。這類似於開放原始碼 Redis OSS 中的重新命名命令組態。然而，ElastiCache 提供全受管工作流程，進一步提升功能體驗。命令名稱的變更會立即套用，並自動傳播至命令清單所在叢集中的所有節點。使用者無需介入重啟節點及其他任何操作。

  以下範例說明如何修改現有參數群組。此群組包含 `rename-commands` 參數，這是由空格分隔的命令清單，可供您重新命名。

  ```
  aws elasticache modify-cache-parameter-group --cache-parameter-group-name custom_param_group
  --parameter-name-values "ParameterName=rename-commands,  ParameterValue='flushall restrictedflushall'" --region region
  ```

  這個範例使用*重新命名 - 命令​*參數來將 `flushall`​ 命令重新命名為 `restrictedflushall`。

  若要重新命名多個命令，請使用下列參數：

  ```
  aws elasticache modify-cache-parameter-group --cache-parameter-group-name custom_param_group
  --parameter-name-values "ParameterName=rename-commands,  ParameterValue='flushall restrictedflushall flushdb restrictedflushdb''" --region region
  ```

  若要恢復任何變更，請重新執行命令，並從所要保留的 `ParameterValue` 清單中排除重新命名的值，如下所示：

  ```
  aws elasticache modify-cache-parameter-group --cache-parameter-group-name custom_param_group
  --parameter-name-values "ParameterName=rename-commands,  ParameterValue='flushall restrictedflushall'" --region region
  ```

  在這種情況下，`flushall` 命令將會重新命名為 `restrictedflushall`，任何其他重新命名的命令則恢復為其原始的命令名稱。
**注意**  
命令的重新命名功能具有下列限制：  
所有重新命名的命令應採用英數字元。
新的命令名稱最大長度是 20 個英數字元。
為命令重新命名時，請確實更新叢集所關聯的參數群組。
若要完全防止使用特定命令，請使用關鍵字 `blocked`，如下所示：  

    ```
    aws elasticache modify-cache-parameter-group --cache-parameter-group-name custom_param_group
    --parameter-name-values "ParameterName=rename-commands,  ParameterValue='flushall blocked'" --region region
    ```

  進一步了解參數變更和可以重新命名的命令清單，請參閱 [Redis OSS 5.0.3 參數變更](ParameterGroups.Engine.md#ParameterGroups.Redis.5-0-3)。
+ Redis OSS 串流：這會建立日誌資料結構的模型，允許生產者即時附加新項目。同時也允許消費者以封鎖或非封鎖方式取用訊息。串流也允許消費者群組，其代表以合作方式取用相同訊息串流的一組用戶端，類似 [Apache Kafka](https://kafka.apache.org/documentation/)。如需詳細資訊，請參閱[串流](https://valkey.io/topics/streams-intro)。
+ 支援一系列的串流命令，例如 `XADD`、`XRANGE` 和 `XREAD`。如需詳細資訊，請參閱[串流命令](https://valkey.io/commands/#stream)。
+ 多個新的和重新命名的參數。如需詳細資訊，請參閱[Redis OSS 5.0.0 參數變更](ParameterGroups.Engine.md#ParameterGroups.Redis.5.0)。
+ 新的 Redis OSS 指標 `StreamBasedCmds`。
+ Redis OSS 節點的快照時間略快。

**重要**  
ElastiCache 已從 [Redis OSS 開放原始碼 5.0.1 版](https://github.com/redis/redis/blob/5.0/00-RELEASENOTES)向後移植兩個重要的錯誤修正。下列為其說明：  
特定金鑰已到期時 RESTORE 不相符的回覆。
`XCLAIM` 命令可能傳回錯誤的項目，或取消同步通訊協定。
這兩種錯誤修正都包含在 Redis OSS 引擎 5.0.0 版的 ElastiCache for Redis OSS 支援中，並在未來版本更新中耗用。

如需詳細資訊，請參閱 GitHub [上 Redis OSS 的 Redis OSS 5.0.6 版本備註](https://github.com/redis/redis/blob/5.0/00-RELEASENOTES)。

### 適用於 Redis OSS 的 ElastiCache 5.0.5 版 （已棄用，請使用 5.0.6 版）
<a name="redis-version-5-0.5"></a>

Amazon ElastiCache 推出適用於 Redis OSS 引擎的下一個 ElastiCache 版本；它包括在所有計劃操作期間自動容錯移轉叢集 ElastiCache 的線上組態變更。您現在可以擴展叢集、升級 Redis OSS 引擎版本，並在叢集保持連線並繼續處理傳入請求時套用修補程式和維護更新。它也包括錯誤修正。

如需詳細資訊，請參閱 GitHub [上 Redis OSS 的 Redis OSS 5.0.5 版本備註](https://github.com/redis/redis/blob/5.0/00-RELEASENOTES)。

### 適用於 Redis OSS 的 ElastiCache 5.0.4 版 （已棄用，請使用 5.0.6 版）
<a name="redis-version-5-0.4"></a>

Amazon ElastiCache 推出 ElastiCache 支援的下一個 Redis OSS 引擎版本。包含下列增強功能：
+ 特定條件下的引擎穩定性保證。
+ 改善的 Hyperloglog 錯誤處理。
+ 改進交握命令，進行可靠複寫。
+ 以 `XCLAIM` 命令持續追蹤訊息遞送。
+ 改善物件中的 `LFU ` 欄位管理。
+ 改進使用 `ZPOP` 時的交易管理。

如需詳細資訊，請參閱 GitHub [上 Redis OSS 的 Redis OSS 5.0.4 版本備註](https://github.com/redis/redis/blob/5.0/00-RELEASENOTES)。

### 適用於 Redis OSS 的 ElastiCache 5.0.3 版 （已棄用，請使用 5.0.6 版）
<a name="redis-version-5-0.3"></a>

Amazon ElastiCache 推出下一個版本的 ElastiCache for Redis OSS 引擎，其中包括錯誤修正。

### 適用於 Redis OSS 的 ElastiCache 5.0.0 版 （已棄用，請使用 5.0.6 版）
<a name="redis-version-5-0"></a>

Amazon ElastiCache 推出適用於 Redis OSS 引擎的下一個主要版本 ElastiCache。適用於 Redis OSS 的 ElastiCache 5.0.0 版支援下列改進：
+ Redis OSS 串流：這會建立日誌資料結構的模型，允許生產者即時附加新項目。同時也允許消費者以封鎖或非封鎖方式取用訊息。串流也允許消費者群組，其代表以合作方式取用相同訊息串流的一組用戶端，類似 [Apache Kafka](https://kafka.apache.org/documentation/)。如需詳細資訊，請參閱[串流](https://valkey.io/topics/streams-intro)。
+ 支援一系列的串流命令，例如 `XADD`、`XRANGE` 和 `XREAD`。如需詳細資訊，請參閱[串流命令](https://valkey.io/commands/#stream)。
+ 多個新的和重新命名的參數。如需詳細資訊，請參閱[Redis OSS 5.0.0 參數變更](ParameterGroups.Engine.md#ParameterGroups.Redis.5.0)。
+ 新的 Redis OSS 指標 `StreamBasedCmds`。
+ Redis OSS 節點的快照時間略快。

### 適用於 Redis OSS 的 ElastiCache 4.0.10 版 （增強版）
<a name="redis-version-4-0-10"></a>

Amazon ElastiCache 推出適用於 Redis OSS 引擎的下一個主要版本 ElastiCache。ElastiCache 4.0.10 for Redis OSS 提供下列改進的支援：
+ 在單一 ElastiCache 版本中同時調整線上叢集大小和加密。如需詳細資訊，請參閱下列內容：
  + [擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)
  + [Valkey 或 Redis OSS 的線上重新分片 （啟用叢集模式）](scaling-redis-cluster-mode-enabled.md#redis-cluster-resharding-online)
  + [Amazon ElastiCache 的資料安全性](encryption.md)
+ 多個新的參數。如需詳細資訊，請參閱[Redis OSS 4.0.10 參數變更](ParameterGroups.Engine.md#ParameterGroups.Redis.4-0-10)。
+ 支援記憶體的一系列命令，例如 `MEMORY`。如需詳細資訊，請參閱 [命令 ](https://valkey.io/commands)（搜尋 MEMO)。
+ 支援線上記憶體重組，可保障更有效的記憶體使用率，讓您的資料可使用更多記憶體。
+ 非同步排清和刪除功能支援。ElastiCache for Redis OSS 支援 等命令`UNLINK`，`FLUSHDB`以及在與主執行緒不同的執行緒中`FLUSHALL`執行。這麼做可用非同步方式釋放記憶體，藉以提升應用程式的效能與回應時間。
+ 新的 Redis OSS 指標 `ActiveDefragHits`。如需詳細資訊，請參閱 [Redis OSS 的指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CacheMetrics.Redis.html)。

執行適用於 Redis OSS 的 ElastiCache 3.2.10 版的 Redis OSS （停用叢集模式） 使用者可以使用主控台透過線上升級來升級其叢集。


**比較 ElastiCache 叢集調整大小和加密支援**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/engine-versions.html)

### 過去的生命週期結束 (EOL) 版本 (3.x)
<a name="redis-version-3-2-10-scheduled-eol"></a>

#### ElastiCache 3.2.10 版，適用於 Redis OSS （增強版）
<a name="redis-version-3-2-10"></a>

Amazon ElastiCache 推出適用於 Redis OSS 引擎的下一個主要版本 ElastiCache。適用於 Redis OSS （增強版） 的 ElastiCache 3.2.10 版引入了線上叢集調整大小，以在繼續處理傳入 I/O 請求的同時，從叢集新增或移除碎片。ElastiCache for Redis OSS 3.2.10 使用者擁有舊版 Redis OSS 的所有功能，但加密其資料的能力除外。此能力目前僅於 3.2.6 版提供。


**比較適用於 Redis OSS 的 ElastiCache 3.2.6 和 3.2.10 版**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/engine-versions.html)

如需詳細資訊，請參閱下列內容：
+ [Valkey 或 Redis OSS 的線上重新分片 （啟用叢集模式）](scaling-redis-cluster-mode-enabled.md#redis-cluster-resharding-online)
+ [線上叢集大小調整](best-practices-online-resharding.md)

#### 適用於 Redis OSS 的 ElastiCache 3.2.6 版 （增強版）
<a name="redis-version-3-2-6"></a>

Amazon ElastiCache 推出適用於 Redis OSS 引擎的下一個主要版本 ElastiCache。ElastiCache 3.2.6 for Redis OSS 使用者可存取舊版 Redis OSS 的所有功能，以及加密其資料的選項。如需詳細資訊，請參閱下列內容：
+ [ElastiCache 傳輸中加密 (TLS)](in-transit-encryption.md)
+ [ElastiCache 中的靜態加密](at-rest-encryption.md)
+ [Amazon ElastiCache 的合規驗證](elasticache-compliance.md)

#### 適用於 Redis OSS 的 ElastiCache 3.2.4 版 （增強版）
<a name="redis-version-3-2-4"></a>

Amazon ElastiCache 3.2.4 版推出適用於 Redis OSS 引擎的下一個主要版本 ElastiCache。ElastiCache 3.2.4 使用者可使用舊版 Redis OSS 的所有功能，以及可在*叢集模式**或非叢集模式下*執行的選項。下表提供摘要。


**比較 Redis OSS 3.2.4 非叢集模式和叢集模式**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/engine-versions.html)

**備註：**
+ **磁碟分割** - 將您的資料分割到 2 至 500 個節點群組 (碎片) 中，並對每個節點群組提供複寫支援。
+ **地理空間索引** – Redis OSS 3.2.4 透過六個 GEO 命令引入地理空間索引的支援。如需詳細資訊，請參閱 Valkey [Commands 頁面上的 Redis OSS GEO\$1 命令文件 Commands： GEO](http://valkey.io/commands#geo) （針對 GEO 篩選）。

如需其他 Redis OSS 3 功能的詳細資訊，請參閱 [Redis OSS 3.2 版本備註](https://github.com/redis/redis/blob/3.2/00-RELEASENOTES)和 [Redis OSS 3.0 版本備註。](https://github.com/redis/redis/blob/3.0/00-RELEASENOTES)

目前 ElastiCache 受管 Valkey 或 Redis OSS （啟用叢集模式） 不支援下列 Redis OSS 3.2 功能：
+ 複本移轉
+ 叢集重新平衡
+ Lua 除錯器

ElastiCache 會停用下列 Redis OSS 3.2 管理命令：
+ `cluster meet`
+ `cluster replicate`
+ `cluster flushslots`
+ `cluster addslots`
+ `cluster delslots`
+ `cluster setslot`
+ `cluster saveconfig`
+ `cluster forget`
+ `cluster failover`
+ `cluster bumpepoch`
+ `cluster set-config-epoch`
+ `cluster reset`

如需 Redis OSS 3.2.4 參數的相關資訊，請參閱 [Redis OSS 3.2.4 參數變更](ParameterGroups.Engine.md#ParameterGroups.Redis.3-2-4)。

### 過去的生命週期結束 (EOL) 版本 (2.x)
<a name="redis-version-2-x-eol"></a>

#### 適用於 Redis OSS 的 ElastiCache 2.8.24 版 （增強版）
<a name="redis-version-2-8-24"></a>

自 2.8.23 版以來新增的 Redis OSS 改進包括錯誤修正和錯誤記憶體存取地址的記錄。如需詳細資訊，請參閱 [Redis OSS 2.8 版本備註。](https://github.com/redis/redis/blob/2.8/00-RELEASENOTES)

#### 適用於 Redis OSS 的 ElastiCache 2.8.23 版 （增強版）
<a name="redis-version-2-8-23"></a>

自 2.8.22 版以來新增的 Redis OSS 改進包括錯誤修正。如需詳細資訊，請參閱 [Redis OSS 2.8 版本備註。](https://github.com/redis/redis/blob/2.8/00-RELEASENOTES)此版本也包括對新參數 `close-on-slave-write` 的支援，若啟用此參數，則會在用戶端嘗試寫入唯讀複本時中斷其連線。

如需 Redis OSS 2.8.23 參數的詳細資訊，請參閱《ElastiCache 使用者指南[Redis OSS 2.8.23 （增強版） 新增參數](ParameterGroups.Engine.md#ParameterGroups.Redis.2-8-23)》中的 。

#### 適用於 Redis OSS 的 ElastiCache 2.8.22 版 （增強版）
<a name="redis-version-2-8-22"></a>

自 2.8.21 版以來新增的 Redis OSS 改進包括下列項目：
+ 支援無延伸備份和同步，其可讓您為備份額外負荷配置較少的記憶體，而為應用程式配置較多的記憶體。如需詳細資訊，請參閱[同步與備份的實作方式](Replication.Redis.Versions.md)。此無延伸程序可能會影響延遲和輸送量。具有高寫入傳輸量時，當複本重新同步時，有可能在整段同步期間都無法連線。
+ 如果發生容錯移轉，由於複本會盡可能與主要節點執行部分同步，而不需進行完整同步，因此現在可以更快恢復複寫群組。此外，主要節點和複本不再需要於同步期間使用磁碟，因此可提供更快的速度。
+ 支援兩項新的 CloudWatch 指標。
  + `ReplicationBytes` - 複寫群組的主要叢集傳送給僅供讀取複本的位元組數。
  + `SaveInProgress` - 二進位值，其指出背景儲存程序是否正在執行。

   如需詳細資訊，請參閱[使用 CloudWatch 指標監控用量](CacheMetrics.md)。
+ 針對複寫 PSYNC 行為的多項關鍵錯誤修正。如需詳細資訊，請參閱 [Redis OSS 2.8 版本備註。](https://github.com/redis/redis/blob/2.8/00-RELEASENOTES)
+ 為了維持異地同步備份複寫群組中的增強複寫效能並提升叢集穩定性，現已不再支援非 ElastiCache 複本。
+ 為了提升複寫群組中主要叢集和複本之間的資料一致性，複本不會再獨立於主要叢集而移出鍵。
+ Redis OSS 2.8.22 版`appendonly`及更新版本`appendfsync`不支援 Redis OSS 組態變數和 。
+ 在記憶體不足的情況下，含大型輸出緩衝區的用戶端與複本叢集的連線可能會中斷。如果中斷連線，用戶端就需要重新連線。這類情況最可能發生在 PUBSUB 用戶端上。

#### 適用於 Redis OSS 的 ElastiCache 2.8.21 版
<a name="redis-version-2-8-21"></a>

自 2.8.19 版以來新增的 Redis OSS 改進包括許多錯誤修正。如需詳細資訊，請參閱 [Redis OSS 2.8 版本備註。](https://github.com/redis/redis/blob/2.8/00-RELEASENOTES)

#### 適用於 Redis OSS 的 ElastiCache 2.8.19 版
<a name="redis-version-2-8-19"></a>

自 2.8.6 版起新增的 Redis OSS 改進包括下列項目：
+ 支援 HyperLogLog。如需詳細資訊，請參閱 [Redis OSS 新資料結構：HyperLogLog](http://antirez.com/news/75)。
+ 有序集合資料類型現已支援使用新命令 `ZRANGEBYLEX`、`ZLEXCOUNT` 和 `ZREMRANGEBYLEX` 的詞典編纂範圍查詢。
+ 為了防止主要節點傳送過時資料給複本節點，如果背景儲存 (`bgsave`) 子處理序終止，則主控 SYNC 會失敗。
+ 支援 *HyperLogLogBasedCommands* CloudWatch 指標。如需詳細資訊，請參閱[Valkey 和 Redis OSS 的指標](CacheMetrics.Redis.md)。

#### 適用於 Redis OSS 的 ElastiCache 2.8.6 版
<a name="redis-version-2-8-6"></a>

自 2.6.13 版以來新增的 Redis OSS 改進包括下列項目：
+ 提升僅供讀取複本的復原能力與容錯能力。
+ 支援部分重新同步。
+ 支援使用者定義且必須隨時可供使用的僅供讀取複本最低數量。
+ 完整支援 pub/sub - 可通知用戶端伺服器相關事件。
+ 系統會自動偵測主要節點故障，並將主要節點容錯移轉至次要節點。

#### 適用於 Redis OSS 的 ElastiCache 2.6.13 版
<a name="redis-version-2-6-13"></a>

適用於 Redis OSS 的 ElastiCache 2.6.13 版是支援 Redis OSS 的 ElastiCache 初始版本。ElastiCache 2.6.13 版的 Redis OSS 不支援異地同步備份。

## 適用於 Redis OSS 生命週期結束排程的 ElastiCache 版本
<a name="deprecated-engine-versions"></a>

本節定義宣布的舊有主要版本生命週期結束 (EOL) 日期。這可讓您針對未來做出版本和升級決策。

**注意**  
5.0.0 到 5.0.5 for Redis OSS 的 ElastiCache 版本已棄用。使用 5.0.6 版 (或更高版)。

下表顯示 ElastiCache for Redis OSS 引擎的[延伸支援](extended-support.md)排程。

**延長支援和生命週期結束排程**


| 主要引擎版本 | 標準支援結束 | 延伸支援 Y1 Premium 的開始 | 延伸支援 Y2 Premium 的開始 | 延伸支援 Y3 Premium 的開始 | 延長支援結束和版本 EOL | 
| --- | --- | --- | --- | --- | --- | 
| Redis OSS v4 | 1/31/2026 | 2/1/2026 | 2/1/2027 | 2/1/2028 | 1/31/2029 | 
| Redis OSS v5 | 1/31/2026 | 2/1/2026 | 2/1/2027 | 2/1/2028 | 1/31/2029 | 
| Redis OSS v6 | 1/31/2027 | 2/1/2027 | 2/1/2028 | 2/1/2029 | 1/31/2030 | 

下表摘要每個版本及宣布的 EOL 日期，以及建議的升級目標版本。

**過去的 EOL**


| 來源主要版本 | 來源次要版本 | 建議升級目標 | EOL 日期 | 
| --- | --- | --- | --- | 
|  第 3 版 |  3.2.4 版、3.2.6 版和 3.2.10 版  |  6.2 版或更高版本  針對 US-ISO-EAST-1、US-ISO-WEST-1 和 US-ISOB-EAST-1 區域，建議使用 5.0.6 或更新版本。   |  2023 年 7 月 31 日  | 
|  2 版  |  2.8.24、2.8.23、2.8.22、2.8.21、2.8.19、、2.8.12、2.8.6、2.6.13  |  6.2 版或更高版本  針對 US-ISO-EAST-1、US-ISO-WEST-1 和 US-ISOB-EAST-1 區域，建議使用 5.0.6 或更新版本。   |  2023 年 1 月 13 日  | 

## 支援的 ElastiCache for Memcached 版本
<a name="supported-engine-versions-mc"></a>

ElastiCache 支援下列 Memcached 版本，且可升級為更新版本。升級至較新版本時，請特別注意必須滿足的相關條件，以免升級失敗。

**Topics**
+ [適用於 Memcached 的 ElastiCache 1.6.22 版](#memcached-version-1-6-22)
+ [適用於 Memcached 的 ElastiCache 1.6.17 版](#memcached-version-1-6-17)
+ [適用於 Memcached 的 ElastiCache 1.6.12 版](#memcached-version-1-6-12)
+ [適用於 Memcached 的 ElastiCache 1.6.6 版](#memcached-version-1-6-6)
+ [適用於 Memcached 的 ElastiCache 1.5.16 版](#memcached-version-1-5-16)
+ [適用於 Memcached 的 ElastiCache 1.5.10 版](#memcached-version-1-5-10)
+ [適用於 Memcached 的 ElastiCache 1.4.34 版](#memcached-version-1-4-34)
+ [適用於 Memcached 的 ElastiCache 1.4.33 版](#memcached-version-1-4-33)
+ [適用於 Memcached 的 ElastiCache 1.4.24 版](#memcached-version-1-4-24)
+ [適用於 Memcached 的 ElastiCache 1.4.14 版](#memcached-version-1-4-14)
+ [適用於 Memcached 的 ElastiCache 1.4.5 版](#memcached-version-1-4-5)

### 適用於 Memcached 的 ElastiCache 1.6.22 版
<a name="memcached-version-1-6-22"></a>

ElastiCache for Memcached 1.6.22 for Memcached 新增對 Memcached 1.6.22 版的支援。其中沒有任何新功能，但包括錯誤修正以及 [Memcached 1.6.18](https://github.com/memcached/memcached/wiki/ReleaseNotes1618) 的累積更新。

如需詳細資訊，請參閱 GitHub 中 Memcached 上的 [ReleaseNotes1622](https://github.com/memcached/memcached/wiki/ReleaseNotes1622)。

### 適用於 Memcached 的 ElastiCache 1.6.17 版
<a name="memcached-version-1-6-17"></a>

ElastiCache for Memcached 1.6.17 for Memcached 新增對 Memcached 引擎 1.6.17 的支援。其中沒有任何新功能，但包括錯誤修正以及 [Memcached 1.6.17](https://github.com/memcached/memcached/wiki/ReleaseNotes1617) 的累積更新。

如需詳細資訊，請參閱 GitHub 中 Memcached 頁面上的 [ReleaseNotes1617](https://github.com/memcached/memcached/wiki/ReleaseNotes1617)。

### 適用於 Memcached 的 ElastiCache 1.6.12 版
<a name="memcached-version-1-6-12"></a>

ElastiCache for Memcached 1.6.12 for Memcached 新增對 Memcached 引擎 1.6.12 和傳輸中加密的支援。其中包括 [Memcached 1.6.6 版](https://github.com/memcached/memcached/wiki/ReleaseNotes166)的錯誤修正與累積更新。

如需詳細資訊，請參閱 GitHub 中 Memcached 頁面上的 [ReleaseNotes1612](https://github.com/memcached/memcached/wiki/ReleaseNotes1612)。

### 適用於 Memcached 的 ElastiCache 1.6.6 版
<a name="memcached-version-1-6-6"></a>

ElastiCache for Memcached 1.6.6 版新增對 Memcached 1.6.6 版的支援。其中沒有任何新功能，但包括錯誤修正以及 [Memcached 1.5.16](https://github.com/memcached/memcached/wiki/ReleaseNotes1.5.16) 的累積更新。ElastiCache for Memcached 不包含 [Extstore](https://memcached.org/extstore)。

如需詳細資訊，請參閱 GitHub 中 Memcached 頁面上的 [ReleaseNotes166](https://github.com/memcached/memcached/wiki/ReleaseNotes166)。

### 適用於 Memcached 的 ElastiCache 1.5.16 版
<a name="memcached-version-1-5-16"></a>

適用於 Memcached 的 ElastiCache 1.5.16 版新增了對 Memcached 1.5.16 版的支援。其中沒有任何新功能，但包括錯誤修正以及 [Memcached 1.5.14](https://github.com/memcached/memcached/wiki/ReleaseNotes1514) 與 [Memcached 1.5.15](https://github.com/memcached/memcached/wiki/ReleaseNotes1515) 的累積更新。

如需詳細資訊，請參閱 GitHub 中 Memcached 頁面的 [Memcached 1.5.16 版本備註](https://github.com/memcached/memcached/wiki/ReleaseNotes1516)。

### 適用於 Memcached 的 ElastiCache 1.5.10 版
<a name="memcached-version-1-5-10"></a>

ElastiCache 1.5.10 for Memcached 支援下列 Memcached 功能：
+ 自動化 slab 重新平衡。
+ 使用 `murmur3` 演算法進行更快速的雜湊資料表查閱。
+ 分段的 LRU 演算法。
+ LRU 爬蟲程式用來在背景回收記憶體。
+ `--enable-seccomp`：編譯時間選項。

它也推出 `no_modern` 和 `inline_ascii_resp` 方法。如需詳細資訊，請參閱[Memcached 1.5.10 參數變更](ParameterGroups.Engine.md#ParameterGroups.Memcached.1-5-10)。

自適用於 Memcached 的 ElastiCache 1.4.34 版以來新增的 Memcached 改進功能包括下列項目：
+ 累積修正程式，例如 ASCII multigets、CVE-2017-9951 和 `metadumper` 的限制爬蟲程式。
+ 在達到連線限制時關閉連線來獲得更好的連線管理。
+ 對於 1MB 以上的項目大小，改善的項目大小管理。
+ 透過將每一項目的記憶體需求減少一些位元組，獲得更好的效能和記憶體負擔改善。

如需詳細資訊，請參閱 GitHub 中 Memcached 頁面的 [Memcached 1.5.10 版本備註](https://github.com/memcached/memcached/wiki/ReleaseNotes1510)。

### 適用於 Memcached 的 ElastiCache 1.4.34 版
<a name="memcached-version-1-4-34"></a>

適用於 Memcached 的 ElastiCache 1.4.34 版未將任何新功能新增至 1.4.33 版。1.4.34 版是一款錯誤修正版本，其比一般類似版本的涵蓋範圍更大。

如需詳細資訊，請參閱 GitHub 中 Memcached 頁面的 [Memcached 1.4.34 版本備註](https://github.com/memcached/memcached/wiki/ReleaseNotes1434)。

### 適用於 Memcached 的 ElastiCache 1.4.33 版
<a name="memcached-version-1-4-33"></a>

自 1.4.24 版以來新增的改進包括下列項目：
+ 可傾印特定 slab 類別、slab 類別清單或所有 slab 類別的所有中繼資料。如需詳細資訊，請參閱 [Memcached 1.4.31 版本備註](https://github.com/memcached/memcached/wiki/ReleaseNotes1431)。
+ 已改善對預設超過 1 megabyte (MB) 大型項目的支援。如需詳細資訊，請參閱 [Memcached 1.4.29 版本備註](https://github.com/memcached/memcached/wiki/ReleaseNotes1429)。
+ 可指定在詢問關閉用戶端之前用戶端可閒置的時間。

  可動態增加 Memcached 可用的記憶體容量，而不需重新啟動叢集。如需詳細資訊，請參閱 [Memcached 1.4.27 版本備註](https://github.com/memcached/memcached/wiki/ReleaseNotes1427)。
+ 現已支援 `fetchers`、`mutations` 和 `evictions` 的記錄功能。如需詳細資訊，請參閱 [Memcached 1.4.26 版本備註](https://github.com/memcached/memcached/wiki/ReleaseNotes1426)。
+ 釋放的記憶體可以回收到全域集區，並重新指派給新的 slab 類別。如需詳細資訊，請參閱 [Memcached 1.4.25 版本備註](https://github.com/memcached/memcached/wiki/ReleaseNotes1425)。
+ 多項錯誤修正。
+ 一些新的命令和參數。如需清單，請參閱[Memcached 1.4.33 版新增參數](ParameterGroups.Engine.md#ParameterGroups.Memcached.1-4-33)。

### 適用於 Memcached 的 ElastiCache 1.4.24 版
<a name="memcached-version-1-4-24"></a>

自 1.4.14 版以來新增的改進包括下列項目：
+ 使用背景程序來進行最久未使用的項目 (LRU) 管理。
+ 已新增將 *jenkins* 或 *murmur3* 做為雜湊演算法的選項。
+ 一些新的命令和參數。如需清單，請參閱[Memcached 1.4.24 版新增參數](ParameterGroups.Engine.md#ParameterGroups.Memcached.1-4-24)。
+ 多項錯誤修正。

### 適用於 Memcached 的 ElastiCache 1.4.14 版
<a name="memcached-version-1-4-14"></a>

自 1.4.5 版以來新增的改進包括下列項目：
+ 增強型 slab 重新平衡功能。
+ 高效能與可擴展性提升。
+ 引進 *touch* 命令，以更新現有項目的過期時間，而不需擷取該項目。
+ 自動探索 - 可讓用戶端程式自動判斷快取叢集中的所有快取節點，並初始化及維持與這些節點的連線。

### 適用於 Memcached 的 ElastiCache 1.4.5 版
<a name="memcached-version-1-4-5"></a>

Memcached 的 ElastiCache 1.4.5 版是 Amazon ElastiCache for Memcached 支援的初始引擎和版本。

# 與 Valkey 的主要引擎版本行為和相容性差異
<a name="VersionManagementConsiderations-valkey"></a>

Valkey 7.2.6 與舊版 Redis OSS 7.2.4 有類似的相容性差異。如需最新支援的 Valkey 版本，請參閱 [支援的引擎和版本](VersionManagement.md#supported-engine-versions)。

如需 Valkey 7.2 版本的詳細資訊，請參閱 GitHub 上 [Redis OSS 7.2.4 版本備註](https://github.com/valkey-io/valkey/blob/d2c8a4b91e8c0e6aefd1f5bc0bf582cddbe046b7/00-RELEASENOTES) (Valkey 7.2 包含 Redis OSS 至 7.2.4 版的所有變更） 和 [Valkey 7.2 版本備註](https://github.com/valkey-io/valkey/blob/7.2/00-RELEASENOTES)。

以下是 Valkey 7.2 和 Redis OSS 7.1 （或 7.0) 之間可能中斷的行為變更：
+ 凍結時間取樣會在命令執行期間和指令碼中發生。
+ 當金鑰不再存在時所釋出的封鎖串流命令，會帶有不同的錯誤代碼 (-NOGROUP 或 -WRONGTYPE，而非 -UNBLOCKED)。
+ 指令碼的用戶端追蹤現在會追蹤指令碼讀取的金鑰，而不是 EVAL / FCALL 發起人宣告的金鑰。

# 與 Redis OSS 的主要引擎版本行為和相容性差異
<a name="VersionManagementConsiderations"></a>

**重要**  
以下頁面的結構目的是指出版本控制之間所有不相容的差異，並告知您升級至較新版本控制時應注意的事項。此清單包含您在升級時可能遇到的版本控制不相容問題。  
您可以直接從目前的 Redis OSS 版本升級到最新的 Redis OSS 版本，而不需要循序升級。例如，您可以直接從 Redis OSS 3.0 版升級至 7.0 版。

Redis OSS 版本是以語意版本識別，該版本包含主要、次要和修補程式元件。例如，在 Redis OSS 4.0.10 中，主要版本為 4、次要版本為 0，而修補程式版本為 10。這些值一般會根據下列慣例遞增：
+ 主要版本適用於 API 不相容的變更
+ 次要版本適用於以回溯相容方式新增的新功能
+ 修補程式版本適用於回溯相容的錯誤修正和非功能變更

我們建議您一律使用指定 **major.minor** 版本內的最新修補程式版本，以便獲得最新的效能和穩定性改善。從適用於 Redis OSS 的 ElastiCache 6.0 版開始，ElastiCache 將為每個 Redis OSS 次要版本提供單一版本，而不是提供多個修補程式版本。ElastiCache 將自動管理執行中叢集的修補程式版本，以確保效能改善和安全性增強。

同時建議您定期升級至最新主要版本，因為大部分主要改進功能並未向後移植至舊版。隨著 ElastiCache 將可用性擴展到新AWS區域，ElastiCache for Redis OSS 支援新區域的兩個最新 **major.minor** 版本。例如，如果新AWS區域啟動且 Redis OSS 的最新 major.minor ElastiCache 版本為 **7.0** 和 **6.2**，ElastiCache 將在新AWS區域中支援 Redis OSS 版本 **7.0** 和 **6.2。**隨著較新版本的 ElastiCache for Redis OSS 發行，ElastiCache 將繼續為新發行的版本新增支援。若要深入了解如何選擇 ElastiCache 的區域，請參閱[選擇區域和可用區域](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/RegionsAndAZs.html#SupportedRegions)。

進行跨主要或次要版本的升級時，請考慮下列清單，其中包括隨時間與 Redis OSS 一起發佈的行為和回溯不相容的變更。

## Redis OSS 7.0 行為和回溯不相容的變更
<a name="VersionManagementConsiderations-redis70"></a>

如需變更的完整清單，請參閱 [Redis OSS 7.0 版本備註。](https://raw.githubusercontent.com/redis/redis/7.0/00-RELEASENOTES)
+ `SCRIPT LOAD` 與 `SCRIPT FLUSH` 不再傳播到複本。如果您需要一些指令碼的耐用性，建議您考慮使用 [Redis OSS 函數](https://valkey.io/topics/functions-intro/)。
+ 根據預設，新 ACL 使用者現在會封鎖 Pubsub 頻道。
+ `LCS` 命令已取代 `STRALGO` 命令。
+ 已變更 `ACL GETUSER` 的格式，所有欄位皆會顯示標準存取字串模式。若您使用 `ACL GETUSER` 進行自動化，則應確認其能處理任一格式。
+ 已變更 `SELECT`、`WAIT`、`ROLE`、`LASTSAVE`、`READONLY`、`READWRITE` 和 `ASKING` 的 ACL 類別。
+ 現在，每個子命令的命令統計資料由 `INFO` 命令顯示，而非顯示於頂層容器命令。
+ 在部分邊緣情況下，`LPOP`、`RPOP`、`ZPOPMIN` 和 `ZPOPMAX` 命令的傳回值已變更。若您使用這些命令，則應確認版本備註，並評估您是否受到影響。
+ `SORT` 和 `SORT_RO` 命令現在需存取整個金鑰空間，以使用 `GET` 和 `BY` 引數。

## Redis OSS 6.2 行為和回溯不相容的變更
<a name="VersionManagementConsiderations-redis62"></a>

如需變更的完整清單，請參閱 [Redis OSS 6.2 版本備註。](https://raw.githubusercontent.com/redis/redis/6.2/00-RELEASENOTES)
+ `TIME`、`ECHO`、`ROLE` 和 `LASTSAVE` 命令的 ACL 旗標已變更。這可能會導致先前允許的命令遭拒，反之亦然。
**注意**  
這些命令都不會修改或授予資料存取權。
+ 從 Redis OSS 6.0 升級時，從映射回應傳回至 lua 指令碼的金鑰/值對順序會變更。如果您的指令碼使用或`redis.setresp()`傳回映射 (Redis OSS 6.0 的新功能），請考慮指令碼可能會在升級時中斷的影響。

## Redis OSS 6.0 行為和回溯不相容的變更
<a name="VersionManagementConsiderations-redis60"></a>

如需變更的完整清單，請參閱 [Redis OSS 6.0 版本備註。](https://raw.githubusercontent.com/redis/redis/6.0/00-RELEASENOTES)
+ 允許的資料庫數量上限已從 120 萬降低至 1 萬。預設值為 16，我們不鼓勵使用大於此的值，因為發現效能和記憶體問題。
+ 將`AutoMinorVersionUpgrade`參數設定為是，ElastiCache 將透過自助式更新管理次要版本升級。這將透過自助更新行銷活動，經由標準客戶通知管道來處理。如需詳細資訊，請參閱 [ElastiCache 中的自助服務更新](Self-Service-Updates.md)。

## Redis OSS 5.0 行為和回溯不相容的變更
<a name="VersionManagementConsiderations-redis50"></a>

如需變更的完整清單，請參閱 [Redis OSS 5.0 版本備註。](https://raw.githubusercontent.com/redis/redis/5.0/00-RELEASENOTES)
+ 指令碼是依效果複寫，而不是在複本上重新執行指令碼。這一般會改善效能，但可能會增加在主要項目和複本之間複寫的資料量。您可以選擇還原至先前的行為，該行為僅適用於 ElastiCache 5.0 版的 Redis OSS。
+ 如果您是從 Redis OSS 4.0 升級，LUA 指令碼中的某些命令會以與舊版中的不同順序傳回引數。在 Redis OSS 4.0 中，Ris OSS 會以詞典方式排序一些回應，讓回應具有決定性，當指令碼依效果複寫時，不會套用此排序。
+ Inn Redis OSS 5.0.3 及更高版本，ElastiCache for Redis OSS 會將部分 IO 工作卸載至執行個體類型上具有超過 4 個 VCPUs背景核心。這可能會變更 Redis OSS 的效能特性，並變更某些指標的值。如需詳細資訊，請參閱[應監控哪些指標？](CacheMetrics.WhichShouldIMonitor.md)，了解您是否需要變更您監控的指標。

## Redis OSS 4.0 行為和回溯不相容的變更
<a name="VersionManagementConsiderations-redis40"></a>

如需變更的完整清單，請參閱 [Redis OSS 4.0 版本備註。](https://raw.githubusercontent.com/redis/redis/4.0/00-RELEASENOTES)
+ 慢速日誌現在會記錄另外兩個引數，即用戶端名稱和位址。除非您明確依賴每個包含 3 個值的慢速日誌項目，否則此變更應回溯相容。
+ `CLUSTER NODES` 命令現在會傳回略為不同的格式，不回溯相容。建議客戶不要使用此命令了解叢集中的節點，而應使用 `CLUSTER SLOTS`。

## 過去的 EOL
<a name="VersionManagementConsiderations-redis3x-scheduled"></a>

### Redis OSS 3.2 行為和回溯不相容的變更
<a name="VersionManagementConsiderations-redis32"></a>

如需變更的完整清單，請參閱 [Redis OSS 3.2 版本備註。](https://raw.githubusercontent.com/redis/redis/3.2/00-RELEASENOTES)
+ 此版本沒有需注意的相容性變更。

如需詳細資訊，請參閱[適用於 Redis OSS 生命週期結束排程的 ElastiCache 版本](engine-versions.md#deprecated-engine-versions)。

### Redis OSS 2.8 行為和回溯不相容的變更
<a name="VersionManagementConsiderations-redis28"></a>

如需變更的完整清單，請參閱 [Redis OSS 2.8 版本備註。](https://raw.githubusercontent.com/redis/redis/2.8/00-RELEASENOTES)
+ 從 Redis OSS 2.8.22 開始，ElastiCache for Redis OSS 不再支援 Redis OSS AOF。資料需要持久保存時，建議使用 MemoryDB。
+ 從 Redis OSS 2.8.22 開始，ElastiCache for Redis OSS 不再支援將複本連接至 ElastiCache 中託管的主要節點。升級時，外部複本將中斷連線，且無法重新連線。我們建議您使用在 Redis OSS 6.0 中提供的用戶端快取，作為外部複本的替代方案。
+ 如果沒有金鑰，`TTL` 和 `PTTL` 命令現在會傳回 -2，而如果有金鑰，但沒有關聯的過期，則傳回 -1。Redis OSS 2.6 和舊版用於針對這兩個條件傳回 -1。
+ 如果不使用 `STORE` 選項，具 `ALPHA` 的 `SORT` 現在會根據地區定序設定排序。

如需詳細資訊，請參閱[適用於 Redis OSS 生命週期結束排程的 ElastiCache 版本](engine-versions.md#deprecated-engine-versions)。

# 使用節點型叢集時的升級考量
<a name="VersionManagement-upgrade-considerations"></a>

**注意**  
下列考量僅適用於升級節點型叢集時。不適用 ElastiCache Serverless。

**Valkey 和 Redis OSS 考量事項**

升級節點型 Valkey 或 Redis OSS 叢集時，請考慮下列事項。
+ 引擎版本管理功能是為了讓您能夠盡可能控制執行修補的方式，但在系統或快取軟體可能存在關鍵安全漏洞的情況下，ElastiCache 保留代您修補叢集的權利。
+ 從適用於 Valkey 的 ElastiCache 7.2 版和適用於 Redis OSS 的 ElastiCache 6.0 版開始，ElastiCache 將為每個次要版本提供單一版本，而不是提供多個修補程式版本。
+ 從 Redis OSS 引擎 5.0.6 版開始，您可以在最短的停機時間內升級叢集版本。叢集在整個升級過程中都可供讀取，而在過程的多數時間也可供寫入，除了在容錯移轉操作中會有幾秒可能無法寫入。
+ 您也可以升級 5.0.6 以前版本的 ElastiCache 叢集。所涉及的程序相同，但可能會在 DNS 傳播期間產生較長的容錯移轉時間 (30s-1m)。
+ 從 Redis OSS 7 開始，ElastiCache 支援在 Valkey 或 Redis OSS （停用叢集模式） 與 Valkey 或 Redis OSS （啟用叢集模式） 之間切換。
+ Amazon ElastiCache for Redis OSS 引擎升級程序旨在盡最大努力保留現有的資料，並需要成功的 Redis OSS 複寫。
+ 升級引擎時，ElastiCache 會終止現有的用戶端連線。為了在引擎升級期間將停機時間降至最低，我們建議您使用錯誤重試和指數退避為 [Redis OSS 用戶端實作最佳實務](BestPractices.Clients.redis.md)，以及將[維護期間的停機時間降至最低](BestPractices.MinimizeDowntime.md)的最佳實務。
+ 升級引擎時，您無法直接從 Valkey 或 Redis OSS （停用叢集模式） 升級到 Valkey 或 Redis OSS （啟用叢集模式）。下列程序說明如何從 Valkey 或 Redis OSS （停用叢集模式） 升級到 Valkey 或 Redis OSS （啟用叢集模式）。

**從 Valkey 或 Redis OSS （停用叢集模式） 升級到 Valkey 或 Redis OSS （啟用叢集模式） 引擎版本**

  1. 備份您的 Valkey 或 Redis OSS （停用叢集模式） 叢集或複寫群組。如需詳細資訊，請參閱[取得手動備份](backups-manual.md)。

  1. 使用備份建立並植入具有一個碎片 （節點群組） 的 Valkey 或 Redis OSS （啟用叢集模式） 叢集。指定新的引擎版本，並在建立叢集或複寫群組時啟用叢集模式。如需詳細資訊，請參閱[教學課程：使用外部建立的備份植入新的節點型叢集](backups-seeding-redis.md)。

  1. 刪除舊的 Valkey 或 Redis OSS （停用叢集模式） 叢集或複寫群組。如需詳細資訊，請參閱 [在 ElastiCache 中刪除叢集](Clusters.Delete.md) 或 [刪除複寫群組](Replication.DeletingRepGroup.md) 。

  1. 將新的 Valkey 或 Redis OSS （啟用叢集模式） 叢集或複寫群組擴展為您需要的碎片數量 （節點群組）。如需詳細資訊，請參閱[擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)
+ 升級主要引擎版本 (例如從 5.0.6 升級到 6.0) 時，還需要選擇一個與新引擎版本相容的新參數群組。
+ 對於停用異地同步備份的單一 Redis OSS 叢集和叢集，我們建議將足夠的記憶體提供給 Redis OSS，如中所述[確保您有足夠的記憶體來建立 Valkey 或 Redis OSS 快照](BestPractices.BGSAVE.md)。在這類案例中，主要叢集將無法在升級期間處理服務的請求。
+ 對於啟用異地同步備份的 Redis OSS 叢集，我們也建議您在低傳入寫入流量期間排程引擎升級。升級到 Redis OSS 5.0.6 或更新版本時，主要叢集在升級程序期間仍可繼續供服務請求使用。

  系統會依下列方式處理及修補含多個碎片的叢集和複寫群組：
  + 所有碎片都會平行處理。不論任何時間，一個碎片上都只能執行一項升級操作。
  + 在每個碎片中，都會先處理所有複本，再處理主要複本。如果某個碎片中的複本較少，則該碎片中的主要複本可能會在其他碎片的複本處理完成前就已處理。
  + 跨所有碎片時，則會循序處理主要節點。一次只會升級一個主要節點。
+ 如果您目前的叢集和複寫群組已啟用加密功能，就無法升級到不支援加密的引擎版本，例如從 3.2.6 升級到 3.2.10。

**Memcached 考量事項**

升級節點型 Memcached 叢集時，請考慮下列事項。
+ 引擎版本管理功能是為了讓您能夠盡可能控制執行修補的方式，但在系統或快取軟體可能存在關鍵安全漏洞的情況下，ElastiCache 保留代您修補叢集的權利。
+ 由於 Memcached 引擎不支援永久儲存，因此 Memcached 引擎版本升級一定是破壞性程序，並會清除叢集中的所有快取資料。

# ElastiCache 最佳實務和快取策略
<a name="BestPractices"></a>

下面提供 Amazon ElastiCache 的建議最佳實務。遵循這些內容可改善快取的效能和可靠性。

**Topics**
+ [整體最佳實務](WorkingWithRedis.md)
+ [使用僅供讀取複本的最佳實務](ReadReplicas.md)
+ [支援和限制的 Valkey、Memcached 和 Redis OSS 命令](SupportedCommands.md)
+ [Valkey 和 Redis OSS 組態和限制](RedisConfiguration.md)
+ [Valkey、Memcached 和 Redis OSS 的 IPv6 用戶端範例](network-type-best-practices.md)
+ [用戶端的最佳實務 (Valkey 和 Redis OSS)](BestPractices.Clients.redis.md)
+ [用戶端的最佳實務 (Memcached)](BestPractices.Clients.memcached.md)
+ [啟用 TLS 的雙堆疊 ElastiCache 叢集](#network-type-configuring-tls-enabled-dual-stack)
+ [管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)
+ [使用 Valkey 和 Redis OSS 節點型叢集時的最佳實務](BestPractices.SelfDesigned.md)
+ [Memcached 的快取策略](Strategies.md)

# 整體最佳實務
<a name="WorkingWithRedis"></a>

您可以在下方找到在 ElastiCache 中使用 Valkey、Memcached 和 Redis OSS 介面的最佳實務的相關資訊。
+ **使用啟用叢集模式的組態**：啟用叢集模式可讓快取水平擴展，藉此達到比停用叢集模式的組態更高的儲存和輸送量。ElastiCache 無伺服器僅適用於啟用叢集模式的組態。
+ **使用長時間執行的連線**：建立新連線費用昂貴，而且會佔用快取的時間和 CPU 資源。盡可能重複使用連線 (例如使用連線集區)，以將此費用分攤至多個命令。
+ **從複本讀取** – 如果您使用 ElastiCache 無伺服器或已佈建僅供讀取複本 （節點型叢集）， 會將讀取導向複本，以達到更佳的可擴展性和/或更低的延遲。從複本讀取的內容最終會與主節點保持一致。

  在節點型叢集中，避免將讀取請求導向單一僅供讀取複本，因為如果節點失敗，讀取可能無法暫時使用。請設定用戶端將讀取請求導向到至少兩個讀取複本，或將讀取導向單一複本和主節點。

  在 ElastiCache 無伺服器中，從複本連接埠 (6380) 讀取時，會盡可能將讀取導向用戶端的本機可用區域，以減少擷取延遲。發生故障時，它將自動回復至其他節點。
+ **避免費時命令** -避免執行任何需要大量運算或輸入/輸出的操作，例如 `KEYS` 和 `SMEMBERS` 命令。我們建議此方法，因為這些操作會增加叢集上的負載，並會影響叢集的效能。請改為使用 `SCAN` 和 `SSCAN` 命令。
+ **遵循 Lua 最佳實務** - 避免長時間執行的 Lua 指令碼，並且一律預先宣告用於 Lua 指令碼的索引鍵。我們建議此方法來判斷 Lua 指令碼並未使用跨位置命令。確認用於 Lua 指令碼中的鍵屬於相同位置。
+ **使用碎片 pub/sub** – 使用 Valkey 或 Redis OSS 支援高輸送量的 pub/sub 工作負載時，建議您使用[碎片 pub/sub](https://valkey.io/topics/pubsub/) （適用於 Valkey，以及 Redis OSS 7 或更新版本）。在啟用叢集模式的叢集中的傳統 pub/sub 會將訊息廣播到叢集中的所有節點，因此可能導致高 `EngineCPUUtilization`。請注意，在 ElastiCache 無伺服器中，傳統 pub/sub 命令會在內部使用碎片 pub/sub 命令。

**Topics**

# 使用僅供讀取複本的最佳實務
<a name="ReadReplicas"></a>

許多應用程式，例如工作階段存放區、排行榜和建議引擎，都需要高可用性，並處理比寫入操作更多的讀取操作。這些應用程式通常可以容忍略微過時的資料 （最終一致性），這表示如果不同的使用者暫時看到略有不同的相同資料版本，則可以接受。例如：
+ 快取的查詢結果通常可以容忍稍微過時的資料，尤其是在事實來源為外部的快取旁模式。
+ 在遊戲排行榜中，更新分數的幾秒鐘延遲通常不會顯著影響使用者體驗。
+ 對於工作階段存放區，在複本之間傳播工作階段資料時有些輕微的延遲很少影響應用程式功能。
+ 建議引擎通常會使用歷史資料分析，因此即時一致性較不重要。

最終一致性表示複寫程序完成後，所有複本節點最終都會傳回相同的資料，通常在幾毫秒內。對於這類使用案例，實作僅供讀取複本是一種有效的策略，可降低從 ElastiCache 執行個體讀取時的延遲。

在 Amazon ElastiCache 中使用僅供讀取複本可透過下列方式提供顯著的效能優勢：

**增強的讀取可擴展性**
+ 將讀取操作分散到多個複本節點
+ 從主節點卸載讀取流量
+ 提供地理位置更接近複本的請求，以減少讀取延遲

**最佳化的主要節點效能**
+ 專用主節點資源來寫入操作
+ 減少主節點上的連線額外負荷
+ 改善寫入效能，並在尖峰流量期間維持更好的回應時間

## 在 ElastiCache Serverless 中使用從複本讀取
<a name="ReadReplicas.serverless"></a>

ElastiCache 無伺服器提供兩個不同的端點，以滿足不同的一致性要求。兩個端點使用相同的 DNS 名稱，但使用不同的連接埠。若要使用read-from-replica連接埠，您必須[設定 VPC 的安全群組和網路存取控制清單，以授權從用戶端應用程式存取這兩個連接埠](set-up.md#elasticache-install-grant-access-VPN)。

**主要端點 （連接埠 6379)**
+ 用於需要立即一致性的操作
+ 保證讀取up-to-date資料
+ 最適合關鍵交易和寫入操作
+ 寫入操作的必要項目
+ 範例：`test-12345.serverless.use1.cache.amazonaws.com:6379`

**延遲最佳化端點 （連接埠 6380)**
+ 針對可容忍最終一致性的讀取操作進行最佳化
+ 如果可能，ElastiCache Serverless 會自動將讀取請求路由到用戶端本機可用區域中的複本節點。此最佳化可避免從不同可用區域中的節點擷取資料時產生的額外網路延遲，藉此降低延遲。
+ 如果本機節點無法使用，ElastiCache Serverless 會自動選取其他區域中的可用節點
+ 範例：`test-12345.serverless.use1.cache.amazonaws.com:6380`
+ 如果您提供複本組態的讀取，Glide 和 Lettuce 等用戶端會自動偵測並路由讀取至延遲最佳化端點。如果您的用戶端不支援路由組態 （例如 valkey-java 和較舊的 jedis 版本），您必須定義正確的連接埠和用戶端組態以從複本讀取。

## 在 ElastiCache Serverless - Valkey 和 Glide 中連線至僅供讀取複本
<a name="ReadReplicas.connecting-primary"></a>

下列程式碼片段顯示如何在 Valkey glide 程式庫中設定 ElastiCache Serverless 複本的讀取。您不需要指定從複本讀取的連接埠，但您需要設定路由組態 `ReadFrom.PREFER_REPLICA`。

```
package glide.examples;

import glide.api.GlideClusterClient;
import glide.api.logging.Logger;
import glide.api.models.configuration.GlideClusterClientConfiguration;
import glide.api.models.configuration.NodeAddress;
import glide.api.models.exceptions.ClosingException;
import glide.api.models.exceptions.ConnectionException;
import glide.api.models.exceptions.TimeoutException;
import glide.api.models.configuration.ReadFrom;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class ClusterExample {

    public static void main(String[] args) {
        // Set logger configuration
        Logger.setLoggerConfig(Logger.Level.INFO);

        GlideClusterClient client = null;

        try {
            System.out.println("Connecting to Valkey Glide...");

            // Configure the Glide Client
            GlideClusterClientConfiguration config = GlideClusterClientConfiguration.builder()
                .address(NodeAddress.builder()
                    .host("your-endpoint")
                    .port(6379)
                    .build())
                .useTLS(true)
                .readFrom(ReadFrom.PREFER_REPLICA)
                .build();

            // Create the GlideClusterClient
            client = GlideClusterClient.createClient(config).get();
            System.out.println("Connected successfully.");

            // Perform SET operation
            CompletableFuture<String> setResponse = client.set("key", "value");
            System.out.println("Set key 'key' to 'value': " + setResponse.get());

            // Perform GET operation
            CompletableFuture<String> getResponse = client.get("key");
            System.out.println("Get response for 'key': " + getResponse.get());

            // Perform PING operation
            CompletableFuture<String> pingResponse = client.ping();
            System.out.println("PING response: " + pingResponse.get());

        } catch (ClosingException | ConnectionException | TimeoutException | ExecutionException e) {
            System.err.println("An exception occurred: ");
            e.printStackTrace();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        } finally {
            // Close the client connection
            if (client != null) {
                try {
                    client.close();
                    System.out.println("Client connection closed.");
                } catch (ClosingException | ExecutionException e) {
                    System.err.println("Error closing client: " + e.getMessage());
                }
            }
        }
    }
}
```

# 支援和限制的 Valkey、Memcached 和 Redis OSS 命令
<a name="SupportedCommands"></a>

## 支援的 Valkey 和 Redis OSS 命令
<a name="SupportedCommandsRedis"></a>

**支援的 Valkey 和 Redis OSS 命令**

無伺服器快取支援下列 Valkey 和 Redis OSS 命令。除了這些命令之外，還支援這些 [支援的 Valkey 和 Redis OSS 命令JSON 命令](json-list-commands.md)。

如需 Bloom Filter 命令的詳細資訊，請參閱 [Bloom 篩選條件命令](BloomFilters.md#SupportedCommandsBloom)

**點陣圖命令**
+ `BITCOUNT`

  計算字串中設定的位元數 (母體計數)

  [進一步了解](https://valkey.io/commands/bitcount/)
+ `BITFIELD`

  對字串執行任意 bitfield integer 操作。

  [進一步了解](https://valkey.io/commands/bitfield/)
+ `BITFIELD_RO`

  對字串執行任意唯讀 bitfield integer 操作。

  [進一步了解](https://valkey.io/commands/bitfield_ro/)
+ `BITOP`

  對多個字串執行位元操作，並且儲存結果。

  [進一步了解](https://valkey.io/commands/bitop/)
+ `BITPOS`

  尋找第一個設定 (1) 或清除 (0) 位元。

  [進一步了解](https://valkey.io/commands/bitpos/)
+ `GETBIT`

  依偏移傳回位元值。

  [進一步了解](https://valkey.io/commands/getbit/)
+ `SETBIT`

  設定或清除字串值偏移處的位元。建立金鑰 (如不存在)。

  [進一步了解](https://valkey.io/commands/setbit/)

**叢集管理命令**
+ `CLUSTER COUNTKEYSINSLOT`

  傳回雜湊位置中的金鑰數目。

  [進一步了解](https://valkey.io/commands/cluster-countkeysinslot/)
+ `CLUSTER GETKEYSINSLOT`

  傳回雜湊位置中的金鑰名稱。

  [進一步了解](https://valkey.io/commands/cluster-getkeysinslot/)
+ `CLUSTER INFO`

  傳回節點狀態的相關資訊。在無伺服器快取中，傳回已對用戶端公開的單一虛擬「碎片」的狀態。

  [進一步了解](https://valkey.io/commands/cluster-info/)
+ `CLUSTER KEYSLOT`

  傳回金鑰的雜湊位置。

  [進一步了解](https://valkey.io/commands/cluster-keyslot/)
+ `CLUSTER MYID`

  傳回節點的 ID。在無伺服器快取中，傳回已對用戶端公開的單一虛擬「碎片」的狀態。

  [進一步了解](https://valkey.io/commands/cluster-myid/)
+ `CLUSTER NODES`

  傳回節點的叢集組態。在無伺服器快取中，傳回已對用戶端公開的單一虛擬「碎片」的狀態。

  [進一步了解](https://valkey.io/commands/cluster-nodes/)
+ `CLUSTER REPLICAS`

  列出主節點的複本節點。在無伺服器快取中，傳回已對用戶端公開的單一虛擬「碎片」的狀態。

  [進一步了解](https://valkey.io/commands/cluster-replicas/)
+ `CLUSTER SHARDS`

  傳回叢集位置對碎片的映射。在無伺服器快取中，傳回已對用戶端公開的單一虛擬「碎片」的狀態。

  [進一步了解](https://valkey.io/commands/cluster-shards/)
+ `CLUSTER SLOTS`

  傳回叢集位置對節點的映射。在無伺服器快取中，傳回已對用戶端公開的單一虛擬「碎片」的狀態。

  [進一步了解](https://valkey.io/commands/cluster-slots/)
+ `CLUSTER SLOT-STATS`

  允許追蹤每個槽的金鑰計數、CPU 使用率、傳入的網路位元組和傳出的網路位元組指標。

  [進一步了解](https://valkey.io/commands/cluster-slot-stats/)
+ `READONLY`

  啟用對 Valkey 或 Redis OSS 叢集複本節點連線的唯讀查詢。

  [進一步了解](https://valkey.io/commands/readonly/)
+ `READWRITE`

  啟用對 Valkey 或 Redis OSS 叢集複本節點連線的讀寫查詢。

  [進一步了解](https://valkey.io/commands/readwrite/)
+ `SCRIPT SHOW`

  傳回指令碼快取中指令碼的原始來源碼。

  [進一步了解](https://valkey.io/commands/script-show/)

**連線管理命令**
+ `AUTH`

  驗證連線。

  [進一步了解](https://valkey.io/commands/auth/)
+ `CLIENT GETNAME`

  傳回連線的名稱。

  [進一步了解](https://valkey.io/commands/client-getname/)
+ `CLIENT REPLY`

  指示伺服器是否回覆命令。

  [進一步了解](https://valkey.io/commands/client-reply/)
+ `CLIENT SETNAME`

  設定連線名稱。

  [進一步了解](https://valkey.io/commands/client-setname/)
+ `ECHO`

  傳回所指定的字串。

  [進一步了解](https://valkey.io/commands/echo/)
+ `HELLO`

  使用 Valkey 或 Redis OSS 伺服器交握。

  [進一步了解](https://valkey.io/commands/hello/)
+ `PING`

  傳回伺服器的活動回應。

  [進一步了解](https://valkey.io/commands/ping/)
+ `QUIT`

  關閉連線。

  [進一步了解](https://valkey.io/commands/quit/)
+ `RESET`

  重設連線。

  [進一步了解](https://valkey.io/commands/reset/)
+ `SELECT`

  變更選取的資料庫。

  [進一步了解](https://valkey.io/commands/select/)

**一般命令**
+ `COPY`

  將金鑰的值複製到新金鑰。

  [進一步了解](https://valkey.io/commands/copy/)
+ `DEL`

  刪除一或多個金鑰。

  [進一步了解](https://valkey.io/commands/del/)
+ `DUMP`

  傳回儲存於金鑰之值的序列化表示。

  [進一步了解](https://valkey.io/commands/dump/)
+ `EXISTS`

  判斷有一或多個值存在。

  [進一步了解](https://valkey.io/commands/exists/)
+ `EXPIRE`

  設定金鑰的到期時間 (以秒為單位)。

  [進一步了解](https://valkey.io/commands/expire/)
+ `EXPIREAT`

  將金鑰的到期時間設為 Unix 時間戳記。

  [進一步了解](https://valkey.io/commands/expireat/)
+ `EXPIRETIME`

  以 Unix 時間戳記傳回金鑰的到期時間。

  [進一步了解](https://valkey.io/commands/expiretime/)
+ `PERSIST`

  移除金鑰的到期時間。

  [進一步了解](https://valkey.io/commands/persist/)
+ `PEXPIRE`

  設定金鑰的到期時間 (以毫秒為單位)。

  [進一步了解](https://valkey.io/commands/pexpire/)
+ `PEXPIREAT`

  將金鑰的到期時間設為 Unix 毫秒時間戳記。

  [進一步了解](https://valkey.io/commands/pexpireat/)
+ `PEXPIRETIME`

  以 Unix 毫秒時間戳記傳回金鑰的到期時間。

  [進一步了解](https://valkey.io/commands/pexpiretime/)
+ `PTTL`

  傳回以毫秒為單位的金鑰到期時間。

  [進一步了解](https://valkey.io/commands/pttl/)
+ `RANDOMKEY`

  從資料庫傳回隨機金鑰名稱。

  [進一步了解](https://valkey.io/commands/randomkey/)
+ `RENAME`

  重新命名金鑰並覆寫目的地。

  [進一步了解](https://valkey.io/commands/rename/)
+ `RENAMENX`

  僅在目標金鑰名稱不存在時重新命名金鑰。

  [進一步了解](https://valkey.io/commands/renamenx/)
+ `RESTORE`

  從值的序列化表示建立金鑰。

  [進一步了解](https://valkey.io/commands/restore/)
+ `SCAN`

  逐一查看資料庫中的金鑰名稱。

  [進一步了解](https://valkey.io/commands/scan/)
+ `SORT`

  排序清單中、集合中或已排序集合中的元素，並選擇性地儲存結果。

  [進一步了解](https://valkey.io/commands/sort/)
+ `SORT_RO`

  傳回清單、集合或已排序清單的已排序元素。

  [進一步了解](https://valkey.io/commands/sort_ro/)
+ `TOUCH`

  傳回在更新上次存取時間後，所指定金鑰當中現有的金鑰數目。

  [進一步了解](https://valkey.io/commands/touch/)
+ `TTL`

  傳回以秒為單位的金鑰到期時間。

  [進一步了解](https://valkey.io/commands/ttl/)
+ `TYPE`

  判斷儲存於金鑰的值類型。

  [進一步了解](https://valkey.io/commands/type/)
+ `UNLINK`

  以非同步方式刪除一或多個金鑰。

  [進一步了解](https://valkey.io/commands/unlink/)

**地理空間命令**
+ `GEOADD`

  將一或多個成員新增到地理空間索引。建立金鑰 (如不存在)。

  [進一步了解](https://valkey.io/commands/geoadd/)
+ `GEODIST`

  傳回兩個地理空間索引成員之間的距離。

  [進一步了解](https://valkey.io/commands/geodist/)
+ `GEOHASH`

  從地理空間索引傳回成員作為 geohash 字串。

  [進一步了解](https://valkey.io/commands/geohash/)
+ `GEOPOS`

  從地理空間索引傳回成員的經度和緯度。

  [進一步了解](https://valkey.io/commands/geopos/)
+ `GEORADIUS`

  查詢距離某個座標一定距離內的成員的地理空間索引，並選擇性地儲存結果。

  [進一步了解](https://valkey.io/commands/georadius/)
+ `GEORADIUS_RO`

  傳回距離某個座標一定距離內的地理空間索引的成員。

  [進一步了解](https://valkey.io/commands/georadius_ro/)
+ `GEORADIUSBYMEMBER`

  查詢距離某個成員一定距離內的成員的地理空間索引，並選擇性地儲存結果。

  [進一步了解](https://valkey.io/commands/georadiusbymember/)
+ `GEORADIUSBYMEMBER_RO`

  傳回距離某個成員一定距離內的地理空間索引的成員。

  [進一步了解](https://valkey.io/commands/georadiusbymember_ro/)
+ `GEOSEARCH`

  查詢方形或圓形區域內成員的地理空間索引。

  [進一步了解](https://valkey.io/commands/geosearch/)
+ `GEOSEARCHSTORE`

  查詢方形或圓形區域內成員的地理空間索引，並選擇性地儲存結果。

  [進一步了解](https://valkey.io/commands/geosearchstore/)

**雜湊命令**
+ `HDEL`

  從雜湊中刪除一或多個欄位及其值。刪除沒有剩餘任何欄位的雜湊。

  [進一步了解](https://valkey.io/commands/hdel/)
+ `HEXISTS`

  判斷雜湊中是否有欄位存在。

  [進一步了解](https://valkey.io/commands/hexists/)
+ `HGET`

  傳回雜湊中某個欄位的值。

  [進一步了解](https://valkey.io/commands/hget/)
+ `HGETALL`

  傳回雜湊中的所有欄位和值。

  [進一步了解](https://valkey.io/commands/hgetall/)
+ `HINCRBY`

  按某個數字遞增雜湊中欄位的整數值。如果欄位不存在，則使用 0 作為初始值。

  [進一步了解](https://valkey.io/commands/hincrby/)
+ `HINCRBYFLOAT`

  按某個數字遞增欄位的浮點值。如果欄位不存在，則使用 0 作為初始值。

  [進一步了解](https://valkey.io/commands/hincrbyfloat/)
+ `HKEYS`

  傳回雜湊中的所有欄位。

  [進一步了解](https://valkey.io/commands/hkeys/)
+ `HLEN`

  傳回雜湊中的欄位數。

  [進一步了解](https://valkey.io/commands/hlen/)
+ `HMGET`

  傳回雜湊中所有欄位的值。

  [進一步了解](https://valkey.io/commands/hmget/)
+ `HMSET`

  設定多個欄位的值。

  [進一步了解](https://valkey.io/commands/hmset/)
+ `HRANDFIELD`

  傳回雜湊中的一或多個隨機欄位。

  [進一步了解](https://valkey.io/commands/hrandfield/)
+ `HSCAN`

  逐一查看雜湊的欄位和值。

  [進一步了解](https://valkey.io/commands/hscan/)
+ `HSET`

  建立或修改雜湊中欄位的值。

  [進一步了解](https://valkey.io/commands/hset/)
+ `HSETNX`

  僅在欄位不存在時設定雜湊中欄位的值。

  [進一步了解](https://valkey.io/commands/hsetnx/)
+ `HSTRLEN`

  傳回欄位值的長度。

  [進一步了解](https://valkey.io/commands/hstrlen/)
+ `HVALS`

  傳回雜湊中的所有值。

  [進一步了解](https://valkey.io/commands/hvals/)

**HyperLogLog 命令**
+ `PFADD`

  將元素新增至 HyperLogLog 索引鍵。建立鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/pfadd/)
+ `PFCOUNT`

  傳回 HyperLogLog 索引鍵所觀察到集合的近似基數。

  [進一步了解](https://valkey.io/commands/pfcount/)
+ `PFMERGE`

  將一或多個 HyperLogLog 值合併成單一索引鍵。

  [進一步了解](https://valkey.io/commands/pfmerge/)

**清單命令**
+ `BLMOVE`

  從清單彈現元素、將其推送到另一個清單並傳回。封鎖直到元素可用為止。最後一個元素移動後刪除清單。

  [進一步了解](https://valkey.io/commands/blmove/)
+ `BLMPOP`

  彈現多個清單之一的第一個元素。封鎖直到元素可用為止。最後一個元素彈現後刪除清單。

  [進一步了解](https://valkey.io/commands/blmpop/)
+ `BLPOP`

  移除並傳回清單中的第一個元素。封鎖直到元素可用為止。最後一個元素彈現後刪除清單。

  [進一步了解](https://valkey.io/commands/blpop/)
+ `BRPOP`

  移除並傳回清單中的最後一個元素。封鎖直到元素可用為止。最後一個元素彈現後刪除清單。

  [進一步了解](https://valkey.io/commands/brpop/)
+ `BRPOPLPUSH`

  從清單彈現元素、將其推送到另一個清單並傳回。封鎖直到元素可用為止。最後一個元素彈現後刪除清單。

  [進一步了解](https://valkey.io/commands/brpoplpush/)
+ `LINDEX`

  按索引傳回清單中的元素。

  [進一步了解](https://valkey.io/commands/lindex/)
+ `LINSERT`

  將某一個元素插入清單中另一個元素之前或之後。

  [進一步了解](https://valkey.io/commands/linsert/)
+ `LLEN`

  傳回清單的長度。

  [進一步了解](https://valkey.io/commands/llen/)
+ `LMOVE`

  從某一個清單彈現元素並推送至另一個清單後，傳回該元素。最後一個元素移動後刪除清單。

  [進一步了解](https://valkey.io/commands/lmove/)
+ `LMPOP`

  從清單中移除多個元素後，傳回這些元素。最後一個元素彈現後刪除清單。

  [進一步了解](https://valkey.io/commands/lmpop/)
+ `LPOP`

  從清單中移除第一個元素後將該元素傳回。最後一個元素彈現後刪除清單。

  [進一步了解](https://valkey.io/commands/lpop/)
+ `LPOS`

  傳回清單中相符元素的索引。

  [進一步了解](https://valkey.io/commands/lpos/)
+ `LPUSH`

  在清單前面加上一或多個元素。建立鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/lpush/)
+ `LPUSHX`

  僅於清單存在時，在清單前面加上一或多個元素。

  [進一步了解](https://valkey.io/commands/lpushx/)
+ `LRANGE`

  從清單中傳回某一範圍的元素。

  [進一步了解](https://valkey.io/commands/lrange/)
+ `LREM`

  從清單中移除元素。最後一個元素移除後刪除清單。

  [進一步了解](https://valkey.io/commands/lrem/)
+ `LSET`

  按索引設定清單中元素的值。

  [進一步了解](https://valkey.io/commands/lset/)
+ `LTRIM`

  移除清單兩端的元素。若元素都已修剪，則刪除清單。

  [進一步了解](https://valkey.io/commands/ltrim/)
+ `RPOP`

  傳回並移除清單中的最後幾個元素。最後一個元素彈現後刪除清單。

  [進一步了解](https://valkey.io/commands/rpop/)
+ `RPOPLPUSH`

  移除清單中的最後一個元素並推送至另一個清單後，傳回該元素。最後一個元素彈現後刪除清單。

  [進一步了解](https://valkey.io/commands/rpoplpush/)
+ `RPUSH`

  附加一或多個元素至清單。建立鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/rpush/)
+ `RPUSHX`

  僅於清單存在時附加元素至清單。

  [進一步了解](https://valkey.io/commands/rpushx/)

**Pub/Sub 命令**

**注意**  
PUBSUB 命令會在內部使用碎片的 PUBSUB，因此通道名稱將會混合。
+ `PUBLISH`

  將訊息發佈至通道。

  [進一步了解](https://valkey.io/commands/publish/)
+ `PUBSUB CHANNELS`

  傳回作用中通道。

  [進一步了解](https://valkey.io/commands/pubsub-channels/)
+ `PUBSUB NUMSUB`

  將訂閱用戶數傳回至通道。

  [進一步了解](https://valkey.io/commands/pubsub-numsub/)
+ `PUBSUB SHARDCHANNELS`

  傳回作用中碎片通道。

  [進一步了解](https://valkey.io/commands/pubsub-shardchannels/)
+ `PUBSUB SHARDNUMSUB`

  傳回碎片通道的訂閱用戶數。

  [進一步了解](https://valkey.io/commands/pubsub-shardnumsub/)
+ `SPUBLISH`

  將訊息發佈至碎片通道

  [進一步了解](https://valkey.io/commands/spublish/)
+ `SSUBSCRIBE`

  偵聽發佈至碎片通道的訊息。

  [進一步了解](https://valkey.io/commands/ssubscribe/)
+ `SUBSCRIBE`

  偵聽發佈至通道的訊息。

  [進一步了解](https://valkey.io/commands/subscribe/)
+ `SUNSUBSCRIBE`

  停止偵聽發佈至碎片通道的訊息。

  [進一步了解](https://valkey.io/commands/sunsubscribe/)
+ `UNSUBSCRIBE`

  停止偵聽發佈至通道的訊息。

  [進一步了解](https://valkey.io/commands/unsubscribe/)

**指令碼命令**
+ `EVAL`

  執行伺服器端 Lua 指令碼。

  [進一步了解](https://valkey.io/commands/eval/)
+ `EVAL_RO`

  執行唯讀伺服器端 Lua 指令碼。

  [進一步了解](https://valkey.io/commands/eval_ro/)
+ `EVALSHA`

  透過 SHA1 摘要執行伺服器端 Lua 指令碼。

  [進一步了解](https://valkey.io/commands/evalsha/)
+ `EVALSHA_RO`

  透過 SHA1 摘要執行唯讀伺服器端 Lua 指令碼。

  [進一步了解](https://valkey.io/commands/evalsha_ro/)
+ `SCRIPT EXISTS`

  判斷指令碼快取中是否存在伺服器端 Lua 指令碼。

  [進一步了解](https://valkey.io/commands/script-exists/)
+ `SCRIPT FLUSH`

  目前無操作的指令碼快取是由服務進行管理。

  [進一步了解](https://valkey.io/commands/script-flush/)
+ `SCRIPT LOAD`

  將伺服器端 Lua 指令碼載入指令碼快取中。

  [進一步了解](https://valkey.io/commands/script-load/)

**伺服器管理命令**

**注意**  
針對 Valkey 和 Redis OSS 使用節點型 ElastiCache 叢集時，用戶端必須將排清命令傳送至每個主要叢集，以排清所有金鑰。ElastiCache Serverless for Valkey 和 Redis OSS 的運作方式不同，因為它會抽象化基礎叢集拓撲。結果是，在 ElastiCache Serverless 中， `FLUSHDB` 和 `FLUSHALL`命令一律會排清叢集中的所有金鑰。因此，無法將排清命令包含在 Serverless 交易中。
+ `ACL CAT`

  列出 ACL 類別，或類別內的命令。

  [進一步了解](https://valkey.io/commands/acl-cat/)
+ `ACL GENPASS`

  產生可用來識別 ACL 使用者的偽隨機安全密碼。

  [進一步了解](https://valkey.io/commands/acl-genpass/)
+ `ACL GETUSER`

  列出使用者的 ACL 規則。

  [進一步了解](https://valkey.io/commands/acl-getuser/)
+ `ACL LIST`

  傾印 ACL 檔案格式的有效規則。

  [進一步了解](https://valkey.io/commands/acl-list/)
+ `ACL USERS`

  列出所有 ACL 使用者。

  [進一步了解](https://valkey.io/commands/acl-users/)
+ `ACL WHOAMI`

  傳回目前連線的已驗證使用者名稱。

  [進一步了解](https://valkey.io/commands/acl-whoami/)
+ `DBSIZE`

  傳回目前選取的資料庫中的索引鍵數目。此操作不保證在所有位置都是原子。

  [進一步了解](https://valkey.io/commands/dbsize/)
+ `COMMAND`

  傳回所有命令的詳細資訊。

  [進一步了解](https://valkey.io/commands/command/)
+ `COMMAND COUNT`

  傳回命令計數。

  [進一步了解](https://valkey.io/commands/command-count/)
+ `COMMAND DOCS`

  傳回有關一個、多個或所有命令的文件資訊。

  [進一步了解](https://valkey.io/commands/command-docs/)
+ `COMMAND GETKEYS`

  從任意命令中擷取索引鍵名稱。

  [進一步了解](https://valkey.io/commands/command-getkeys/)
+ `COMMAND GETKEYSANDFLAGS`

  擷取任意命令的索引鍵名稱和存取旗標。

  [進一步了解](https://valkey.io/commands/command-getkeysandflags/)
+ `COMMAND INFO`

  傳回有關一個、多個或所有命令的資訊。

  [進一步了解](https://valkey.io/commands/command-info/)
+ `COMMAND LIST`

  傳回命令名稱清單。

  [進一步了解](https://valkey.io/commands/command-list/)
+ `COMMANDLOG`

  命令日誌命令的容器。

  [進一步了解](https://valkey.io/commands/commandlog/)
+ `COMMANDLOG GET`

  傳回指定的命令日誌項目。

  [進一步了解](https://valkey.io/commands/commandlog-get/)
+ `COMMANDLOG HELP`

  顯示有關不同子命令的實用文字。

  [進一步了解](https://valkey.io/commands/commandlog-help/)
+ `COMMANDLOG LEN`

  傳回指定類型命令日誌中的項目數量。

  [進一步了解](https://valkey.io/commands/commandlog-len/)
+ `COMMANDLOG RESET`

  清除指定類型命令日誌中的所有項目。

  [進一步了解](https://valkey.io/commands/commandlog-reset/)
+ `FLUSHALL`

  移除所有資料庫中的所有索引鍵。此操作不保證在所有位置都是原子。

  [進一步了解](https://valkey.io/commands/flushall/)
+ `FLUSHDB`

  移除目前資料庫中的所有索引鍵。此操作不保證在所有位置都是原子。

  [進一步了解](https://valkey.io/commands/flushdb/)
+ `INFO`

  傳回有關伺服器的資訊和統計資料。

  [進一步了解](https://valkey.io/commands/info/)
+ `LOLWUT`

  顯示電腦藝術和 Valkey 或 Redis OSS 版本。

  [進一步了解](https://valkey.io/commands/lolwut/)
+ `ROLE`

  傳回複寫角色。

  [進一步了解](https://valkey.io/commands/role/)
+ `TIME`

  傳回伺服器時間。

  [進一步了解](https://valkey.io/commands/time/)

**設定命令**
+ `SADD`

  將一或多個成員新增至集合。建立鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/sadd/)
+ `SCARD`

  傳回集合中的成員數。

  [進一步了解](https://valkey.io/commands/scard/)
+ `SDIFF`

  傳回多個集合的差異。

  [進一步了解](https://valkey.io/commands/sdiff/)
+ `SDIFFSTORE`

  將多個集合的差異儲存在索引鍵中。

  [進一步了解](https://valkey.io/commands/sdiffstore/)
+ `SINTER`

  傳回多個集合的交集。

  [進一步了解](https://valkey.io/commands/sinter/)
+ `SINTERCARD`

  傳回多個集合之交集的成員數。

  [進一步了解](https://valkey.io/commands/sintercard/)
+ `SINTERSTORE`

  將多個集合的交集儲存在索引鍵中。

  [進一步了解](https://valkey.io/commands/sinterstore/)
+ `SISMEMBER`

  判斷成員是否屬於集合。

  [進一步了解](https://valkey.io/commands/sismember/)
+ `SMEMBERS`

  傳回集合的所有成員。

  [進一步了解](https://valkey.io/commands/smembers/)
+ `SMISMEMBER`

  判斷多個成員是否屬於某個集合。

  [進一步了解](https://valkey.io/commands/smismember/)
+ `SMOVE`

  將成員從某一個集合移動到另一個集合。

  [進一步了解](https://valkey.io/commands/smove/)
+ `SPOP`

  從集合中移除一或多個隨機成員後傳回這些成員。最後一個成員彈現後刪除集合。

  [進一步了解](https://valkey.io/commands/spop/)
+ `SRANDMEMBER`

  從集合中取得一或多個隨機成員

  [進一步了解](https://valkey.io/commands/srandmember/)
+ `SREM`

  從集合中移除一或多個成員。最後一個成員移除後刪除集合。

  [進一步了解](https://valkey.io/commands/srem/)
+ `SSCAN`

  逐一查看集合的成員。

  [進一步了解](https://valkey.io/commands/sscan/)
+ `SUNION`

  傳回多個集合的聯集。

  [進一步了解](https://valkey.io/commands/sunion/)
+ `SUNIONSTORE`

  將多個集合的聯集儲存在索引鍵中。

  [進一步了解](https://valkey.io/commands/sunionstore/)

**已排序集合命令**
+ `BZMPOP`

  按分數從一或多個已排序集合移除並傳回成員。封鎖直到成員可用為止。最後一個成員彈現後刪除已排序集合。

  [進一步了解](https://valkey.io/commands/bzmpop/)
+ `BZPOPMAX`

  從一或多個已排序集合移除並傳回分數最高的成員。封鎖直到成員可用為止。最後一個成員彈現後刪除已排序集合。

  [進一步了解](https://valkey.io/commands/bzpopmax/)
+ `BZPOPMIN`

  從一或多個已排序集合移除並傳回分數最低的成員。封鎖直到成員可用為止。最後一個成員彈現後刪除已排序集合。

  [進一步了解](https://valkey.io/commands/bzpopmin/)
+ `ZADD`

  將一或多個成員新增至已排序集合，或更新其分數。建立索引鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/zadd/)
+ `ZCARD`

  傳回已排序集合中的成員數。

  [進一步了解](https://valkey.io/commands/zcard/)
+ `ZCOUNT`

  傳回已排序集合中分數落在某個範圍內的成員數。

  [進一步了解](https://valkey.io/commands/zcount/)
+ `ZDIFF`

  傳回多個已排序集合的差異。

  [進一步了解](https://valkey.io/commands/zdiff/)
+ `ZDIFFSTORE`

  將多個已排序集合的差異儲存在索引鍵中。

  [進一步了解](https://valkey.io/commands/zdiffstore/)
+ `ZINCRBY`

  遞增排列已排序集合中成員的分數。

  [進一步了解](https://valkey.io/commands/zincrby/)
+ `ZINTER`

  傳回多個已排序集合的交集。

  [進一步了解](https://valkey.io/commands/zinter/)
+ `ZINTERCARD`

  傳回多個已排序集合之交集的成員數。

  [進一步了解](https://valkey.io/commands/zintercard/)
+ `ZINTERSTORE`

  將多個已排序集合的交集儲存在索引鍵中。

  [進一步了解](https://valkey.io/commands/zinterstore/)
+ `ZLEXCOUNT`

  傳回已排序集合中某一字典順序範圍內的成員數。

  [進一步了解](https://valkey.io/commands/zlexcount/)
+ `ZMPOP`

  從一或多個已排序集合移除最高得分或最低得分成員後，傳回該成員。最後一個成員彈現後刪除已排序集合。

  [進一步了解](https://valkey.io/commands/zmpop/)
+ `ZMSCORE`

  傳回已排序集合中一或多個成員的分數。

  [進一步了解](https://valkey.io/commands/zmscore/)
+ `ZPOPMAX`

  從已排序集合移除最高得分成員後，傳回這些成員。最後一個成員彈現後刪除已排序集合。

  [進一步了解](https://valkey.io/commands/zpopmax/)
+ `ZPOPMIN`

  從已排序集合移除最低得分成員後，傳回這些成員。最後一個成員彈現後刪除已排序集合。

  [進一步了解](https://valkey.io/commands/zpopmin/)
+ `ZRANDMEMBER`

  從已排序集合中傳回一或多個隨機成員。

  [進一步了解](https://valkey.io/commands/zrandmember/)
+ `ZRANGE`

  傳回已排序集合中某個索引範圍內的成員。

  [進一步了解](https://valkey.io/commands/zrange/)
+ `ZRANGEBYLEX`

  傳回已排序集合中某一字典順序範圍內的成員。

  [進一步了解](https://valkey.io/commands/zrangebylex/)
+ `ZRANGEBYSCORE`

  傳回已排序集合中某個分數範圍內的成員。

  [進一步了解](https://valkey.io/commands/zrangebyscore/)
+ `ZRANGESTORE`

  將已排序集合中某個範圍的成員儲存到索引鍵中。

  [進一步了解](https://valkey.io/commands/zrangestore/)
+ `ZRANK`

  傳回依分數遞增順序排列的已排序集合中成員的索引。

  [進一步了解](https://valkey.io/commands/zrank/)
+ `ZREM`

  從已排序集合中移除一或多個成員。若所有成員都已移除，則刪除已排序集合。

  [進一步了解](https://valkey.io/commands/zrem/)
+ `ZREMRANGEBYLEX`

  移除已排序集合中某一字典順序範圍內的成員。若所有成員都已移除，則刪除已排序集合。

  [進一步了解](https://valkey.io/commands/zremrangebylex/)
+ `ZREMRANGEBYRANK`

  移除已排序集合中某個索引範圍內的成員。若所有成員都已移除，則刪除已排序集合。

  [進一步了解](https://valkey.io/commands/zremrangebyrank/)
+ `ZREMRANGEBYSCORE`

  移除已排序集合中某個分數範圍內的成員。若所有成員都已移除，則刪除已排序集合。

  [進一步了解](https://valkey.io/commands/zremrangebyscore/)
+ `ZREVRANGE`

  依反向順序傳回已排序集合中某個索引範圍內的成員。

  [進一步了解](https://valkey.io/commands/zrevrange/)
+ `ZREVRANGEBYLEX`

  依反向順序傳回已排序集合中某一字典順序範圍內的成員。

  [進一步了解](https://valkey.io/commands/zrevrangebylex/)
+ `ZREVRANGEBYSCORE`

  依反向順序傳回已排序集合中某個分數範圍內的成員。

  [進一步了解](https://valkey.io/commands/zrevrangebyscore/)
+ `ZREVRANK`

  傳回依分數遞減順序排列的已排序集合中成員的索引。

  [進一步了解](https://valkey.io/commands/zrevrank/)
+ `ZSCAN`

  逐一查看已排序集合的成員和分數。

  [進一步了解](https://valkey.io/commands/zscan/)
+ `ZSCORE`

  傳回已排序集合中成員的分數。

  [進一步了解](https://valkey.io/commands/zscore/)
+ `ZUNION`

  傳回多個已排序集合的聯集。

  [進一步了解](https://valkey.io/commands/zunion/)
+ `ZUNIONSTORE`

  將多個已排序集合的聯集儲存在索引鍵中。

  [進一步了解](https://valkey.io/commands/zunionstore/)

**串流命令**
+ `XACK`

  傳回已由串流的取用者群組成員成功確認的訊息數。

  [進一步了解](https://valkey.io/commands/xack/)
+ `XADD`

  將新訊息附加至串流。建立索引鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/xadd/)
+ `XAUTOCLAIM`

  變更或取得取用者群組中訊息的擁有權，就像訊息傳遞至取用者群組成員一樣。

  [進一步了解](https://valkey.io/commands/xautoclaim/)
+ `XCLAIM`

  變更或取得取用者群組中訊息的擁有權，就像訊息傳遞至取用者群組成員一樣。

  [進一步了解](https://valkey.io/commands/xclaim/)
+ `XDEL`

  從串流中移除訊息後傳回訊息數。

  [進一步了解](https://valkey.io/commands/xdel/)
+ `XGROUP CREATE`

  建立取用者群組。

  [進一步了解](https://valkey.io/commands/xgroup-create/)
+ `XGROUP CREATECONSUMER`

  建立取用者群組中的取用者。

  [進一步了解](https://valkey.io/commands/xgroup-createconsumer/)
+ `XGROUP DELCONSUMER`

  從取用者群組刪除取用者。

  [進一步了解](https://valkey.io/commands/xgroup-delconsumer/)
+ `XGROUP DESTROY`

  銷毀取用者群組。

  [進一步了解](https://valkey.io/commands/xgroup-destroy/)
+ `XGROUP SETID`

  設定取用者群組的上次傳遞 ID。

  [進一步了解](https://valkey.io/commands/xgroup-setid/)
+ `XINFO CONSUMERS`

  傳回取用者群組中取用者的清單。

  [進一步了解](https://valkey.io/commands/xinfo-consumers/)
+ `XINFO GROUPS`

  傳回串流的取用者群組清單。

  [進一步了解](https://valkey.io/commands/xinfo-groups/)
+ `XINFO STREAM`

  傳回串流的相關資訊。

  [進一步了解](https://valkey.io/commands/xinfo-stream/)
+ `XLEN`

  傳回串流中的訊息數。

  [進一步了解](https://valkey.io/commands/xlen/)
+ `XPENDING`

  從串流取用者群組的待處理項目清單中傳回資訊和項目。

  [進一步了解](https://valkey.io/commands/xpending/)
+ `XRANGE`

  傳回串流中某個 ID 範圍內的訊息。

  [進一步了解](https://valkey.io/commands/xrange/)
+ `XREAD`

  從多個串流傳回 ID 大於所請求值的訊息。封鎖直到訊息可用為止。

  [進一步了解](https://valkey.io/commands/xread/)
+ `XREADGROUP`

  從串流傳回群組中取用者的新訊息和歷史訊息。封鎖直到訊息可用為止。

  [進一步了解](https://valkey.io/commands/xreadgroup/)
+ `XREVRANGE`

  依反向順序傳回串流中某個 ID 範圍內的訊息。

  [進一步了解](https://valkey.io/commands/xrevrange/)
+ `XTRIM`

  從串流開頭刪除訊息。

  [進一步了解](https://valkey.io/commands/xtrim/)

**字串命令**
+ `APPEND`

  將字串附加至索引鍵的值。建立索引鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/append/)
+ `DECR`

  以 1 為單位遞減索引鍵的整數值。如果索引鍵不存在，則使用 0 作為初始值。

  [進一步了解](https://valkey.io/commands/decr/)
+ `DECRBY`

  從索引鍵的整數值遞減某個數字。如果索引鍵不存在，則使用 0 作為初始值。

  [進一步了解](https://valkey.io/commands/decrby/)
+ `GET`

  傳回索引鍵的字串值。

  [進一步了解](https://valkey.io/commands/get/)
+ `GETDEL`

  刪除索引鍵後，傳回索引鍵的字串值。

  [進一步了解](https://valkey.io/commands/getdel/)
+ `GETEX`

  設定到期時間後，傳回索引鍵的字串值。

  [進一步了解](https://valkey.io/commands/getex/)
+ `GETRANGE`

  傳回儲存於索引鍵之字串的子字串。

  [進一步了解](https://valkey.io/commands/getrange/)
+ `GETSET`

  設定新值後，傳回索引鍵的前一個字串值。

  [進一步了解](https://valkey.io/commands/getset/)
+ `INCR`

  以 1 為單位遞增索引鍵的整數值。如果索引鍵不存在，則使用 0 作為初始值。

  [進一步了解](https://valkey.io/commands/incr/)
+ `INCRBY`

  以某個數字為單位遞增索引鍵的整數值。如果索引鍵不存在，則使用 0 作為初始值。

  [進一步了解](https://valkey.io/commands/incrby/)
+ `INCRBYFLOAT`

  以某個數字為單位遞增索引鍵的浮點值。如果索引鍵不存在，則使用 0 作為初始值。

  [進一步了解](https://valkey.io/commands/incrbyfloat/)
+ `LCS`

  尋找最長的常用子字串。

  [進一步了解](https://valkey.io/commands/lcs/)
+ `MGET`

  以原子方式傳回一或多個索引鍵的字串值。

  [進一步了解](https://valkey.io/commands/mget/)
+ `MSET`

  以原子方式建立或修改一或多個索引鍵的字串值。

  [進一步了解](https://valkey.io/commands/mset/)
+ `MSETNX`

  僅在所有索引鍵都不存在時，以原子方式修改一或多個索引鍵的字串值。

  [進一步了解](https://valkey.io/commands/msetnx/)
+ `PSETEX`

  設定索引鍵的字串值和毫秒為單位的期時間。建立索引鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/psetex/)
+ `SET`

  設定索引鍵的字串值，並忽略其類型。建立索引鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/set/)
+ `SETEX`

  設定索引鍵的字串值和到期時間。建立索引鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/setex/)
+ `SETNX`

  僅於索引鍵不存在時，才設定索引鍵的字串值。

  [進一步了解](https://valkey.io/commands/setnx/)
+ `SETRANGE`

  依某個偏移量將字串值的一部分覆寫為另一個字串值。建立索引鍵 (如不存在)。

  [進一步了解](https://valkey.io/commands/setrange/)
+ `STRLEN`

  傳回字串值的長度。

  [進一步了解](https://valkey.io/commands/strlen/)
+ `SUBSTR`

  從字串值傳回子字串。

  [進一步了解](https://valkey.io/commands/substr/)

**交易命令**
+ `DISCARD`

  捨棄交易。

  [進一步了解](https://valkey.io/commands/discard/)
+ `EXEC`

  執行交易中的所有命令。

  [進一步了解](https://valkey.io/commands/exec/)
+ `MULTI`

  開始交易。

  [進一步了解](https://valkey.io/commands/multi/)

## 受限的 Valkey 和 Redis OSS 命令
<a name="RestrictedCommandsRedis"></a>

為了提供受管服務體驗，ElastiCache 會限制存取某些需要進階權限的快取引擎特定命令。對於執行 Redis OSS 的快取，無法使用下列命令：
+ `acl setuser`
+ `acl load`
+ `acl save`
+ `acl deluser`
+ `bgrewriteaof`
+ `bgsave`
+ `cluster addslot`
+ `cluster addslotsrange`
+ `cluster bumpepoch`
+ `cluster delslot`
+ `cluster delslotsrange `
+ `cluster failover `
+ `cluster flushslots `
+ `cluster forget `
+ `cluster links`
+ `cluster meet`
+ `cluster setslot`
+ `config`
+ `debug`
+ `migrate`
+ `psync`
+ `replicaof`
+ `save`
+ `slaveof`
+ `shutdown`
+ `sync`

此外，無伺服器快取無法使用下列命令：
+ `acl log`
+ `client caching`
+ `client getredir`
+ `client id`
+ `client info`
+ `client kill`
+ `client list`
+ `client no-evict`
+ `client pause`
+ `client tracking`
+ `client trackinginfo`
+ `client unblock`
+ `client unpause`
+ `cluster count-failure-reports`
+ `commandlog`
+ `commandlog get`
+ `commandlog help`
+ `commandlog len`
+ `commandlog reset`
+ `fcall`
+ `fcall_ro`
+ `function`
+ `function delete`
+ `function dump`
+ `function flush`
+ `function help`
+ `function kill`
+ `function list`
+ `function load`
+ `function restore`
+ `function stats`
+ `keys`
+ `lastsave`
+ `latency`
+ `latency doctor`
+ `latency graph`
+ `latency help`
+ `latency histogram`
+ `latency history`
+ `latency latest`
+ `latency reset`
+ `memory`
+ `memory doctor`
+ `memory help`
+ `memory malloc-stats`
+ `memory purge`
+ `memory stats`
+ `memory usage`
+ `monitor`
+ `move`
+ `object`
+ `object encoding`
+ `object freq`
+ `object help`
+ `object idletime`
+ `object refcount`
+ `pfdebug`
+ `pfselftest`
+ `psubscribe`
+ `pubsub numpat`
+ `punsubscribe`
+ `script kill`
+ `slowlog`
+ `slowlog get`
+ `slowlog help`
+ `slowlog len`
+ `slowlog reset`
+ `swapdb`
+ `wait`

## 支援的 Memcached 命令
<a name="SupportedCommandsMem"></a>

ElastiCache Serverless for Memcached 支援開放原始碼 memcached 1.6 中的所有 memcached [命令](https://github.com/memcached/memcached/wiki/Commands)，但例外如下：
+ 用戶端連線需要 TLS，因此不支援 UDP 通訊協定。
+ 不支援二進位通訊協定，因為已在 memcached 1.6 中正式[棄用](https://github.com/memcached/memcached/wiki/ReleaseNotes160)。
+ `GET/GETS` 命令限制為 16KB，以避免可能遭到對伺服器進行大量金鑰擷取的 DoS 攻擊。
+ 延遲的 `flush_all` 命令將遭到拒絕，並顯示 `CLIENT_ERROR`。
+ 不支援設定引擎或揭露有關引擎狀態或日誌之內部資訊的命令，例如：
  + 對於 `STATS` 命令，僅支援 `stats` 和 `stats reset`。其他變化都將傳回 `ERROR`
  + `lru / lru_crawler` - 修改 LRU 和 LRU 爬蟲程式設定
  + `watch` - 監看 memcached 伺服器日誌
  + `verbosity` - 設定伺服器日誌層級
  + `me` - 不支援中繼偵錯 (me) 命令

# Valkey 和 Redis OSS 組態和限制
<a name="RedisConfiguration"></a>

Valkey 和 Redis OSS 引擎各提供許多組態參數，有些可在 ElastiCache for Redis OSS 中修改，有些則無法修改以提供穩定的效能和可靠性。

## 無伺服器快取
<a name="RedisConfiguration.Serverless"></a>

對於無伺服器快取，不會使用參數群組，而且無法修改所有 Valkey 或 Redis OSS 組態。已備妥下列 Valkey 或 Redis OSS 參數：


****  

|  Name  |  詳細資訊  |  Description  | 
| --- | --- | --- | 
| acl-pubsub-default | `allchannels` | 快取上 ACL 使用者的預設 pubsub 通道許可。 | 
| client-output-buffer-limit | `normal 0 0 0` `pubsub 32mb 8mb 60` | 一般用戶端沒有緩衝區限制。如果 PUB/SUB 用戶端違反 32MiB 待處理項目，或違反 8MiB 待處理項目達 60 秒，則將中斷連線。 | 
| client-query-buffer-limit | 1 GiB | 單一用戶端查詢緩衝區的大小上限。此外，用戶端不能發出超過 3，999 個引數的請求。 | 
| cluster-allow-pubsubshard-when-down | yes | 如此即使快取在部分無法運作的狀況下，仍能處理 pubsub 流量。 | 
| cluster-allow-reads-when-down | yes | 如此即使快取在部分無法運作的狀況下，仍能處理讀取流量。 | 
| cluster-enabled | yes | 所有無伺服器快取都已啟用叢集模式，如此就能以公開透明的方式在多個後端碎片之間分割其資料。所有位置都會以單一虛擬節點擁有的形式對用戶端呈現。 | 
| cluster-require-full-coverage | no | 當金鑰空間部分無法運作時 (也就是至少有一個雜湊位置無法存取)，快取將會繼續針對仍涵蓋的金鑰空間部分接受查詢。整個金鑰空間在 cluster slots 中一律為單一虛擬節點「涵蓋」的狀態。 | 
| lua-time-limit | 5000 | Lua 指令碼的執行時間上限 (毫秒)，在此時間過後 ElastiCache 便會採取動作來停止指令碼。如果超過 `lua-time-limit` ，所有 Valkey 或 Redis OSS 命令可能會傳回格式為 *\$1\$1\$1\$1-BUSY* 的錯誤。由於此狀態可能會對許多基本的 Valkey 或 Redis OSS 操作造成干擾，ElastiCache 會先發出 *SCRIPT KILL* 命令。如果失敗，ElastiCache 會強制重新啟動 Valkey 或 Redis OSS。 | 
| maxclients | 65000 | 一次可連線至快取的用戶端數量上限。進一步建立的連線不一定會成功。 | 
| maxmemory-policy | volatile-lru | 達到快取記憶體限制時，已設定 TTL 的項目會在評估最近最少使用 (LRU) 之後移出。 | 
| notify-keyspace-events | (空白字串) | 無伺服器快取目前不支援金鑰空間事件。 | 
| port | 主要連接埠：6379 讀取連接埠：6380 | 無伺服器快取會公告兩個相同主機名稱的連接埠。主要連接埠允許寫入和讀取，而讀取連接埠則允許使用 READONLY 命令的較低延遲的最終一致讀取。 | 
| proto-max-bulk-len | 512 MiB | 單一元素請求的大小上限。 | 
| timeout | 0 | 用戶端不會在特定閒置時間強制中斷連線，但可能會為了進行負載平衡，在穩定狀態期間中斷連線。 | 

此外也設有下列限制：


****  

|  Name  |  詳細資訊  |  Description  | 
| --- | --- | --- | 
| 每個快取的大小 | 5，000 GiB | 每個無伺服器快取可儲存的最大資料量。 | 
| 每個插槽的大小 | 32 GiB | 單一 Valkey 或 Redis OSS 雜湊槽的大小上限。嘗試在單一 Valkey 或 Redis OSS 插槽上設定超過此數量資料的用戶端將觸發槽上的移出政策，而且如果沒有可移出的金鑰， 將會收到記憶體不足 (OOM) 錯誤。 | 
| 每個快取的 ECPU | 每秒 15，000，000 個 ECPU | ElastiCache 處理單元 (ECPU) 指標。請求消耗的 ECPUs 數量取決於所花費的 vCPU 時間和傳輸的資料量。 | 
| 每個插槽的 ECPU | 30K - 90K ECPU/秒 | 使用 READONLY 連線從複本讀取時，每個插槽最多 30K ECPU/秒或 90K ECPUs/秒。 ECPUs | 
| 每個請求的引數數數 | 3，999 | 每個請求的引數數目上限。每個請求傳送更多引數的用戶端將收到錯誤。 | 
| 金鑰名稱長度 | 4 KiB | 單一 Valkey 或 Redis OSS 金鑰或頻道名稱的大小上限。若用戶端參考的金鑰大於此值，則會收到錯誤。 | 
| Lua 指令碼大小 | 4 MiB | 單一 Valkey 或 Redis OSS Lua 指令碼的大小上限。若嘗試載入的 Lua 指令碼大於此值，則會收到錯誤。 | 

## 節點型叢集
<a name="RedisConfiguration.SelfDesigned"></a>

對於節點型叢集，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis) 以取得組態參數的預設值，以及可設定的預設值。預設值為一般建議，除非您的使用案例較為特殊，需要覆寫這些值。

# Valkey、Memcached 和 Redis OSS 的 IPv6 用戶端範例
<a name="network-type-best-practices"></a>

ElastiCache 與 Valkey、Memcached 和 Redis OSS 相容。這表示支援 IPv6 連線的用戶端應該能夠連線至已啟用 IPv6 的 ElastiCache for Memcached 叢集。與啟用 IPv6 的資源互動時，有一些值得注意的注意事項。

您可以在 AWS 資料庫部落格上檢視 [Valkey 和 Redis 用戶端的最佳實務](https://aws.amazon.com/blogs/database/best-practices-redis-clients-and-amazon-elasticache-for-redis/)部落格文章，以取得為 ElastiCache 資源設定 Valkey 和 Redis OSS 用戶端的建議。

以下是使用常用開放原始碼用戶端程庫式，與啟用 IPv6 之 ElastiCache 資源進行互動的最佳實務。

## 使用 Valkey 和 Redis OSS 驗證的用戶端
<a name="network-type-validated-clients-redis"></a>

ElastiCache 與 Valkey 和開放原始碼 Redis OSS 相容。這表示支援 IPv6 連線的 Valkey 和開放原始碼 Redis OSS 用戶端應該能夠連線至已啟用 IPv6 的 ElastiCache for Redis OSS 叢集。此外，幾個最受歡迎的 Python 和 Java 用戶端已經過特別測試與驗證，能夠搭配使用所有受支援的網路類型組態 (僅限 IPv4、僅限 IPv6 和雙堆疊)

下列用戶端已經過特別驗證，可與所有支援的 Valkey 和 Redis OSS 網路類型組態搭配使用。

已驗證的用戶端：
+ [Redis Py ()](https://github.com/redis/redis-py) – [4.1.2](https://github.com/redis/redis-py/tree/v4.1.2)
+ [Lettuce](https://lettuce.io/) – [版本：6.1.6.RELEASE](https://github.com/lettuce-io/lettuce-core/tree/6.1.6.RELEASE)
+ [Jedis](https://github.com/redis/jedis) – [版本：3.6.0](https://github.com/redis/jedis/tree/jedis-3.6.0)

# 用戶端的最佳實務 (Valkey 和 Redis OSS)
<a name="BestPractices.Clients.redis"></a>

了解常見案例的最佳實務，並遵循一些最熱門開放原始碼 Valkey 和 Redis OSS 用戶端程式庫 (redis-py、PHPRedis 和 Lettuce) 的程式碼範例，以及使用常用開放原始碼 Memcached 用戶端程式庫與 ElastiCache 資源互動的最佳實務。

**Topics**
+ [大量的連線 (Valkey 和 Redis OSS)](BestPractices.Clients.Redis.Connections.md)
+ [叢集用戶端探索和指數退避 (Valkey 和 Redis OSS)](BestPractices.Clients.Redis.Discovery.md)
+ [設定用戶端逾時 (Valkey 和 Redis OSS)](BestPractices.Clients.Redis.ClientTimeout.md)
+ [設定伺服器端閒置逾時 (Valkey 和 Redis OSS)](BestPractices.Clients.Redis.ServerTimeout.md)
+ [Lua 指令碼](BestPractices.Clients.Redis.LuaScripts.md)
+ [儲存大型複合項目 (Valkey 和 Redis OSS)](BestPractices.Clients.Redis.LargeItems.md)
+ [Lettuce 用戶端組態 (Valkey 和 Redis OSS)](BestPractices.Clients-lettuce.md)
+ [為雙堆疊叢集設定偏好的通訊協定 (Valkey 和 Redis OSS)](#network-type-configuring-dual-stack-redis)

# 大量的連線 (Valkey 和 Redis OSS)
<a name="BestPractices.Clients.Redis.Connections"></a>

無伺服器快取和個別 ElastiCache for Redis OSS 節點支援高達 65，000 個並行用戶端連線。然而，為了獲得最佳效能，我們建議用戶端應用程式不要以如此大量的連線持續操作。Valkey 和 Redis OSS 各自都有單一執行緒程序，以事件迴圈為基礎，其中依序處理傳入的用戶端請求。這表示，特定用戶端的回應時間會隨著連線的用戶端數量增加而變長。

您可以採取以下一組動作，以避免遇到 Valkey 或 Redis OSS 伺服器上的連線瓶頸：
+ 從讀取複本執行讀取操作。使用停用叢集模式的 ElastiCache 讀取器端點，或使用啟用叢集模式的複本進行讀取 (包括無伺服器快取)，即可達到這個目的。
+ 將寫入流量分散到多個主節點。您可以透過兩種方式進行。您可以使用多碎片 Valkey 或 Redis OSS 叢集搭配具備叢集模式功能的用戶端。您也可以利用用戶端分片寫入多個停用叢集模式的主節點。無伺服器快取中會自動進行此操作。
+ 在用戶端程式庫中使用連線集區 (可用時)。

一般而言，與一般 Valkey 或 Redis OSS 命令相比，建立 TCP 連線是一項運算成本高昂的操作。例如，重複使用現有連線時，處理 SET/GET 請求的速度加快一級。使用大小有限的用戶端連線集區可減輕連線管理的額外負荷。此外還限制了來自用戶端應用程式的並行傳入連線數。

下列 PHPRedis 的程式碼範例將示範為每個新的使用者請求建立新連線：

```
$redis = new Redis();
if ($redis->connect($HOST, $PORT) != TRUE) {
	//ERROR: connection failed
	return;
}
$redis->set($key, $value);
unset($redis);
$redis = NULL;
```

我們在連接到 Graviton2 (m6g.2xlarge) ElastiCache for Redis OSS 節點的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的迴圈中對此程式碼進行了基準測試。 ElastiCache 我們將用戶端和伺服器放在相同可用區域內。整個操作的平均延遲為 2.82 毫秒。

當我們更新程式碼並使用持續連線和連線集區時，整個操作的平均延遲為 0.21 毫秒：

```
$redis = new Redis();
if ($redis->pconnect($HOST, $PORT) != TRUE) {
	// ERROR: connection failed
	return;
}
$redis->set($key, $value);
unset($redis);
$redis = NULL;
```

必要的 redis.ini 組態：
+ `redis.pconnect.pooling_enabled=1`
+ `redis.pconnect.connection_limit=10`

下列程式碼是 [Redis-py 連線集區](https://redis.readthedocs.io/en/stable/)的範例：

```
conn = Redis(connection_pool=redis.BlockingConnectionPool(host=HOST, max_connections=10))
conn.set(key, value)
```

下列程式碼是 [Lettuce 連線集區](https://lettuce.io/core/release/reference/#_connection_pooling)的範例：

```
RedisClient client = RedisClient.create(RedisURI.create(HOST, PORT));
GenericObjectPool<StatefulRedisConnection> pool = ConnectionPoolSupport.createGenericObjectPool(() -> client.connect(), new GenericObjectPoolConfig());
pool.setMaxTotal(10); // Configure max connections to 10
try (StatefulRedisConnection connection = pool.borrowObject()) {
	RedisCommands syncCommands = connection.sync();
	syncCommands.set(key, value);
}
```

# 叢集用戶端探索和指數退避 (Valkey 和 Redis OSS)
<a name="BestPractices.Clients.Redis.Discovery"></a>

在叢集模式中連線至 ElastiCache Valkey 或 Redis OSS 叢集時，對應的用戶端程式庫必須注意叢集。用戶端必須取得雜湊位置與叢集中相對應節點的對應，才能將請求傳送至正確的節點，並避免處理叢集重新導向的額外效能負荷。因此，用戶端必須在兩種不同的情況下，探索位置和所對應節點的完整清單：
+ 用戶端已初始化，且必須填入初始位置組態
+ 收到來自伺服器的 MOVED 重新導向，例如，在舊有主節點提供的所有位置都由複本接管時發生容錯移轉的情況，或是將位置從來源主節點移至目標主節點時進行重新分片的情況

用戶端探索通常是透過向 Valkey 或 Redis OSS 伺服器發出 CLUSTER SLOT 或 CLUSTER NODE 命令來完成。我們建議使用 CLUSTER SLOT 方法，因為它會將一組位置範圍，以及相關聯的主節點和複本節點傳回至用戶端。這不需要從用戶端進行額外剖析，而且較有效率。

根據叢集拓撲而定，CLUSTER SLOT 命令的回應大小可能因叢集大小而有所不同。具有較多節點的較大型叢集會產生較大型的回應。因此，請務必確保執行叢集拓撲探索的用戶端數量不會無限增加。例如，當用戶端應用程式啟動或中斷來自伺服器的連線，而且必須執行叢集探索時，常見的錯誤是，用戶端應用程式發出數個重新連線和探索請求，但未在重試時加上指數退避。這會使 Valkey 或 Redis OSS 伺服器長時間沒有回應，CPU 使用率為 100%。如果每個 CLUSTER SLOT 命令都必須處理叢集匯流排中的大量節點，則中斷時間會延長。我們過去在多種不同語言都觀察到因為這種行為而發生的許多用戶端中斷情形，包括 Python (redis-py-cluster) 和 Java (Lettuce 和 Redisson)。

在無伺服器快取中，許多問題會自動緩解，因為公告的叢集拓撲是靜態的，並且由兩個項目組成：寫入端點和讀取端點。使用快取端點時，叢集探索也會自動分散到多個節點上。不過，以下建議仍很實用。

為了減輕突然湧入連線和探索請求所造成的影響，以下是我們的建議做法：
+ 實作具有大小限制的用戶端連線集區，以限制來自用戶端應用程式的並行傳入連線數。
+ 當用戶端因逾時而中斷與伺服器的連線時，請使用指數退避和抖動進行重試。這樣有助於避免多個用戶端同時癱瘓伺服器。
+ 使用位於 [在 ElastiCache 中尋找連線端點](Endpoints.md) 的指南尋找叢集端點來執行叢集探索。這樣做就能將探索負載分散到叢集中的所有節點 (最多 90 個)，而不會集中在叢集中少數幾個硬式編碼的種子節點。

下列程式碼範例將示範使用 redis-py、PHPRedis 和 Lettuce 的指數退避重試邏輯。

**退避邏輯範例 1：redis-py**

redis-py 有內建的重試機制，會在失敗後立即重試一次。此機制可透過建立 [Redis OSS](https://redis.readthedocs.io/en/stable/examples/connection_examples.html#redis.Redis) 物件時提供的`retry_on_timeout`引數啟用。我們在這裡示範搭配指數退避和抖動的自動重試機制。我們已提交了提取請求，以在 [redis-py (\$11494)](https://github.com/andymccurdy/redis-py/pull/1494) 中以原生方式實作指數退避。未來可能不需要手動實作。

```
def run_with_backoff(function, retries=5):
base_backoff = 0.1 # base 100ms backoff
max_backoff = 10 # sleep for maximum 10 seconds
tries = 0
while True:
try:
  return function()
except (ConnectionError, TimeoutError):
  if tries >= retries:
	raise
  backoff = min(max_backoff, base_backoff * (pow(2, tries) + random.random()))
  print(f"sleeping for {backoff:.2f}s")
  sleep(backoff)
  tries += 1
```

您可以使用下面的程式碼來設定值：

```
client = redis.Redis(connection_pool=redis.BlockingConnectionPool(host=HOST, max_connections=10))
res = run_with_backoff(lambda: client.set("key", "value"))
print(res)
```

根據您的工作負載而定，您可能需要針對延遲敏感的工作負載，將基本退避值從 1 秒變更為數十或數百毫秒。

**退避邏輯範例 2：PHPRedis**

PHPRedis 有內建的重試機制，會重試最多 10 次 (無法設定)。您可設定兩次重試之間的延遲 (從第二次重試開始使用抖動)。如需詳細資訊，請參閱下列[範例程式碼](https://github.com/phpredis/phpredis/blob/b0b9dd78ef7c15af936144c1b17df1a9273d72ab/library.c#L335-L368)。我們已提交了提取請求，以在 [PHPredis (\$11986)](https://github.com/phpredis/phpredis/pull/1986) 中以原生方式實作從那時起即已合併且[記錄](https://github.com/phpredis/phpredis/blob/develop/README.md#retry-and-backoff)的指數退避。若使用最新版 PHPRedis，則不需手動實作，但我們已在此處針對使用舊版者納入參考。目前，下列程式碼範例會設定重試機制的延遲：

```
$timeout = 0.1; // 100 millisecond connection timeout
$retry_interval = 100; // 100 millisecond retry interval
$client = new Redis();
if($client->pconnect($HOST, $PORT, $timeout, NULL, $retry_interval) != TRUE) {
	return; // ERROR: connection failed
}
$client->set($key, $value);
```

**退避邏輯範例 3：Lettuce**

Lettuce 採用以[指數退避和抖動](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)文章中所述指數退避策略為基礎的內建重試機制。以下程式碼摘錄顯示完整的抖動方法：

```
public static void main(String[] args)
{
	ClientResources resources = null;
	RedisClient client = null;

	try {
		resources = DefaultClientResources.builder()
				.reconnectDelay(Delay.fullJitter(
			Duration.ofMillis(100),     // minimum 100 millisecond delay
			Duration.ofSeconds(5),      // maximum 5 second delay
			100, TimeUnit.MILLISECONDS) // 100 millisecond base
		).build();

		client = RedisClient.create(resources, RedisURI.create(HOST, PORT));
		client.setOptions(ClientOptions.builder()
	.socketOptions(SocketOptions.builder().connectTimeout(Duration.ofMillis(100)).build()) // 100 millisecond connection timeout
	.timeoutOptions(TimeoutOptions.builder().fixedTimeout(Duration.ofSeconds(5)).build()) // 5 second command timeout
	.build());

	    // use the connection pool from above example
	} finally {
		if (connection != null) {
			connection.close();
		}

		if (client != null){
			client.shutdown();
		}

		if (resources != null){
			resources.shutdown();
		}

	}
}
```

# 設定用戶端逾時 (Valkey 和 Redis OSS)
<a name="BestPractices.Clients.Redis.ClientTimeout"></a>

**設定用戶端逾時**

適當地設定用戶端逾時，讓伺服器有足夠的時間來處理請求並產生回應。此外還能在無法建立伺服器連線時，讓伺服器快速檢錯。某些 Valkey 或 Redis OSS 命令可能比其他命令更昂貴。例如，包含多個必須以原子方式執行之命令的 Lua 指令碼或 MULTI/EXEC 交易。一般而言，建議設定較長的用戶端逾時，以避免用戶端還未收到來自伺服器的回應就已逾時，包括下列情況：
+ 在多個索引鍵之間執行命令
+ 執行包含多個個別 Valkey 或 Redis OSS 命令的 MULTI/EXEC 交易或 Lua 指令碼
+ 讀取較大的值
+ 執行如 BLPOP 等封鎖操作

若是 BLPOP 這類封鎖操作，最佳實務是將命令逾時設定為低於通訊端逾時的數字。

下列程式碼範例將示範以 redis-py、PHPRedis 和 Lettuce 實作用戶端逾時。

**逾時組態範例 1：redis-py**

下列程式碼範例使用 redis-py：

```
# connect to Redis server with a 100 millisecond timeout
# give every Redis command a 2 second timeout
client = redis.Redis(connection_pool=redis.BlockingConnectionPool(host=HOST, max_connections=10,socket_connect_timeout=0.1,socket_timeout=2))

res = client.set("key", "value") # will timeout after 2 seconds
print(res)                       # if there is a connection error

res = client.blpop("list", timeout=1) # will timeout after 1 second
                                      # less than the 2 second socket timeout
print(res)
```

**逾時組態範例 2：PHPRedis**

下列程式碼範例使用 PHPRedis：

```
// connect to Redis server with a 100ms timeout
// give every Redis command a 2s timeout
$client = new Redis();
$timeout = 0.1; // 100 millisecond connection timeout
$retry_interval = 100; // 100 millisecond retry interval
$client = new Redis();
if($client->pconnect($HOST, $PORT, 0.1, NULL, 100, $read_timeout=2) != TRUE){
	return; // ERROR: connection failed
}
$client->set($key, $value);

$res = $client->set("key", "value"); // will timeout after 2 seconds
print "$res\n";                      // if there is a connection error

$res = $client->blpop("list", 1); // will timeout after 1 second
print "$res\n";                   // less than the 2 second socket timeout
```

**逾時組態範例 3：Lettuce**

下列程式碼範例使用 Lettuce：

```
// connect to Redis server and give every command a 2 second timeout
public static void main(String[] args)
{
	RedisClient client = null;
	StatefulRedisConnection<String, String> connection = null;
	try {
		client = RedisClient.create(RedisURI.create(HOST, PORT));
		client.setOptions(ClientOptions.builder()
	.socketOptions(SocketOptions.builder().connectTimeout(Duration.ofMillis(100)).build()) // 100 millisecond connection timeout
	.timeoutOptions(TimeoutOptions.builder().fixedTimeout(Duration.ofSeconds(2)).build()) // 2 second command timeout 
	.build());

		// use the connection pool from above example

		commands.set("key", "value"); // will timeout after 2 seconds
		commands.blpop(1, "list"); // BLPOP with 1 second timeout
	} finally {
		if (connection != null) {
			connection.close();
		}

		if (client != null){
			client.shutdown();
		}
	}
}
```

# 設定伺服器端閒置逾時 (Valkey 和 Redis OSS)
<a name="BestPractices.Clients.Redis.ServerTimeout"></a>

我們發現了下列情況：客戶的應用程式有大量連線的閒置用戶端，但未主動傳送命令。在這類情況下，大量閒置的用戶端可能造成您耗盡全部 65,000 個連線。為避免這類情況發生，請在伺服器上透過 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis) 設定適當的逾時設定。這樣做可確保伺服器主動中斷閒置用戶端的連線，以避免連線數目增加。無伺服器快取不適用此設定。

# Lua 指令碼
<a name="BestPractices.Clients.Redis.LuaScripts"></a>

Valkey 和 Redis OSS 支援超過 200 個命令，包括執行 Lua 指令碼的命令。不過，在 Lua 指令碼方面，有幾個陷阱可能會影響 Valkey 或 Redis OSS 的記憶體和可用性。

**未參數化的 Lua 指令碼**

每個 Lua 指令碼都會在執行之前快取在 Valkey 或 Redis OSS 伺服器上。無參數 Lua 指令碼是唯一的，這可能會導致 Valkey 或 Redis OSS 伺服器存放大量 Lua 指令碼並耗用更多記憶體。為了緩解這種情況，務必確保所有 Lua 指令碼皆參數化，並且在需要時定期執行 SCRIPT FLUSH 來清除快取的 Lua 指令碼。

另請注意，必須提供金鑰。如果未提供 KEY 參數的值，指令碼將會失敗。例如，這將無法運作：

```
serverless-test-lst4hg.serverless.use1.cache.amazonaws.com:6379> eval 'return "Hello World"' 0
(error) ERR Lua scripts without any input keys are not supported.
```

這將可運作：

```
serverless-test-lst4hg.serverless.use1.cache.amazonaws.com:6379> eval 'return redis.call("get", KEYS[1])' 1 mykey-2
"myvalue-2"
```

以下範例說明如何使用參數化指令碼。首先將示範非參數化的方法來產生三個不同的已快取 Lua 指令碼，這是不建議的方法：

```
eval "return redis.call('set','key1','1')" 0
eval "return redis.call('set','key2','2')" 0
eval "return redis.call('set','key3','3')" 0
```

建議改用下列模式來建立可接受所傳遞參數的單一指令碼：

```
eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key1 1 
eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key2 2 
eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key3 3
```

**長時間執行的 Lua 指令碼**

Lua 指令碼能以原子方式執行多個命令，因此完成所需的時間可能比一般 Valkey 或 Redis OSS 命令更長。如果 Lua 指令碼只執行唯獨操作，就可以讓它中途停止執行。然而，一旦 Lua 指令碼執行寫入操作，就無法讓它終止，而必須執行到完成為止。長時間執行且正在變動的 Lua 指令碼可能會導致 Valkey 或 Redis OSS 伺服器長時間沒有回應。為了解決此問題，請避免長時間執行的 Lua 指令碼，並且在生產前環境中測試指令碼。

**具有隱匿寫入的 Lua 指令碼**

有幾種方式可以讓 Lua 指令碼繼續將新資料寫入 Valkey 或 Redis OSS，即使 Valkey 或 Redis OSS 超過 `maxmemory`：
+ 指令碼會在 Valkey 或 Redis OSS 伺服器低於 時啟動`maxmemory`，並在 內包含多個寫入操作
+ 指令碼的第一個寫入命令不會耗用記憶體 (例如 DEL)，但後續更多的寫入操作則會耗用記憶體
+ 您可以在 以外的 Valkey 或 Redis OSS 伺服器上設定適當的移出政策，以緩解此問題`noeviction`。這可讓 Redis OSS 在 Lua 指令碼之間移出項目並釋放記憶體。

# 儲存大型複合項目 (Valkey 和 Redis OSS)
<a name="BestPractices.Clients.Redis.LargeItems"></a>

在某些情況下，應用程式可能會在 Valkey 或 Redis OSS 中存放大型複合項目 （例如多 GB 雜湊資料集）。這不是建議的做法，因為它通常會導致 Valkey 或 Redis OSS 的效能問題。例如，用戶端可能會執行 HGETALL 命令來擷取整個多 GB 雜湊集合。這可能會對在用戶端輸出緩衝區中緩衝大型項目的 Valkey 或 Redis OSS 伺服器產生顯著的記憶體壓力。此外，對於叢集模式下的位置遷移，ElastiCache 不會遷移包含序列化大小大於 256 MB 之項目的位置。

為了解決大型項目的問題，以下是我們的建議做法：
+ 將大型複合項目分割成多個較小的項目。例如，將大型雜湊集合分割成個別的索引鍵-值欄位，且索引鍵名稱結構描述適當反映集合，例如，在索引鍵名稱中使用通用首碼來識別項目集合。如果您必須以原子方式存取同一集合中的多個欄位，您可以使用 MGET 命令在同一命令中擷取多個索引鍵-值。
+ 如果您評估了所有選項，但仍無法分割大型集合資料集，請嘗試使用對集合中的資料子集而非整個集合執行操作的命令。避免採用要求您在同一命令中以原子方式擷取整個多 GB 集合的使用案例。例如，在雜湊集合上使用 HGET 或 HMGET 命令，而非 HGETALL 命令。

# Lettuce 用戶端組態 (Valkey 和 Redis OSS)
<a name="BestPractices.Clients-lettuce"></a>

本節說明建議的 Java 和 Lettuce 組態選項，以及它們如何套用至 ElastiCache 叢集。

本節中的建議已使用 Lettuce 版本 6.2.2 進行測試。

**Topics**
+ [範例：叢集模式的 Lettuce 組態，啟用 TLS](BestPractices.Clients-lettuce-cme.md)
+ [範例：停用叢集模式的 Lettuce 組態、啟用 TLS](BestPractices.Clients-lettuce-cmd.md)

**Java DNS 快取 TTL**

Java 虛擬機器 (JVM) 會快取 DNS 名稱查詢。當 JVM 將主機名稱解析為 IP 位址時，它會在指定的時間段內快取 IP 位址，稱為*存留時間* (TTL)。

選擇 TTL 值是為了在延遲和對變化的回應能力之間進行權衡。DNS 解析程式使用較短的 TTL，可以更快地注意到叢集 DNS 中的更新。這可讓您的應用程式更快回應叢集所經歷的替換或其他工作流程。不過，如果 TTL 太低，則會增加查詢量，進而增加應用程式的延遲時間。雖然沒有正確的 TTL 值，但在設定 TTL 值時，值得考量可以等待變更生效的時間長度。

由於 ElastiCache 節點使用可能會變更的 DNS 名稱項目，因此我們建議您將 JVM 設定為 5 到 10 秒的低 TTL。這可確保當節點的 IP 地址變更時，您的應用程式將可透過重新查詢 DNS 項目來接收並使用資源的新 IP 地址。

在一些 Java 組態上，JVM 的預設 TTL 會如此設定，在重新啟動 JVM 之前，「絕不」重新整理 DNS 項目。

如需如何設定 JVM TTL 的詳細資訊，請參閱[如何設定 JVM TTL](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-jvm-ttl.html#how-to-set-the-jvm-ttl)。

**Lettuce 版本**

建議使用 Lettuce 6.2.2 或更新版本。

**端點**

當您使用已啟用叢集模式的叢集時，請將 `redisUri` 設為叢集組態端點。此 URI 的 DNS 查閱會傳回叢集中所有可用節點的清單，並在叢集初始化期間隨機解析到其中之一。如需拓撲重新整理如何運作的詳細資訊，請參閱本主題稍後的 *dynamicRefreshResources*。

**SocketOption**

啟用 [KeepAlive](https://lettuce.io/core/release/api/io/lettuce/core/SocketOptions.KeepAliveOptions.html)。啟用此選項可減少在命令執行期間處理失敗連線的需求。

請務必根據應用程式需求和工作負載設定[連線逾時](https://lettuce.io/core/release/api/io/lettuce/core/SocketOptions.Builder.html#connectTimeout-java.time.Duration-)。如需詳細資訊，請參閱本主題稍後的 Timeouts (逾時) 章節。

**ClusterClientOption：已啟用叢集模式的用戶端選項**

當連線中斷時，啟用 [AutoReconnect](https://lettuce.io/core/release/api/io/lettuce/core/cluster/ClusterClientOptions.Builder.html#autoReconnect-boolean-)。

設置 [CommandTimeout](https://lettuce.io/core/release/api/io/lettuPrce/core/RedisURI.html#getTimeout--)。如需更多詳細資料，請參閱本主題稍後的 Timeouts (逾時) 章節。

設定 [nodeFilter](https://lettuce.io/core/release/api/io/lettuce/core/cluster/ClusterClientOptions.Builder.html#nodeFilter-java.util.function.Predicate-) 以篩選出拓樸中故障的節點。Lettuce 會將「叢集節點」輸出中找到的所有節點 (包含具有 PFAIL/FAIL 狀態的節點) 儲存在用戶端的「分割區」(也稱為碎片) 中。在建立叢集拓撲的過程中，它會嘗試連線到所有的分割區節點。當節點因任何原因被取代時，新增故障節點的這種 Lettuce 行為可能會導致連線錯誤 (或警告)。

例如，在容錯移轉完成且叢集啟動復原程序之後，clusterTopology 正在重新整理時，叢集匯流排節點對應的時間很短，在完全從拓撲中移除之前，向下節點會列為 FAIL 節點。在此期間，Lettuce 用戶端會將其視為正常運作的節點，並持續與其連線。這會在重試耗盡後導致失敗。

例如：

```
final ClusterClientOptions clusterClientOptions = 
    ClusterClientOptions.builder()
    ... // other options
    .nodeFilter(it -> 
        ! (it.is(RedisClusterNode.NodeFlag.FAIL) 
        || it.is(RedisClusterNode.NodeFlag.EVENTUAL_FAIL) 
        || it.is(RedisClusterNode.NodeFlag.HANDSHAKE)
        || it.is(RedisClusterNode.NodeFlag.NOADDR)))
    .validateClusterNodeMembership(false)
    .build();
redisClusterClient.setOptions(clusterClientOptions);
```

**注意**  
節點篩選最適合用於 DynamicRefreshSources 設為 true 時。否則，如果拓撲檢視是從單一有問題的種子節點中取得，並將某些碎片的主節點視為故障，則它將篩除此主節點，這將導致槽不被涵蓋。擁有多個種子節點 (DynamicrefreshSources 為真時) 可降低發生此問題的可能性，因為在使用新升級的主節點進行容錯移轉之後，至少部分種子節點應具有更新的拓撲檢視。

**ClusterTopologyRefreshOptions：用於控制啟用叢集模式的用戶端的叢集拓撲重新整理選項**

**注意**  
已停用叢集模式的叢集不支援叢集探索命令，也不相容於所有用戶端動態拓撲探索功能。  
ElastiCache 的停用叢集模式與 Lettuce 的 `MasterSlaveTopologyRefresh` 不相容。相反地，對於停用的叢集模式，您可以設定 `StaticMasterReplicaTopologyProvider` 並提供叢集讀取和寫入端點。  
如需連接至已停用叢集模式之叢集的詳細資訊，請參閱 [尋找 Valkey 或 Redis OSS （停用叢集模式） 叢集的端點 （主控台）](Endpoints.md#Endpoints.Find.Redis)。  
如果您想要使用 Lettuce 的動態拓撲探索功能，可以使用與現有叢集相同的碎片組態來建立已啟用叢集模式的叢集。不過，對於已啟用叢集模式的叢集，建議至少設定 3 個具有至少 1 個複本的碎片，以支援快速容錯移轉。

啟用 [enablePeriodicRefresh](https://lettuce.io/core/release/api/io/lettuce/core/cluster/ClusterTopologyRefreshOptions.Builder.html#enablePeriodicRefresh-java.time.Duration-)。這會啟用定期叢集拓撲更新，以便用戶端以重新整理期間的間隔更新叢集拓撲 (預設值：60 秒)。停用時，用戶端只有在嘗試對叢集執行命令發生錯誤時，叢集拓撲才會更新。

啟用此選項後，您可以將此工作新增至背景任務，以減少與重新整理叢集拓撲相關的延遲。雖然拓撲重新整理是在背景工作中執行，但對於具有許多節點的叢集而言，可能會有些慢。這是因為所有節點都在查詢其檢視以取得最新的叢集檢視。如果您執行的是大型叢集，則可能需要增加期間。

啟用 [enableAllAdaptiveRefreshTriggers](https://lettuce.io/core/release/api/io/lettuce/core/cluster/ClusterTopologyRefreshOptions.Builder.html#enableAllAdaptiveRefreshTriggers--)。這會啟用使用所有[觸發器](https://lettuce.io/core/6.1.6.RELEASE/api/io/lettuce/core/cluster/ClusterTopologyRefreshOptions.RefreshTrigger.html)的適應性拓樸重新整理：MOVED\$1REDIRECT, ASK\$1REDIRECT, PERSISTENT\$1RECONNECTS, UNCOVERED\$1SLOT, UNKNOWN\$1NODE。自適應重新整理觸發會根據 Valkey 或 Redis OSS 叢集操作期間發生的事件啟動拓撲檢視更新。啟用此選項會在上述觸發程序發生時立即重新整理拓撲。適應性觸發程序重新整理會使用逾時來限制速率，因為事件可能會大規模發生 (更新之間的預設逾時：30)。

啟用 [closeStaleConnections](https://lettuce.io/core/release/api/io/lettuce/core/cluster/ClusterTopologyRefreshOptions.Builder.html#closeStaleConnections-boolean-)。如此可在重新整理叢集拓樸時關閉過時的連線。只有在 [ClusterTopologyRefreshOptions.isPeriodicRefreshEnabled()](https://lettuce.io/core/release/api/io/lettuce/core/cluster/ClusterTopologyRefreshOptions.html#isPeriodicRefreshEnabled--) 為真時，它才會生效。啟用後，用戶端可以關閉過時的連線，並在背景建立新連線。這可減少在命令執行期間處理失敗連線的需求。

啟用 [dynamicRefreshResources](https://lettuce.io/core/release/api/io/lettuce/core/cluster/ClusterTopologyRefreshOptions.Builder.html#dynamicRefreshSources-boolean-)。我們建議您為小型叢集啟用 dynamicRefreshResources，並在大型叢集時停用。dynamicRefreshResources 可讓您從提供的種子節點 (例如，叢集組態端點) 探索叢集節點。它會使用所有探索到的節點做為重新整理叢集拓撲的來源。

使用動態重新整理查詢所有探索到的叢集拓撲節點，並嘗試選擇最準確的叢集檢視。如果其設定為 false，則只會使用初始種子節點做為拓撲探索的來源，而且只會取得初始種子節點的用戶端數量。在停用時，如果叢集配置端點解析為故障的節點，則嘗試重新整理叢集檢視會失敗，並導致例外狀況。這種情況可能會發生，因為從叢集組態端點移除故障節點的項目需要一些時間。因此，組態端點仍可在短時間內隨機解析為故障的節點。

但是，在其啟用後，我們會使用從叢集檢視接收到的所有叢集節點，來查詢其目前的檢視。因為我們會從該檢視中篩選出故障的節點，所以拓撲重新整理將會成功。不過，當動態重新整理來源為真時，Lettuce 會查詢所有節點以取得叢集檢視，然後比較結果。因此，對於具有大量節點的叢集來說，它可能很昂貴。建議您在多節點的叢集時關閉此功能。

```
final ClusterTopologyRefreshOptions topologyOptions = 
    ClusterTopologyRefreshOptions.builder()
    .enableAllAdaptiveRefreshTriggers()
    .enablePeriodicRefresh()
    .dynamicRefreshSources(true)
    .build();
```

**ClientResources**

使用 [DirContextDnsResolver](https://lettuce.io/core/release/api/io/lettuce/core/resource/DirContextDnsResolver.html) 設定 [DnsResolver](https://lettuce.io/core/release/api/io/lettuce/core/resource/DefaultClientResources.Builder.html#dnsResolver-io.lettuce.core.resource.DnsResolver-)。該 DNS 解析程式係以 Java 的 com.sun.jndi.dns.DnsContextFactory 為基礎。

使用指數退避和完全抖動來設定 [reconnectDelay](https://lettuce.io/core/release/api/io/lettuce/core/resource/DefaultClientResources.Builder.html#reconnectDelay-io.lettuce.core.resource.Delay-)。Lettuce 具有以指數退避策略為基礎的內建重試機制。如需詳細資訊，請參閱 AWS 架構部落格上的[指數退避和抖動](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter)。如需重試退避策略重要性的詳細資訊，請參閱 AWS 資料庫部落格上[最佳實務部落格文章](https://aws.amazon.com/blogs/database/best-practices-redis-clients-and-amazon-elasticache-for-redis/)的退避邏輯區段。

```
ClientResources clientResources = DefaultClientResources.builder()
   .dnsResolver(new DirContextDnsResolver())
    .reconnectDelay(
        Delay.fullJitter(
            Duration.ofMillis(100),     // minimum 100 millisecond delay
            Duration.ofSeconds(10),      // maximum 10 second delay
            100, TimeUnit.MILLISECONDS)) // 100 millisecond base
    .build();
```

**逾時**

使用低於指令逾時的連線逾時值。Lettuce 使用延遲連接建立。因此，如果連線逾時高於指令逾時，而 Lettuce 嘗試連線到健康狀態不良的節點，且永遠超過指令逾時，則您可能會在拓撲重新整理後發生一段時間的持續性失敗。

針對不同的指令使用動態指令逾時。我們建議您根據指令預期持續時間設定指令逾時。例如，對重複多個金鑰的指令 (例如 FLUSHDB、FLUSHALL、KEYS、SMEMBERS 或 Lua 指令碼) 使用較長的逾時時間。對於單一金鑰指令 (例如 SET、GET 和 HSET) 使用較短的逾時。

**注意**  
下列範例中設定的逾時適用於執行 SET/GET 指令的測試，且金鑰和值長度最多 20 個位元組。在指令很複雜或金鑰和值較大時，處理時間可能會更長。您應該根據應用程式的使用案例設定逾時。

```
private static final Duration META_COMMAND_TIMEOUT = Duration.ofMillis(1000);
private static final Duration DEFAULT_COMMAND_TIMEOUT = Duration.ofMillis(250);
// Socket connect timeout should be lower than command timeout for Lettuce
private static final Duration CONNECT_TIMEOUT = Duration.ofMillis(100);
    
SocketOptions socketOptions = SocketOptions.builder()
    .connectTimeout(CONNECT_TIMEOUT)
    .build();
 

class DynamicClusterTimeout extends TimeoutSource {
     private static final Set<ProtocolKeyword> META_COMMAND_TYPES = ImmutableSet.<ProtocolKeyword>builder()
          .add(CommandType.FLUSHDB)
          .add(CommandType.FLUSHALL)
          .add(CommandType.CLUSTER)
          .add(CommandType.INFO)
          .add(CommandType.KEYS)
          .build();

    private final Duration defaultCommandTimeout;
    private final Duration metaCommandTimeout;

    DynamicClusterTimeout(Duration defaultTimeout, Duration metaTimeout)
    {
        defaultCommandTimeout = defaultTimeout;
        metaCommandTimeout = metaTimeout;
    }

    @Override
    public long getTimeout(RedisCommand<?, ?, ?> command) {
        if (META_COMMAND_TYPES.contains(command.getType())) {
            return metaCommandTimeout.toMillis();
        }
        return defaultCommandTimeout.toMillis();
    }
}

// Use a dynamic timeout for commands, to avoid timeouts during
// cluster management and slow operations.
TimeoutOptions timeoutOptions = TimeoutOptions.builder()
.timeoutSource(
    new DynamicClusterTimeout(DEFAULT_COMMAND_TIMEOUT, META_COMMAND_TIMEOUT))
.build();
```

# 範例：叢集模式的 Lettuce 組態，啟用 TLS
<a name="BestPractices.Clients-lettuce-cme"></a>

**注意**  
下列範例中的逾時適用於執行 SET/GET 指令的測試，且金鑰和值長度最多 20 個位元組。在指令很複雜或金鑰和值較大時，處理時間可能會更長。您應該根據應用程式的使用案例設定逾時。

```
// Set DNS cache TTL
public void setJVMProperties() {
    java.security.Security.setProperty("networkaddress.cache.ttl", "10");
}

private static final Duration META_COMMAND_TIMEOUT = Duration.ofMillis(1000);
private static final Duration DEFAULT_COMMAND_TIMEOUT = Duration.ofMillis(250);
// Socket connect timeout should be lower than command timeout for Lettuce
private static final Duration CONNECT_TIMEOUT = Duration.ofMillis(100);

// Create RedisURI from the cluster configuration endpoint
clusterConfigurationEndpoint = <cluster-configuration-endpoint> // TODO: add your cluster configuration endpoint
final RedisURI redisUriCluster =
    RedisURI.Builder.redis(clusterConfigurationEndpoint)
        .withPort(6379)
        .withSsl(true)
        .build();

// Configure the client's resources                
ClientResources clientResources = DefaultClientResources.builder()
    .reconnectDelay(
        Delay.fullJitter(
            Duration.ofMillis(100),     // minimum 100 millisecond delay
            Duration.ofSeconds(10),      // maximum 10 second delay
            100, TimeUnit.MILLISECONDS)) // 100 millisecond base
    .dnsResolver(new DirContextDnsResolver())
    .build(); 

// Create a cluster client instance with the URI and resources
RedisClusterClient redisClusterClient = 
    RedisClusterClient.create(clientResources, redisUriCluster);

// Use a dynamic timeout for commands, to avoid timeouts during
// cluster management and slow operations.
class DynamicClusterTimeout extends TimeoutSource {
     private static final Set<ProtocolKeyword> META_COMMAND_TYPES = ImmutableSet.<ProtocolKeyword>builder()
          .add(CommandType.FLUSHDB)
          .add(CommandType.FLUSHALL)
          .add(CommandType.CLUSTER)
          .add(CommandType.INFO)
          .add(CommandType.KEYS)
          .build();

    private final Duration metaCommandTimeout;
    private final Duration defaultCommandTimeout;

    DynamicClusterTimeout(Duration defaultTimeout, Duration metaTimeout)
    {
        defaultCommandTimeout = defaultTimeout;
        metaCommandTimeout = metaTimeout;
    }

    @Override
    public long getTimeout(RedisCommand<?, ?, ?> command) {
        if (META_COMMAND_TYPES.contains(command.getType())) {
            return metaCommandTimeout.toMillis();
        }
        return defaultCommandTimeout.toMillis();
    }
}

TimeoutOptions timeoutOptions = TimeoutOptions.builder()
    .timeoutSource(new DynamicClusterTimeout(DEFAULT_COMMAND_TIMEOUT, META_COMMAND_TIMEOUT))
     .build();

// Configure the topology refreshment options
final ClusterTopologyRefreshOptions topologyOptions = 
    ClusterTopologyRefreshOptions.builder()
    .enableAllAdaptiveRefreshTriggers()
    .enablePeriodicRefresh()
    .dynamicRefreshSources(true)
    .build();

// Configure the socket options
final SocketOptions socketOptions = 
    SocketOptions.builder()
    .connectTimeout(CONNECT_TIMEOUT) 
    .keepAlive(true)
    .build();

// Configure the client's options
final ClusterClientOptions clusterClientOptions = 
    ClusterClientOptions.builder()
    .topologyRefreshOptions(topologyOptions)
    .socketOptions(socketOptions)
    .autoReconnect(true)
    .timeoutOptions(timeoutOptions) 
    .nodeFilter(it -> 
        ! (it.is(RedisClusterNode.NodeFlag.FAIL) 
        || it.is(RedisClusterNode.NodeFlag.EVENTUAL_FAIL) 
        || it.is(RedisClusterNode.NodeFlag.NOADDR))) 
    .validateClusterNodeMembership(false)
    .build();
    
redisClusterClient.setOptions(clusterClientOptions);

// Get a connection
final StatefulRedisClusterConnection<String, String> connection = 
    redisClusterClient.connect();

// Get cluster sync/async commands   
RedisAdvancedClusterCommands<String, String> sync = connection.sync();
RedisAdvancedClusterAsyncCommands<String, String> async = connection.async();
```

# 範例：停用叢集模式的 Lettuce 組態、啟用 TLS
<a name="BestPractices.Clients-lettuce-cmd"></a>

**注意**  
下列範例中的逾時適用於執行 SET/GET 指令的測試，且金鑰和值長度最多 20 個位元組。在指令很複雜或金鑰和值較大時，處理時間可能會更長。您應該根據應用程式的使用案例設定逾時。

```
// Set DNS cache TTL
public void setJVMProperties() {
    java.security.Security.setProperty("networkaddress.cache.ttl", "10");
}

private static final Duration META_COMMAND_TIMEOUT = Duration.ofMillis(1000);
private static final Duration DEFAULT_COMMAND_TIMEOUT = Duration.ofMillis(250);
// Socket connect timeout should be lower than command timeout for Lettuce
private static final Duration CONNECT_TIMEOUT = Duration.ofMillis(100);

// Create RedisURI from the primary/reader endpoint
clusterEndpoint = <primary/reader-endpoint> // TODO: add your node endpoint
RedisURI redisUriStandalone =
    RedisURI.Builder.redis(clusterEndpoint).withPort(6379).withSsl(true).withDatabase(0).build();

ClientResources clientResources =
    DefaultClientResources.builder()
        .dnsResolver(new DirContextDnsResolver())
        .reconnectDelay(
            Delay.fullJitter(
                Duration.ofMillis(100), // minimum 100 millisecond delay
                Duration.ofSeconds(10), // maximum 10 second delay
                100,
                TimeUnit.MILLISECONDS)) // 100 millisecond base
        .build();

// Use a dynamic timeout for commands, to avoid timeouts during
// slow operations.
class DynamicTimeout extends TimeoutSource {
     private static final Set<ProtocolKeyword> META_COMMAND_TYPES = ImmutableSet.<ProtocolKeyword>builder()
          .add(CommandType.FLUSHDB)
          .add(CommandType.FLUSHALL)
          .add(CommandType.INFO)
          .add(CommandType.KEYS)
          .build();

    private final Duration metaCommandTimeout;
    private final Duration defaultCommandTimeout;

    DynamicTimeout(Duration defaultTimeout, Duration metaTimeout)
    {
        defaultCommandTimeout = defaultTimeout;
        metaCommandTimeout = metaTimeout;
    }

    @Override
    public long getTimeout(RedisCommand<?, ?, ?> command) {
        if (META_COMMAND_TYPES.contains(command.getType())) {
            return metaCommandTimeout.toMillis();
        }
        return defaultCommandTimeout.toMillis();
    }
}

TimeoutOptions timeoutOptions = TimeoutOptions.builder()
    .timeoutSource(new DynamicTimeout(DEFAULT_COMMAND_TIMEOUT, META_COMMAND_TIMEOUT))
     .build();                      
                                    
final SocketOptions socketOptions =
    SocketOptions.builder().connectTimeout(CONNECT_TIMEOUT).keepAlive(true).build();

ClientOptions clientOptions =
    ClientOptions.builder().timeoutOptions(timeoutOptions).socketOptions(socketOptions).build();

RedisClient redisClient = RedisClient.create(clientResources, redisUriStandalone);
redisClient.setOptions(clientOptions);
```

## 為雙堆疊叢集設定偏好的通訊協定 (Valkey 和 Redis OSS)
<a name="network-type-configuring-dual-stack-redis"></a>

對於啟用叢集模式的 Valkey 或 Redis OSS 叢集，您可以控制通訊協定用戶端將使用 IP 探索參數連接到叢集中的節點。IP 探索參數可以設為 IPv4 或 IPv6。

對於 Valkey 或 Redis OSS 叢集，IP 探索參數會設定[叢集插槽 ()](https://valkey.io/commands/cluster-slots/)、[叢集碎片 ()](https://valkey.io/commands/cluster-shards/) 和[叢集節點 ()](https://valkey.io/commands/cluster-nodes/) 輸出中使用的 IP 通訊協定。用戶端會使用這些命令來探索叢集拓撲。用戶端會使用這些命令中的 IP，連線至叢集的其他節點。

變更 IP 探索不會導致連線用戶端停機。但是，該變更需要一些傳播時間。若要判斷變更何時完全傳播至 Valkey 或 Redis OSS 叢集，請監控 的輸出`cluster slots`。一旦叢集槽命令傳回的所有節點都報告了具新通訊協定的 IP，就表示變更已完成傳播。

Redis-Py 範例：

```
cluster = RedisCluster(host="xxxx", port=6379)
target_type = IPv6Address # Or IPv4Address if changing to IPv4

nodes = set()
while len(nodes) == 0 or not all((type(ip_address(host)) is target_type) for host in nodes):
    nodes = set()

   # This refreshes the cluster topology and will discovery any node updates.
   # Under the hood it calls cluster slots
    cluster.nodes_manager.initialize()
    for node in cluster.get_nodes():
        nodes.add(node.host)
    self.logger.info(nodes)

    time.sleep(1)
```

Lettuce 範例：

```
RedisClusterClient clusterClient = RedisClusterClient.create(RedisURI.create("xxxx", 6379));

Class targetProtocolType = Inet6Address.class; // Or Inet4Address.class if you're switching to IPv4

Set<String> nodes;
    
do {
   // Check for any changes in the cluster topology.
   // Under the hood this calls cluster slots
    clusterClient.refreshPartitions();
    Set<String> nodes = new HashSet<>();

    for (RedisClusterNode node : clusterClient.getPartitions().getPartitions()) {
        nodes.add(node.getUri().getHost());
    }

    Thread.sleep(1000);
} while (!nodes.stream().allMatch(node -> {
            try {
                return finalTargetProtocolType.isInstance(InetAddress.getByName(node));
            } catch (UnknownHostException ignored) {}
            return false;
}));
```

# 用戶端的最佳實務 (Memcached)
<a name="BestPractices.Clients.memcached"></a>

了解 ElastiCache for Memcached 叢集常見案例的最佳實務。

**Topics**
+ [設定 ElastiCache 用戶端以實現高效率的負載平衡 (Memcached)](BestPractices.LoadBalancing.md)
+ [使用 Memcached 驗證的用戶端](network-type-validated-clients-memcached.md)
+ [為雙堆疊叢集設定偏好的通訊協定 (Memcached)](network-type-configuring-dual-stack-memcached.md)

# 設定 ElastiCache 用戶端以實現高效率的負載平衡 (Memcached)
<a name="BestPractices.LoadBalancing"></a>

**注意**  
本節適用於節點型多節點 Memcached 叢集。

若要有效使用多個 ElastiCache Memcached 節點，您需要將快取索引鍵分散到各個節點。負載平衡叢集與 *n* 個節點的簡單方法是計算物件金鑰的雜湊，並以 *n*： 修改結果`hash(key) mod n`。產生的值 (0 到 *n*–1) 便是您置放物件的節點數。

只要節點數 (*n*) 為常數，此方法便相當簡易且運作良好。但是，每當您新增節點到叢集，或從叢集移除節點時，需要移動的鍵數便是 *(n - 1) / n* (其中 *n* 是新的節點數)。因此，此方法會導致移動大量的鍵，引發大量的初始快取遺漏，尤其是在節點數越來越大時。從 1 個擴展到 2 個節點會導致 (2-1)/2 (50%) 的索引鍵移動，這是最佳情況。從 9 個擴展到 10 個節點會導致 (10–1)/10 (90%) 的索引鍵移動。若您因為流量的峰值而向上擴展，您不會希望發生大量的快取遺漏。大量的快取遺漏會導致資料庫遭受衝擊，尤其是藉時資料庫已經因為流量峰值而超載了。

此難題的解決方案便是一致性雜湊。一致雜湊所使用的演算法，會讓節點新增到叢集或從叢集移除節點時需移動的索引鍵數約為 *1/n* (其中 *n* 是新節點的數量)。從 1 擴展到 2 個節點會導致 1/2 (50%) 的鍵移動，此為最壞情況。從 9 擴展到 10 個節點會導致 1/10 (10%) 的鍵移動。

做為使用者，您可以控制要用於多節點叢集的雜湊演算法。建議您設定用戶端，以使用一致性雜湊。所幸，在大多數的熱門語言中，有許多 Memcached 用戶端程式庫都實作了一致性雜湊。檢查您使用的程式庫文件，查看其是否支援一致性雜湊以及其實作方式。

若您使用 Java、PHP 或 .NET，建議您使用其中一個 Amazon ElastiCache 用戶端程式庫。

## 使用 Java 的一致性雜湊
<a name="BestPractices.LoadBalancing.Java"></a>

ElastiCache Memcached Java 用戶端是以開放原始碼的 spymemcached Java 用戶端為基礎，其內建了一致雜湊功能。程式庫包含實作一致性雜湊的 KetamaConnectionFactory 類別。根據預設，spymemcached 中會關閉一致性雜湊。

如需詳細資訊，請參閱 [KetamaConnectionFactory](https://github.com/RTBHOUSE/spymemcached/blob/master/src/main/java/net/spy/memcached/KetamaConnectionFactory.java) 中的 KetamaConnectionFactory 文件。

## 搭配 Memcached 使用 PHP 的一致雜湊
<a name="BestPractices.LoadBalancing.PHP"></a>

ElastiCache Memcached PHP 用戶端是內建 Memcached PHP 程式庫的包裝函數。根據預設，Memcached PHP 程式庫會關閉一致性雜湊。

請使用以下程式碼來開啟一致性雜湊。

```
$m = new Memcached();
$m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
```

除了上述程式碼之外，我們建議也在您的 php.ini 檔案中開啟 `memcached.sess_consistent_hash`。

 如需詳細資訊，請參閱位於 [http://php.net/manual/en/memcached.configuration.php](http://php.net/manual/en/memcached.configuration.php) 的 Memcached PHP 執行時間設定文件。請特別注意 `memcached.sess_consistent_hash` 參數。

## 使用 .NET 搭配 Memcached 的一致雜湊
<a name="BestPractices.LoadBalancing.dotNET"></a>

ElastiCache Memcached .NET 用戶端是 Enyim Memcached 的包裝函數。根據預設，Enyim Memcached 用戶端會開啟一致性雜湊。

 如需詳細資訊，請參閱 `memcached/locator` 說明文件，網址為 [https://github.com/enyim/EnyimMemcached/wiki/MemcachedClient-Configuration\$1user-content-memcachedlocator](https://github.com/enyim/EnyimMemcached/wiki/MemcachedClient-Configuration#user-content-memcachedlocator)。

# 使用 Memcached 驗證的用戶端
<a name="network-type-validated-clients-memcached"></a>

下列用戶端已經過特別驗證，可搭配 Memcached 的所有支援網路類型組態使用。

已驗證的用戶端：
+ 適用於 [AWS Php 的 ElastiCache 叢集用戶端 Memcached](https://github.com/awslabs/aws-elasticache-cluster-client-memcached-for-php) – [版本 \$13.6.2](https://github.com/awslabs/aws-elasticache-cluster-client-memcached-for-php/tree/v3.2.0)
+ [AWS 適用於 Java 的 ElastiCache 叢集用戶端 Memcached](https://github.com/awslabs/aws-elasticache-cluster-client-memcached-for-java) – Github 上的最新主伺服器

# 為雙堆疊叢集設定偏好的通訊協定 (Memcached)
<a name="network-type-configuring-dual-stack-memcached"></a>

針對 Memcached 叢集，您可以使用 IP 探索參數，控制用戶端用來連線至叢集中節點的通訊協定。IP 探索參數可以設為 IPv4 或 IPv6。

IP 探索參數可控制設定取得叢集輸出中使用的 IP 通訊協定。這也會決定用戶端使用的 IP 通訊協定，這些通訊協定支援 ElastiCache for Memcached 叢集的自動探索功能。

變更 IP 探索不會導致連線用戶端停機。但是，該變更需要一些傳播時間。

監控 Java 的 `getAvailableNodeEndPoints` 輸出，針對 Php 則監控 `getServerList` 的輸出。一旦這些函數的輸出報告了叢集中使用更新通訊協定的所有節點 IP，就表示變更已完成傳播。

Java 範例：

```
MemcachedClient client = new MemcachedClient(new InetSocketAddress("xxxx", 11211));

Class targetProtocolType = Inet6Address.class; // Or Inet4Address.class if you're switching to IPv4

Set<String> nodes;
    
do {
    nodes = client.getAvailableNodeEndPoints().stream().map(NodeEndPoint::getIpAddress).collect(Collectors.toSet());

    Thread.sleep(1000);
} while (!nodes.stream().allMatch(node -> {
            try {
                return finalTargetProtocolType.isInstance(InetAddress.getByName(node));
            } catch (UnknownHostException ignored) {}
            return false;
        }));
```

Php 範例：

```
$client = new Memcached;
$client->setOption(Memcached::OPT_CLIENT_MODE, Memcached::DYNAMIC_CLIENT_MODE);
$client->addServer("xxxx", 11211);

$nodes = [];
$target_ips_count = 0;
do {
    # The PHP memcached client only updates the server list if the polling interval has expired and a
    # command is sent
    $client->get('test');
 
    $nodes = $client->getServerList();

    sleep(1);
    $target_ips_count = 0;

    // For IPv4 use FILTER_FLAG_IPV4
    $target_ips_count = count(array_filter($nodes, function($node) { return filter_var($node["ipaddress"], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6); }));
 
} while (count($nodes) !== $target_ips_count);
```

在更新 IP 探索之前建立的任何現有用戶端連線仍會使用舊通訊協定進行連線。一旦在叢集探索命令的輸出中偵測到變更，所有經過驗證的用戶端都會使用新的 IP 通訊協定自動重新連線至叢集。但是，這仍取決於用戶端的操作。

## 啟用 TLS 的雙堆疊 ElastiCache 叢集
<a name="network-type-configuring-tls-enabled-dual-stack"></a>

為 ElastiCache 叢集啟用 TLS 時，叢集探索函數 (`cluster slots`、 `cluster shards`和 `cluster nodes` Redis) 或`config get cluster`為 Memcached 傳回主機名稱，而非 IPs。接著會使用主機名稱而非 IP 來連線 ElastiCache 叢集，並執行 TLS 交握。這表示用戶端不會受到 IP 探索參數的影響。針對啟用 TLS 的叢集，IP 探索參數對偏好的 IP 通訊協定沒有影響。反之，用戶端在解析 DNS 主機名稱時，偏好使用的 IP 通訊協定會決定所用的 IP 通訊協定。

**Java 用戶端**

從同時支援 IPv4 和 IPv6 的 Java 環境連線時，為了回溯相容性，Java 會預設偏好 IPv4 而非 IPv6。不過，IP 通訊協定偏好設定可透過 JVM 引數設定。為了偏好 IPv4，JVM 會接受 `-Djava.net.preferIPv4Stack=true` 並偏好 IPv6 設為 `-Djava.net.preferIPv6Stack=true`。設定 `-Djava.net.preferIPv4Stack=true` 就表示 JVM 將不再進行任何 IPv6 連線。**對於 Valkey 或 Redis OSS，這包括其他非 Valkey 和非 Redis OSS 應用程式的應用程式。**

**主機層級偏好**

一般而言，若用戶端或用戶端執行期未提供設定 IP 通訊協定偏好設定的組態選項，在執行 DNS 解析時，IP 通訊協定將取決於主機的組態。根據預設，大部份主機偏好 IPv6 而非 IPv4，但可以在主機層級設定此偏好設定。這會影響來自該主機的所有 DNS 要求，而不僅是對 ElastiCache 叢集的 DNS 要求。

**Linux 主機**

針對 Linux，可以透過修改 `gai.conf` 檔案，設定 IP 通訊協定偏好設定。您可以在 `/etc/gai.conf` 下找到 `gai.conf` 檔案。若沒有指定的 `gai.conf`，則應在 `/usr/share/doc/glibc-common-x.xx/gai.conf` 之下提供一個範例，可以複製到 `/etc/gai.conf`，且預設組態應取消註解。若要在連線至 ElastiCache 叢集時，將組態更新為偏好 IPv4，請更新包含叢集 IP 的 CIDR 範圍優先順序，使其優先順序高於預設的 IPv6 連線。根據預設，IPv6 連線的優先順序為 40。例如，若該叢集位於具有 CIDR 172.31.0.0:0/16 的子網路中，以下組態會導致用戶端在連線至叢集時偏好 IPv4。

```
label ::1/128       0
label ::/0          1
label 2002::/16     2
label ::/96         3
label ::ffff:0:0/96 4
label fec0::/10     5
label fc00::/7      6
label 2001:0::/32   7
label ::ffff:172.31.0.0/112 8
#
#    This default differs from the tables given in RFC 3484 by handling
#    (now obsolete) site-local IPv6 addresses and Unique Local Addresses.
#    The reason for this difference is that these addresses are never
#    NATed while IPv4 site-local addresses most probably are.  Given
#    the precedence of IPv6 over IPv4 (see below) on machines having only
#    site-local IPv4 and IPv6 addresses a lookup for a global address would
#    see the IPv6 be preferred.  The result is a long delay because the
#    site-local IPv6 addresses cannot be used while the IPv4 address is
#    (at least for the foreseeable future) NATed.  We also treat Teredo
#    tunnels special.
#
# precedence  <mask>   <value>
#    Add another rule to the RFC 3484 precedence table.  See section 2.1
#    and 10.3 in RFC 3484.  The default is:
#
precedence  ::1/128       50
precedence  ::/0          40
precedence  2002::/16     30
precedence ::/96          20
precedence ::ffff:0:0/96  10
precedence ::ffff:172.31.0.0/112 100
```

如需 的詳細資訊，`gai.conf`請參閱 [Linux 手冊頁面](https://man7.org/linux/man-pages/man5/gai.conf.5.html) 

**Windows 主機**

Windows 主機的程序十分類似。針對 Windows 主機，您可以執行 `netsh interface ipv6 set prefix CIDR_CONTAINING_CLUSTER_IPS PRECEDENCE LABEL`。此操作與在 Linux 主機上修改 `gai.conf` 檔案的效果相同。

這會更新偏好設定政策，使其在指定的 CIDR 範圍內偏好 IPv4 連線而非 IPv6 連線。例如，若叢集位於具執行 `netsh interface ipv6 set prefix ::ffff:172.31.0.0:0/112 100 15` 的 172.31.0.0:0/16 CIDR 子網路中，則會產生下列優先順序表格，導致用戶端在連線至叢集時偏好 IPv4。

```
C:\Users\Administrator>netsh interface ipv6 show prefixpolicies
Querying active state...

Precedence Label Prefix
---------- ----- --------------------------------
100 15 ::ffff:172.31.0.0:0/112
20 4 ::ffff:0:0/96
50 0 ::1/128
40 1 ::/0
30 2 2002::/16
5 5 2001::/32
3 13 fc00::/7
1 11 fec0::/10
1 12 3ffe::/16
1 3 ::/96
```

# 管理 Valkey 和 Redis OSS 的預留記憶體
<a name="redis-memory-management"></a>

預留記憶體是為非資料使用預留的記憶體。執行備份或容錯移轉時，Valkey 和 Redis OSS 會使用可用的記憶體，在叢集的資料寫入 .rdb 檔案時記錄對叢集的寫入操作。如果您沒有足夠的記憶體可供所有寫入使用，此程序會失敗。您可以在下面找到管理 ElastiCache for Redis OSS 預留記憶體的選項，以及如何套用這些選項的相關資訊。

**Topics**
+ [您需要多少預留記憶體？](#redis-memory-management-need)
+ [用於管理預留記憶體的參數](#redis-memory-management-parameters)
+ [指定您的預留記憶體管理參數](#redis-reserved-memory-management-change)

## 您需要多少預留記憶體？
<a name="redis-memory-management-need"></a>

如果您在 2.8.22 之前執行 Redis OSS 版本，則相較於執行 Redis OSS 2.8.22 或更新版本，為備份和容錯移轉預留更多記憶體。此要求是由於 ElastiCache for Redis OSS 實作備份程序的不同方式所致。經驗法則為 2.8.22 版之前的 Redis OSS 額外負荷預留節點類型`maxmemory`值的一半，為 Redis OSS 2.8.22 版及更新版本預留四分之一。

由於 ElastiCache 實作備份和複寫程序的方式不同，經驗法則是使用 `reserved-memory-percent` 參數保留節點類型`maxmemory`值的 25%。這是預設值，建議大多數情況下使用。

當爆量微型和小型執行個體類型操作接近`maxmemory`限制時，它們可能會遇到交換用量。為了在備份、複寫和高流量期間改善這些執行個體類型的操作可靠性，我們建議將小型執行個體類型的`reserved-memory-percent`參數值增加到 30%，微型執行個體類型增加到 50%。

對於具有資料分層的 ElastiCache 叢集上的大量寫入工作負載，我們建議將 增加`reserved-memory-percent`到節點可用記憶體的 50%。

如需詳細資訊，請參閱下列內容：
+ [確保您有足夠的記憶體來建立 Valkey 或 Redis OSS 快照](BestPractices.BGSAVE.md)
+ [同步與備份的實作方式](Replication.Redis.Versions.md)
+ [ElastiCache 中的資料分層](data-tiering.md)

## 用於管理預留記憶體的參數
<a name="redis-memory-management-parameters"></a>

自 2017 年 3 月 16 日起，Amazon ElastiCache 提供兩個互斥參數來管理您的 Valkey 或 Redis OSS 記憶體，`reserved-memory`以及 `reserved-memory-percent`。這些參數都不是 Valkey 或 Redis OSS 分佈的一部分。

根據您成為 ElastiCache 客戶的時間，這兩個參數的其中之一會是預設記憶體管理參數。當您建立新的 Valkey 或 Redis OSS 叢集或複寫群組並使用預設參數群組時，會套用此參數。
+ 對於在 2017 年 3 月 16 日之前啟動的客戶 - 當您使用預設參數群組建立 Redis OSS 叢集或複寫群組時，您的記憶體管理參數為 `reserved-memory`。這個情況下會保留零 (0) 位元組的記憶體。
+ 對於在 2017 年 3 月 16 日或之後啟動的客戶 – 當您使用預設參數群組建立 Valkey 或 Redis OSS 叢集或複寫群組時，您的記憶體管理參數為 `reserved-memory-percent`。在這種情況下，會保留節點 `maxmemory` 值的 25% 用於非資料目的。

讀取兩個 Valkey 或 Redis OSS 記憶體管理參數後，您可能偏好使用非預設或非預設值的參數。若是如此，您可以變更為另一個預留記憶體管理參數。

若要變更該參數的值，您可以建立自訂參數群組並進行修改，以使用您偏好的記憶體管理參數和值。然後，您可以在建立新的 Valkey 或 Redis OSS 叢集或複寫群組時，使用自訂參數群組。若是現有的叢集或複寫群組，您可以進行修改來使用您的自訂參數群組。

 如需詳細資訊，請參閱下列內容：
+ [指定您的預留記憶體管理參數](#redis-reserved-memory-management-change)
+ [建立 ElastiCache 參數群組](ParameterGroups.Creating.md)
+ [修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)
+ [修改 ElastiCache 叢集](Clusters.Modify.md)
+ [修改複寫群組](Replication.Modify.md)

### reserved-memory 參數
<a name="redis-memory-management-parameters-reserved-memory"></a>

在 2017 年 3 月 16 日之前，所有 ElastiCache for Redis OSS 預留記憶體管理都是使用 參數 完成`reserved-memory`。`reserved-memory` 的預設值為 0。此預設值不會保留 Valkey 或 Redis OSS 額外負荷的記憶體，並允許 Valkey 或 Redis OSS 使用資料消耗節點的所有記憶體。

您必須建立自訂參數群組，才能變更 `reserved-memory`，以便有足夠的記憶體可供備份和容錯移轉使用。在此自訂參數群組中，您可以針對叢集和叢集節點類型上執行的 Valkey 或 Redis OSS 版本`reserved-memory`，將 設定為適合的值。如需詳細資訊，請參閱[您需要多少預留記憶體？](#redis-memory-management-need)

參數`reserved-memory`專屬於 ElastiCache，不屬於一般 Redis OSS 分佈。

下列程序說明如何使用 `reserved-memory`來管理 Valkey 或 Redis OSS 叢集上的記憶體。

**使用 reserved-memory 來保留記憶體**

1. 建立自訂參數群組，指定與您所執行引擎版本相符的參數群組系列，例如指定`redis2.8` 參數群組系列。如需詳細資訊，請參閱[建立 ElastiCache 參數群組](ParameterGroups.Creating.md)。

   ```
   aws elasticache create-cache-parameter-group \
      --cache-parameter-group-name redis6x-m3xl \
      --description "Redis OSS 2.8.x for m3.xlarge node type" \
      --cache-parameter-group-family redis6.x
   ```

1. 計算要為 Valkey 或 Redis OSS 額外負荷預留多少位元組的記憶體。您可以在 [Redis OSS 節點類型特定參數](ParameterGroups.Engine.md#ParameterGroups.Redis.NodeSpecific)中，找到您節點類型的 `maxmemory` 值。

1. 修改自訂參數群組，將參數 `reserved-memory` 設為您在上一個步驟中計算得到的位元組數。下列 AWS CLI 範例假設您正在 2.8.22 之前執行 Redis OSS 版本，且需要保留節點的一半 `maxmemory`。如需詳細資訊，請參閱[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。

   ```
   aws elasticache modify-cache-parameter-group \
      --cache-parameter-group-name redis28-m3xl \
      --parameter-name-values "ParameterName=reserved-memory, ParameterValue=7130316800"
   ```

   您所使用的每個節點類型都需要個別的自訂參數群組，因為每個節點類型都有不同的 `maxmemory` 值。因此，每個節點類型都需要不同的 `reserved-memory` 值。

1. 修改 Redis OSS 叢集或複寫群組以使用您的自訂參數群組。

   下列 CLI 範例會修改叢集 ` my-redis-cluster`，以立即開始使用自訂參數群組 `redis28-m3xl`。如需詳細資訊，請參閱[修改 ElastiCache 叢集](Clusters.Modify.md)。

   ```
   aws elasticache modify-cache-cluster \
      --cache-cluster-id my-redis-cluster \
      --cache-parameter-group-name redis28-m3xl \
      --apply-immediately
   ```

   下列 CLI 範例會修改複寫群組 `my-redis-repl-grp`，以立即開始使用自訂參數群組 `redis28-m3xl`。如需更多詳細資訊，[修改複寫群組](Replication.Modify.md)。

   ```
   aws elasticache modify-replication-group \
      --replication-group-id my-redis-repl-grp \
      --cache-parameter-group-name redis28-m3xl \
      --apply-immediately
   ```

### reserved-memory-percent 參數
<a name="redis-memory-management-parameters-reserved-memory-percent"></a>

Amazon ElastiCache 於 2017 年 3 月 16 日推出 參數，`reserved-memory-percent`並在所有版本的 ElastiCache for Redis OSS 上提供該參數。`reserved-memory-percent` 旨在簡化您所有叢集上的預留記憶體管理工作。其做法是讓您針對每個參數群組系列 (例如 `redis2.8`)，各使用一個參數群組來管理叢集的預留記憶體，而不論節點類型為何。`reserved-memory-percent` 的預設值為 25 (25%)。

參數`reserved-memory-percent`專屬於 ElastiCache，不屬於一般 Redis OSS 分佈。

如果您的叢集使用 r6gd 系列的節點類型，且您的記憶體使用量達到 75%，則會自動觸發資料分層。如需詳細資訊，請參閱[ElastiCache 中的資料分層](data-tiering.md)。

**使用 reserved-memory-percent 來保留記憶體**  
若要使用 `reserved-memory-percent` 來管理 ElastiCache for Redis OSS 叢集上的記憶體，請執行下列其中一項操作：
+ 如果您執行 Redis OSS 2.8.22 或更新版本，請將預設參數群組指派給叢集。預設值 25% 應當足夠。如果為較舊的版本，請依照以下說明的步驟變更該值。
+ 如果您在 2.8.22 之前執行 Redis OSS 版本，您可能需要預留比 `reserved-memory-percent`的預設 25% 更多的記憶體。若要完成此操作，請遵循下列程序：

**變更 reserved-memory-percent 的百分比值**

1. 建立自訂參數群組，指定與您所執行引擎版本相符的參數群組系列，例如指定`redis2.8` 參數群組系列。必須有一個自訂參數群組，因為您無法修改預設參數群組。如需詳細資訊，請參閱[建立 ElastiCache 參數群組](ParameterGroups.Creating.md)。

   ```
   aws elasticache create-cache-parameter-group \
      --cache-parameter-group-name redis28-50 \
      --description "Redis OSS 2.8.x 50% reserved" \
      --cache-parameter-group-family redis2.8
   ```

   由於 `reserved-memory-percent` 是以節點 `maxmemory` 的百分比為單位來預留記憶體，因此您不需要每個節點類型都有一個自訂參數群組。

1. 修改自訂參數群組，將 `reserved-memory-percent` 設為 50 (50%)。如需詳細資訊，請參閱[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。

   ```
   aws elasticache modify-cache-parameter-group \
      --cache-parameter-group-name redis28-50 \
      --parameter-name-values "ParameterName=reserved-memory-percent, ParameterValue=50"
   ```

1. 針對執行早於 2.8.22 的 Redis OSS 版本的任何 Redis OSS 叢集或複寫群組，使用此自訂參數群組。

   下列 CLI 範例會修改 Redis OSS 叢集`my-redis-cluster`，以立即`redis28-50`開始使用自訂參數群組。如需詳細資訊，請參閱[修改 ElastiCache 叢集](Clusters.Modify.md)。

   ```
   aws elasticache modify-cache-cluster \
      --cache-cluster-id my-redis-cluster \
      --cache-parameter-group-name redis28-50 \
      --apply-immediately
   ```

   下列 CLI 範例會修改 Redis OSS 複寫群組`my-redis-repl-grp`，以立即`redis28-50`開始使用自訂參數群組。如需詳細資訊，請參閱[修改複寫群組](Replication.Modify.md)。

   ```
   aws elasticache modify-replication-group \
      --replication-group-id my-redis-repl-grp \
      --cache-parameter-group-name redis28-50 \
      --apply-immediately
   ```

## 指定您的預留記憶體管理參數
<a name="redis-reserved-memory-management-change"></a>

如果您在 2017 年 3 月 16 日已是 ElastiCache 客戶，預設的預留記憶體管理參數會是 `reserved-memory`，其中保留了零 (0) 位元組的記憶體。如果您在 2017 年 3 月 16 日以後成為 ElastiCache 客戶，預設的預留記憶體管理參數會是 `reserved-memory-percent`，其中保留了 25% 的節點記憶體。無論您何時建立 ElastiCache for Redis OSS 叢集或複寫群組，都是如此。不過，您可以使用 AWS CLI 或 ElastiCache API 來變更預留記憶體管理參數。

參數 `reserved-memory` 和 `reserved-memory-percent` 不會同時存在。每個參數群組一律只有一個參數，但絕不能兩者都有。您可以透過修改參數群組，來變更參數群組用於預留記憶體管理的參數。此參數群組必須是自訂參數群組，因為您無法修改預設參數群組。如需詳細資訊，請參閱[建立 ElastiCache 參數群組](ParameterGroups.Creating.md)。

**指定 reserved-memory-percent**  
若要使用 `reserved-memory-percent` 做為您的預留記憶體管理參數，請使用 `modify-cache-parameter-group` 命令修改自訂參數群組。使用 `parameter-name-values` 參數來指定 `reserved-memory-percent` 和其值。

下列 CLI 範例會修改自訂參數群組 `redis32-cluster-on`，以使用 `reserved-memory-percent` 來管理預留記憶體。您必須指派一個值給 `ParameterValue`，參數群組才能使用 `ParameterName` 參數進行預留記憶體管理。如需詳細資訊，請參閱[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。

```
aws elasticache modify-cache-parameter-group \
   --cache-parameter-group-name redis32-cluster-on \
   --parameter-name-values "ParameterName=reserved-memory-percent, ParameterValue=25"
```

**指定 reserved-memory**  
若要使用 `reserved-memory` 做為您的預留記憶體管理參數，請使用 `modify-cache-parameter-group` 命令修改自訂參數群組。使用 `parameter-name-values` 參數來指定 `reserved-memory` 和其值。

下列 CLI 範例會修改自訂參數群組 `redis32-m3xl`，以使用 `reserved-memory` 來管理預留記憶體。您必須指派一個值給 `ParameterValue`，參數群組才能使用 `ParameterName` 參數進行預留記憶體管理。由於引擎版本是 2.8.22 以後的版本，因此我們會將值設為 `3565158400`，這是 `cache.m3.xlarge` 的 25% `maxmemory`。如需詳細資訊，請參閱[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。

```
aws elasticache modify-cache-parameter-group \
   --cache-parameter-group-name redis32-m3xl \
   --parameter-name-values "ParameterName=reserved-memory, ParameterValue=3565158400"
```

# 使用 Valkey 和 Redis OSS 節點型叢集時的最佳實務
<a name="BestPractices.SelfDesigned"></a>

在 Valkey 或 Redis OSS 中使用節點型叢集時，多可用區域使用、有足夠的記憶體、叢集調整大小並將停機時間降至最低，都是需要謹記的實用概念。建議您檢閱並遵循這些最佳實務。

**Topics**
+ [使用異地同步備份將停機時間降至最低](multi-az.md)
+ [確保您有足夠的記憶體來建立 Valkey 或 Redis OSS 快照](BestPractices.BGSAVE.md)
+ [線上叢集大小調整](best-practices-online-resharding.md)
+ [將維護期間的停機時間縮到最短](BestPractices.MinimizeDowntime.md)

# 使用異地同步備份將停機時間降至最低
<a name="multi-az"></a>

在某些情況下，ElastiCache Valkey 或 Redis OSS 可能需要取代主節點；這些包括特定類型的計劃維護，以及不太可能發生的主節點或可用區域故障事件。

此取代會導致叢集出現一些停機情況，但如果啟用異地同步備份，停機時間可降至最低。主節點的角色會自動容錯移轉到其中一個僅供讀取複本。不需要建立和佈建新的主節點，因為 ElastiCache 會透明地處理這個問題。此容錯移轉及複本提升可確保您能在提升完成時立即繼續寫入新的主要節點。

請參閱 [搭配 Valkey 和 Redis OSS 使用異地同步備份，將 ElastiCache 中的停機時間降至最低](AutoFailover.md)，進一步了解異地同步備份並將停機時間降至最低。

# 確保您有足夠的記憶體來建立 Valkey 或 Redis OSS 快照
<a name="BestPractices.BGSAVE"></a>

**Valkey 7.2 和更新版本中的快照和同步，以及 Redis OSS 2.8.22 版和更新版本**  
Valkey 預設支援快照和同步。Redis OSS 2.8.22 推出無分支儲存程序，可讓您將更多記憶體配置給應用程式的使用，而不會在同步和儲存期間增加交換用量。如需詳細資訊，請參閱[同步與備份的實作方式](Replication.Redis.Versions.md)。

**2.8.22 版之前的 Redis OSS 快照和同步**

當您使用 ElastiCache for Redis OSS 時，Redis OSS 會在多種情況下呼叫背景寫入命令：
+ 建立備份的快照時。
+ 和複寫群組中的主要節點同步複本時。
+ 為 Redis OSS 啟用僅附加檔案功能 (AOF) 時。
+ 將複本提升為主節點時 (這會引發主節點/複本節點同步)。

每當 Redis OSS 執行背景寫入程序時，您必須有足夠的可用記憶體來容納程序額外負荷。無法擁有足夠的記憶體會造成程序失敗。因此，在建立 Redis OSS 叢集時，請務必選擇具有足夠記憶體的節點執行個體類型。

## 使用 Valkey 和 Redis OSS 的背景寫入程序和記憶體用量
<a name="BestPractices.BGSAVE.Process"></a>

每當呼叫背景寫入程序時，Valkey 和 Redis OSS 都會放棄其程序 （請記住，這些引擎是單一執行緒）。一個分支會將您的資料保留在 Redis OSS .rdb 快照檔案中的磁碟。另一個分支則會服務所有讀取及寫入操作。若要確保您的快照為 point-in-time 快照，所有資料更新及新增內容都會寫入與資料區域分離的可用記憶體區域。

只要您擁有足夠的可用記憶體，可在資料持久存放至磁碟時用於記錄所有寫入操作，便不會發生記憶體不足的問題。若您的狀況符合以下內容中的任何一項，便可能會發生記憶體不足的問題：
+ 您的應用程式執行許多寫入操作，因此需要大量的可用記憶體來接受新的或更新後的資料。
+ 您只有極少的可用記憶體可用於寫入新的或更新後的資料。
+ 您擁有大型的資料集，需要長時間才能持久存放至磁碟，因此需要大量的寫入操作。

下圖說明執行背景寫入程序時的記憶體使用方式。

![\[圖片：背景寫入期間的記憶體使用方式圖\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCache-bgsaveMemoryUseage.png)


如需執行備份時對效能造成影響的資訊，請參閱[節點型叢集備份的效能影響](backups.md#backups-performance)

如需 Valkey 和 Redis OSS 如何執行快照的詳細資訊，請參閱 https：//[http://valkey.io](http://valkey.io)。

如需區域及可用區域的詳細資訊，請參閱[選擇 ElastiCache 的區域和可用區域](RegionsAndAZs.md)。

## 在執行背景寫入時避免耗盡記憶體
<a name="BestPractices.BGSAVE.memoryFix"></a>

每`BGREWRITEAOF`當呼叫 `BGSAVE`或 等背景寫入程序時，為了防止程序失敗，您必須擁有比程序期間寫入操作所耗用的更多記憶體。最壞的情況是，在背景寫入操作期間，每個記錄都會更新，並將一些新記錄新增至快取。因此，我們建議您`reserved-memory-percent`將 2.8.22 之前的 Redis OSS 版本設為 50 (50%)，或將 Valkey 和所有 Redis OSS 2.8.22 版及更新版本設為 25 (25%)。

`maxmemory` 值指出您可用於資料及操作額外負荷的可用記憶體。因為您無法修改預設參數群組中的 `reserved-memory` 參數，因此您必須為叢集建立自訂參數群組。的預設值`reserved-memory`為 0，這可讓 Redis OSS 使用資料消耗所有*最大記憶體*，可能為其他用途留下太少的記憶體，例如背景寫入程序。針對根據節點執行個體類型的 `maxmemory` 值，請參閱 [Redis OSS 節點類型特定參數](ParameterGroups.Engine.md#ParameterGroups.Redis.NodeSpecific)。

您也可以使用 `reserved-memory` 參數來減少方塊上使用的記憶體量。

如需 ElastiCache 中 Valkey 和 Redis 特定參數的詳細資訊，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)。

如需建立及修改參數群組的資訊，請參閱[建立 ElastiCache 參數群組](ParameterGroups.Creating.md)及[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。

# 線上叢集大小調整
<a name="best-practices-online-resharding"></a>

「重新碎片」**涉及將碎片或節點新增到您的叢集或從叢集移除碎片或節點，並重新分配鍵的空間。多項事物會對重新碎片操作造成影響，例如叢集上的負載、記憶體使用率，以及整體資料大小。為了取得最佳體驗，我們建議您遵循統一工作負載模式分佈的整體叢集最佳實務。此外，我們建議您採取以下步驟。

在初始化重新碎片前，我們建議以下內容：
+ **測試您的應用程式** - 在預備環境中測試應用程式於重新分片期間的行為 (若可能的話)。
+ **提早取得擴展問題的通知** - 重新分片是一項需要大量運算的操作。因此，我們建議在重新分片期間將多核心執行個體的 CPU 使用率保持在 80% 以下，並將單一核心執行個體的 CPU 使用率保持在 50% 以下。在應用程式開始觀察擴展問題之前，監控 ElastiCache for Redis OSS 指標並啟動重新分片。可進行追蹤的有用指標包括 `CPUUtilization`、`NetworkBytesIn`、`NetworkBytesOut`、`CurrConnections`、`NewConnections`、`FreeableMemory`、`SwapUsage` 及 `BytesUsedForCacheItems`。
+ **在向內擴展前確保有足夠的可用記憶體** - 若您要向內擴展，請確保碎片上保留的可用記憶體至少是待移除碎片所使用記憶體的 1.5 倍。
+ **在離峰時段期間起始重新分片程序** - 此做法有助於減少重新分片作業期間的延遲，以及對用戶端造成的輸送量影響。它也有助於更快完成重新碎片，因為有更多的資源可用於重新分配位置。
+ **檢閱用戶端逾時行為** - 有些用戶端可能會在線上叢集調整大小期間產生較高的延遲。使用較高的逾時設定您的用戶端程式庫，有助於解決該情況，即使伺服器上負載較高，系統仍有時間連線。在某些情況下，您可能想要對伺服器開啟大量連線。在這些情況下，請考慮將指數退避新增到重新連線邏輯。這麼做可幫助防止爆量的新連線同時衝擊伺服器。
+ **在每個碎片上載入函數** - 橫向擴展叢集時，ElastiCache 會自動將載入其中一個現有節點 (隨機選擇) 的函數複製到新節點。如果您的叢集具有 Valkey 7.2 及更高版本，或 Redis OSS 7.0 或更高版本，且您的應用程式使用 [函數](https://valkey.io/topics/functions-intro/)，建議您將所有函數載入所有碎片，然後再向外擴展，讓您的叢集不會在不同的碎片上最終產生不同的函數。

在重新碎片之後，請注意以下內容：
+ 若目標碎片上的可用記憶體不足，向內擴展可能會僅部分成功。若發生這種結果，請檢閱可用記憶體，並視需要重試操作。目標碎片上的資料不會遭刪除。
+ 在重新分片操作期間，Lua 指令碼內不支援 `FLUSHALL` 和 `FLUSHDB` 命令。在 Redis OSS 6 之前，如果命令在要遷移的插槽上操作，則不支援該`BRPOPLPUSH`命令。

# 將維護期間的停機時間縮到最短
<a name="BestPractices.MinimizeDowntime"></a>

叢集模式組態在受管或未受管操作期間具有最佳的可用性。我們建議您使用連線到叢集探索端點的叢集模式支援用戶端。若是停用叢集模式，建議您針對所有寫入作業使用主要端點。

針對讀取活動，應用程式也可連線到叢集中的任何節點。與主要端點不同，節點端點會解析至特定端點。若您在叢集中進行變更 (例如新增或刪除複本)，您必須更新您應用程式中的節點端點。這就是為什麼停用叢集模式的原因，我們建議您使用讀取器端點進行讀取活動。

如果叢集中啟用 AutoFailover 功能，主節點可能會變更。因此，應用程式應確認節點的角色並更新所有讀取端點。這麼做可確保不會對主節點造成過重的負載。停用 AutoFailover 功能時，節點的角色不會變更。然而，與啟用 AutoFailover 功能的叢集相比，受管或未受管操作時的停機時間會比較長。

 避免將讀取請求導向到單一讀取複本節點，因為其不可用的情況可能導致讀取中斷。從主要複本進行後援讀取，或確定您至少有兩個讀取複本，以避免在維護期間發生任何讀取中斷。

# Memcached 的快取策略
<a name="Strategies"></a>

在下列主題中，您可以找到填入和維護 Memcached 快取的策略。

您實作用於填入和維護快取的策略，取決於您要快取的資料，以及該資料的存取模式。例如，您可能不會想對遊戲網站前十名排行榜和趨勢新聞報導使用相同的策略。在本節的其餘部分，我們會討論常見的快取維護策略，以及其優點和缺點。

**Topics**
+ [僅供讀取複本](#Strategies.ReadReplicas)
+ [延遲載入](#Strategies.LazyLoading)
+ [全部寫入](#Strategies.WriteThrough)
+ [新增 TTL](#Strategies.WithTTL)
+ [相關主題](#Strategies.SeeAlso)

## 僅供讀取複本
<a name="Strategies.ReadReplicas"></a>

您通常可以透過建立複本並從中讀取，而不是主要快取節點，大幅改善 ElastiCache 無伺服器快取的效能。如需更多資訊，請參閱[使用僅供讀取複本的最佳實務](ReadReplicas.md)。

## 延遲載入
<a name="Strategies.LazyLoading"></a>

如同名稱所隱含的意義，*延遲載入*是一項快取策略，只有在必要時才會將資料載入快取中。它的運作方式如下。

Amazon ElastiCache 是記憶體內鍵值存放區，位於應用程式與其存取的資料存放區 (資料庫) 之間。每當應用程式請求資料，它會先向 ElastiCache 快取進行請求。如果資料存在於快取且是最新的，ElastiCache 會將該資料傳回至您的應用程式。如果資料不存在於快取中或已過期，則應用程式會向資料存放區請求資料。接著資料存放區會將資料傳回至應用程式。。應用程式會將從存放區收到的資料寫入快取中。如此一來，下次收到請求時就能更快速擷取這些資料。

當資料存在於快取中且未過期，就會發生*快取命中*：

1. 應用程式向快取請求資料。

1. 快取將資料傳回給應用程式。

當資料不存在於快取中已過期，就會發生*快取未命中*：

1. 應用程式向快取請求資料。

1. 快取中沒有所請求的資料，因此傳回 `null`。

1. 應用程式請求並收到來自資料庫的資料。

1. 應用程式以新資料更新快取。

### 延遲載入的優點和缺點
<a name="Strategies.LazyLoading.Evaluation"></a>

延遲載入的優點如下：
+ 只會將請求的資料加以快取。

  因為大部分資料永遠不會被請求，延遲載入可避免將快取填滿未請求的資料。
+ 節點故障不會成為應用程式的嚴重問題。

  當節點故障並且由新的空白節點取代時，應用程式會繼續運作，只是會增加延遲。對新節點提出請求時，每次快取未命中都會產生一個資料庫查詢。同時會將資料複本新增至快取中，以便從快取擷取後續的請求。

延遲載入的缺點如下：
+ 快取遺漏會有懲罰。每次快取未命中都會產生 3 趟行程：

  1. 向快取初始請求資料

  1. 查詢資料庫來取得資料

  1. 將資料寫入快取

   這些未命中可能會造成應用程式取得資料的時間出現明顯的延遲。
+ 資料過時。

  如果只在快取未命中時將資料寫入快取，則快取中的資料可能變得過時。當資料庫中的資料變更時，並不會更新快取，因此會產生此結果。若要解決這個問題，您可以使用 [全部寫入](#Strategies.WriteThrough) 和 [新增 TTL](#Strategies.WithTTL) 策略。

### 延遲載入虛擬程式碼範例
<a name="Strategies.LazyLoading.CodeExample"></a>

以下是延遲載入邏輯的虛擬程式碼範例。

```
// *****************************************
// function that returns a customer's record.
// Attempts to retrieve the record from the cache.
// If it is retrieved, the record is returned to the application.
// If the record is not retrieved from the cache, it is
//    retrieved from the database, 
//    added to the cache, and 
//    returned to the application
// *****************************************
get_customer(customer_id)

    customer_record = cache.get(customer_id)
    if (customer_record == null)
    
        customer_record = db.query("SELECT * FROM Customers WHERE id = {0}", customer_id)
        cache.set(customer_id, customer_record)
    
    return customer_record
```

在此範例中，取得資料的應用程式程式碼如下。

```
customer_record = get_customer(12345)
```

## 全部寫入
<a name="Strategies.WriteThrough"></a>

每當有資料寫入資料庫，全部寫入 (write-through) 策略就會在快取中新增或更新資料。

### 全部寫入的優點和缺點
<a name="Strategies.WriteThrough.Evaluation"></a>

全部寫入的優點如下：
+ 快取中的資料絕不會過時。

  快取中的資料每次寫入資料庫時都會進行更新，因此快取中的資料永遠是最新的。
+ 寫入懲罰與讀取懲罰。

  每次寫入都牽涉到兩個來回行程：

  1. 一個寫入快取

  1. 一個寫入資料庫

   這會對程序增加延遲。也就是說，相較於擷取資料，最終使用者一般更能容忍更新資料時的延遲。固有的想法是更新需要的動作較多因此會花費較長時間。

全部寫入的缺點如下：
+ 遺漏資料。

  如果啟動新節點，無論是因為節點故障或水平擴展，都會發生資料未命中。這些資料會繼續處於未命中狀態，直到在資料庫上新增或更新為止。您可以藉由搭配全部寫入實作[延遲載入](#Strategies.LazyLoading)來盡可能減少此情形。
+ 快取流失。

  大部分資料都永遠不會被讀取，導致資源的浪費。您可以藉由[新增存留時間 (TTL) 值](#Strategies.WithTTL)，將浪費的空間降到最少。

### 全部寫入虛擬程式碼範例
<a name="Strategies.WriteThrough.CodeExample"></a>

下列是全部寫入邏輯的虛擬程式碼範例。

```
// *****************************************
// function that saves a customer's record.
// *****************************************
save_customer(customer_id, values)

    customer_record = db.query("UPDATE Customers WHERE id = {0}", customer_id, values)
    cache.set(customer_id, customer_record)
    return success
```

在此範例中，取得資料的應用程式程式碼如下。

```
save_customer(12345,{"address":"123 Main"})
```

## 新增 TTL
<a name="Strategies.WithTTL"></a>

延遲載入允許使用過時資料，但不會因空白節點而失敗。全部寫入可確保資料總是保持最新狀態，但可能因為空白節點而失敗，且可能對快取填入多餘的資料。對每個寫入新增存留時間 (TTL) 值，便可享受每個策略的優點。同時可以大幅避免將快取塞滿多餘的資料。

*存留時間 (TTL)* 是整數值，可指定金鑰過期前的秒數。Valkey 或 Redis OSS 可以為此值指定秒或毫秒。Memcached 需以秒為單位指定此值。應用程式嘗試讀取過期的索引鍵時，系統會視為找不到索引鍵。資料庫會查詢索引鍵並更新快取。這種方法並不能保證值不會過時。不過會確保資料不致於過時太久，且需要偶爾從資料庫重新整理快取中的值。

如需詳細資訊，請參閱 [Valkey 和 Redis OSS 命令](https://valkey.io/commands)或 [Memcached `set`命令](https://www.tutorialspoint.com/memcached/memcached_set_data.htm)。

### TTL 虛擬程式碼
<a name="Strategies.WithTTL.CodeExample"></a>

下列程式碼是使用 TTL 的全部寫入邏輯的虛擬程式碼範例。

```
// *****************************************
// function that saves a customer's record.
// The TTL value of 300 means that the record expires
//    300 seconds (5 minutes) after the set command 
//    and future reads will have to query the database.
// *****************************************
save_customer(customer_id, values)

    customer_record = db.query("UPDATE Customers WHERE id = {0}", customer_id, values)
    cache.set(customer_id, customer_record, 300)

    return success
```

下列程式碼是使用 TTL 的延遲載入邏輯的虛擬程式碼範例。

```
// *****************************************
// function that returns a customer's record.
// Attempts to retrieve the record from the cache.
// If it is retrieved, the record is returned to the application.
// If the record is not retrieved from the cache, it is 
//    retrieved from the database, 
//    added to the cache, and 
//    returned to the application.
// The TTL value of 300 means that the record expires
//    300 seconds (5 minutes) after the set command 
//    and subsequent reads will have to query the database.
// *****************************************
get_customer(customer_id)

    customer_record = cache.get(customer_id)
    
    if (customer_record != null)
        if (customer_record.TTL < 300)
            return customer_record        // return the record and exit function
            
    // do this only if the record did not exist in the cache OR
    //    the TTL was >= 300, i.e., the record in the cache had expired.
    customer_record = db.query("SELECT * FROM Customers WHERE id = {0}", customer_id)
    cache.set(customer_id, customer_record, 300)  // update the cache
    return customer_record                // return the newly retrieved record and exit function
```

在此範例中，取得資料的應用程式程式碼如下。

```
save_customer(12345,{"address":"123 Main"})
```

```
customer_record = get_customer(12345)
```

## 相關主題
<a name="Strategies.SeeAlso"></a>
+ [記憶體內資料存放區](elasticache-use-cases.md#elasticache-use-cases-data-store)
+ [選擇引擎和版本](SelectEngine.md)
+ [擴展 ElastiCache](Scaling.md)

# 在 ElastiCache 中管理您的節點型叢集
<a name="manage-self-designed-cluster"></a>

ElastiCache 提供兩種部署選項：無伺服器快取和節點型叢集。每個 都有自己的功能和需求。

本節包含的主題可協助您管理以節點為基礎的叢集。

**注意**  
這些主題不適用 ElastiCache Serverless。

**Topics**
+ [Auto Scaling Valkey 和 Redis OSS 叢集](AutoScaling.md)
+ [修改叢集模式](modify-cluster-mode.md)
+ [使用全域資料存放區跨AWS區域複寫](Redis-Global-Datastore.md)
+ [使用複寫群組的高可用性](Replication.md)
+ [管理 ElastiCache 叢集維護](maintenance-window.md)
+ [使用 ElastiCache 參數群組設定引擎參數](ParameterGroups.md)

# Auto Scaling Valkey 和 Redis OSS 叢集
<a name="AutoScaling"></a>

## 先決條件
<a name="AutoScaling-Prerequisites"></a>

ElastiCache Auto Scaling 僅限於下列項目：
+ 執行 Valkey 7.2 以上版本或執行 Redis OSS 6.0 以上版本的 Valkey 或 Redis OSS （啟用叢集模式） 叢集
+ 執行 Valkey 7.2 以上版本或執行 Redis OSS 7.0.7 以上版本的資料分層 （啟用叢集模式） 叢集 
+ 執行個體大小 - Large、XLarge、2XLarge
+ 執行個體類型系列 - R7g、R6g、R6gd、R5、M7g、M6g、M5、C7gn
+ 全域資料存放區、Outpost 或本機區域中執行的叢集不支援 ElastiCache 中的 Auto Scaling。

## 使用 ElastiCache Auto Scaling 搭配 Valkey 或 Redis OSS 自動管理容量
<a name="AutoScaling-Managing"></a>

使用 Valkey 或 Redis OSS 進行 ElastiCache 自動擴展是自動增加或減少 ElastiCache 服務中所需碎片或複本的能力。ElastiCache 利用 Application Auto Scaling 服務來提供此功能。如需詳細資訊，請參閱 [Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/what-is-application-auto-scaling.html)。若要使用自動調整規模功能，您可以定義和套用規模調整政策，這類政策會使用 CloudWatch 指標和您指派的目標值。ElastiCache 自動擴展使用 政策來增加或減少執行個體數量，以回應實際工作負載。

您可以使用 根據預先定義的指標AWS 管理主控台來套用擴展政策。`predefined metric` 是在列舉中定義，如此您就可以在程式碼中依名稱指定指標，或是在AWS 管理主控台中使用指標。使用AWS 管理主控台時無法選擇自訂指標。或者，您可以使用AWS CLI或 Application Auto Scaling API，根據預先定義的或自訂指標來套用擴展政策。

ElastiCache for Valkey 和 Redis OSS 支援下列維度的擴展：
+ **碎片** - 自動新增/移除叢集中的碎片，類似於手動線上重新分片。在此情況下，ElastiCache 自動擴展會代表您觸發擴展。
+ **複本** - 自動新增/移除叢集中的複本，類似於手動增加/減少複本作業。適用於 Valkey 和 Redis OSS 的 ElastiCache 自動擴展會在叢集中的所有碎片中均勻地新增/移除複本。

ElastiCache for Valkey 和 Redis OSS 支援下列類型的自動擴展政策：
+ [目標追蹤擴展政策](AutoScaling-Scaling-Policies-Target.md) - 根據特定指標的目標值，增加或減少服務執行的碎片/複本數。這與您運用電熱器維持家中溫度的方式很類似。您只需選取溫度，電熱器會自行執行其餘操作。
+ [ 應用程式的排程擴展。 ](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html)– ElastiCache for Valkey 和 Redis OSS 自動擴展可增加或減少服務根據日期和時間執行的碎片/複本數量。

![\[ElastiCache for Valkey 和 Redis OSS 的自動擴展影像\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/Auto-scaling.png)


下列步驟摘要說明 ElastiCache for Valkey 和 Redis OSS 自動擴展程序，如上圖所示：

1. 您可以為複寫群組建立 ElastiCache 自動擴展政策。

1. ElastiCache 自動擴展會代表您建立一對 CloudWatch 警示。每對指標皆代表指標的上限與下限。當叢集的實際使用率持續一段時間偏離您的目標使用率時，就會觸發這些 CloudWatch 警示。您可以在主控台中檢視警示。

1. 如果設定的指標值在特定時間長度內超過您的目標使用率 （或低於目標），CloudWatch 會觸發警示，叫用自動擴展來評估您的擴展政策。

1. ElastiCache 自動擴展會發出修改請求來調整叢集容量。

1. ElastiCache 會處理修改請求，動態增加 （或減少） 叢集碎片/複本容量，使其接近您的目標使用率。

 若要了解 ElastiCache Auto Scaling 的運作方式，假設您有名為 的叢集`UsersCluster`。針對 `UsersCluster` 監控 CloudWatch 指標，可判斷叢集在流量達到峰值時需要的最大碎片數，以及流量達到最低點時叢集需要的最小碎片數。您也可以為 `UsersCluster` 叢集決定 CPU 使用率的目標值。ElastiCache Auto Scaling 使用其目標追蹤演算法，以確保 的佈建碎片`UsersCluster`會視需要調整，讓使用率保持在或接近目標值。

**注意**  
規模調整程序可能需要大量時間，且需要額外的叢集資源用於重新平衡碎片。ElastiCache Auto Scaling 只有在實際工作負載持續幾分鐘保持升高 （或降低） 時，才會修改資源設定。自動擴展目標追蹤演算法會長期嘗試將目標使用率保持在或接近您選擇的值。

# Auto Scaling 政策
<a name="AutoScaling-Policies"></a>

擴展政策具有下列元件：
+ 目標指標 – ElastiCache for Valkey 和 Redis OSS Auto Scaling 用來判斷擴展時間和擴展量的 CloudWatch 指標。
+ 最大和最小容量 - 進行擴展的碎片或複本數量下限與上限。
**重要**  
建立 Auto Scaling 政策時，如果目前容量高於設定的容量上限，政策建立期間會縮縮減至 MaxCapacity 以內。同樣地，如果目前容量低於設定的容量下限，則會擴充至 MinCapacity。
+ 冷卻時間 - 完成規模縮減或規模擴展活動後，可以開始進行另一個水平擴展活動之前需等待的時間長度 (秒)。
+ 服務連結角色 – 連結至特定 AWS 服務的 AWS Identity and Access Management (IAM) 角色。服務連結角色包含服務代表您呼叫其他 AWS 服務所需的所有許可。ElastiCache Auto Scaling 會自動`AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG`為您產生此角色 。
+ 啟用或停用規模縮減活動 - 為政策啟用或停用規模縮減活動的功能。

**Topics**
+ [Auto Scaling 的目標指標](#AutoScaling-TargetMetric)
+ [容量下限和上限](#AutoScaling-MinMax)
+ [冷卻時間](#AutoScaling-Cooldown)
+ [啟用或停用規模縮減活動](#AutoScaling-enable-disable-scale-in)

## Auto Scaling 的目標指標
<a name="AutoScaling-TargetMetric"></a>

在這種類型的政策中，會在目標追蹤規模調整政策的設定中指定預先定義的或自訂的指標以及指標的目標值。ElastiCache for Valkey 和 Redis OSS Auto Scaling 會建立和管理觸發擴展政策的 CloudWatch 警示，並根據指標和目標值計算擴展調整。規模調整政策會視需要新增或移除碎片/複本，讓指標保持在等於或接近指定目標值。除了讓指標保持在接近目標值之外，目標追蹤規模調整政策也會配合因為變更工作負載所造成的指標波動而進行調整。這樣的政策也能將資料庫叢集可用碎片/複本數量的快速波動減到最低。

例如，想想看當規模調整政策使用預先定義的平均 `ElastiCachePrimaryEngineCPUUtilization` 指標時的情況。這個政策可以讓 CPU 使用率維持在 (或接近) 指定的使用率百分比，像是百分之 70。

**注意**  
在每個叢集上，您只能為每一個目標指標建立一個 Auto Scaling 政策。

## 容量下限和上限
<a name="AutoScaling-MinMax"></a>

**碎片**

您可以指定 ElastiCache for Valkey 和 Redis OSS 自動擴展可擴展的碎片數量上限。此值必須小於或等於 250，而下限為 1。您也可以指定要由自動擴展管理的碎片數量下限。此值下限為 1，而且必須小於或等於指定的碎片數量上限值 250。

**複本**

您可以指定 ElastiCache for Valkey 和 Redis OSS 自動擴展所管理的複本數量上限。此值必須等於或大於 5。您也可以指定要由自動擴展管理的複本數量下限。此值下限為 1，而且必須小於或等於指定的複本數量上限值 5。

若要判斷一般流量所需的碎片/複本數量上限和下限，請使用預期的傳輸流量來傳送到您的模型，以測試您的 Auto Scaling 組態設定。

**注意**  
ElastiCache 自動擴展政策會增加叢集容量，直到達到您定義的大小上限，或直到套用服務限制為止。若要請求提高配額，請參閱 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)，並選擇配額類型 **Nodes per cluster per instance type (每執行個體類型每叢集的節點數)**。

**重要**  
在沒有流量時縮減規模。如果變體的流量變成零，ElastiCache 會自動縮減至指定的執行個體數量下限。

## 冷卻時間
<a name="AutoScaling-Cooldown"></a>

藉由新增會影響調整叢集規模的冷卻時間，您可以調整目標追蹤擴展政策的回應能力。冷卻時間會封鎖後續的擴展或縮減請求，直到冷卻時間到期。這可減緩 ElastiCache for Valkey 和 Redis OSS 叢集中縮減請求的碎片/複本刪除速度，以及縮減請求的碎片/複本建立速度。您可以指定下列其中一種冷卻時間：
+ 縮減活動可減少叢集中的碎片/複本數量。規模縮減冷卻時間會指定在規模縮減動作完成之後，另一個規模縮減動作可以再開始執行之前的等待時間長度 (秒)。
+ 橫向擴展活動會增加叢集中的碎片/複本數量。橫向擴展冷卻時間會指定在橫向擴展動作完成之後，可以再開始執行另一個橫向擴展動作之前的等待時間長度 (秒)。

若未指定規模縮減或水平擴展的冷卻時間，則水平擴展的預設值是 600 秒，規模縮減為 900 秒。

## 啟用或停用規模縮減活動
<a name="AutoScaling-enable-disable-scale-in"></a>

您可以啟用或停用政策的規模縮減動作。啟用規模縮減活動可讓規模調整政策刪除碎片/複本。規模縮減動作啟用時，規模調整政策中的規模縮減冷卻時間會套用至規模縮減動作。停用規模縮減活動可防止規模調整政策刪除碎片/複本。

**注意**  
橫向擴展活動一律會啟用，以便擴展政策可以視需要建立 ElastiCache 碎片或複本。

## Auto Scaling 所需的 IAM 許可
<a name="AutoScaling-IAM-permissions"></a>

ElastiCache for Valkey 和 Redis OSS Auto Scaling 可透過結合 ElastiCache、CloudWatch 和 Application Auto Scaling APIs 來實現。使用 ElastiCache 建立和更新叢集、使用 CloudWatch 建立警示，以及使用 Application Auto Scaling 建立擴展政策。除了建立和更新叢集的標準 IAM 許可之外，存取 ElastiCache Auto Scaling 設定的 IAM 使用者必須具有支援動態擴展之服務的適當許可。在此最新的政策中，我們新增了對 Memcached 垂直擴展的支援，以及 動作 `elasticache:ModifyCacheCluster`。IAM 使用者必須具備使用以下範例政策中各項動作的許可：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "application-autoscaling:*",
                "elasticache:DescribeReplicationGroups",
                "elasticache:ModifyReplicationGroupShardConfiguration",
                "elasticache:IncreaseReplicaCount",
                "elasticache:DecreaseReplicaCount",
                "elasticache:DescribeCacheClusters",
                "elasticache:DescribeCacheParameters",
                "cloudwatch:DeleteAlarms",
                "cloudwatch:DescribeAlarmHistory",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DescribeAlarmsForMetric",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DisableAlarmActions",
                "cloudwatch:EnableAlarmActions",
                "iam:CreateServiceLinkedRole",
                "sns:CreateTopic",
                "sns:Subscribe",
                "sns:Get*",
                "sns:List*"
            ],
            "Resource": "arn:aws:iam::123456789012:role/autoscaling-roles-for-cluster"
        }
    ]
}
```

------

## 服務連結角色
<a name="AutoScaling-SLR"></a>

ElastiCache for Valkey 和 Redis OSS 自動擴展服務也需要描述叢集和 CloudWatch 警示的許可，以及代表您修改 ElastiCache 目標容量的許可。如果您為叢集啟用 Auto Scaling，它會建立名為 的服務連結角色`AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG`。此服務連結角色會授予 ElastiCache 自動擴展許可，以描述政策的警示、監控機群目前的容量，以及修改機群的容量。服務連結角色是 ElastiCache 自動擴展的預設角色。如需詳細資訊，請參閱《Application Auto Scaling 使用者指南》中的 [ ElastiCache for Redis OSS 自動擴展的服務連結角色](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)。

## Auto Scaling 最佳實務
<a name="AutoScaling-best-practices"></a>

註冊 Auto Scaling 前，我們建議以下事項：

1. **只使用一個追蹤指標** – 識別您的叢集是否有 CPU 或資料密集型工作負載，並使用對應的預先定義指標來定義規模調整政策。
   + 引擎 CPU：`ElastiCachePrimaryEngineCPUUtilization` (碎片維度) 或 `ElastiCacheReplicaEngineCPUUtilization` (複本維度)
   + 資料庫使用量：`ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage` 此擴展政策在叢集上將 maxmemory-policy 設為 noeviction 時效果最佳。

   建議您避免在叢集上的每個維度使用多個政策。如果任何目標追蹤政策已準備好向外擴展，ElastiCache for Valkey 和 Redis OSS Auto 擴展將向外擴展可擴展目標，但只有在所有目標追蹤政策 （啟用向內擴展部分） 都準備好向內擴展時，才會向內擴展。如果多個政策指示可擴展的目標在同一時間進行水平擴展或縮減，則會根據針對水平擴展和縮減提供最大容量的政策進行擴展。

1. **用於目標追蹤的自訂指標** – 使用自訂指標進行目標追蹤時需小心謹慎，因為 Auto Scaling 最適合用於根據為策略所選指標的根據為策略所選指標的變更，依比例擴展/縮減規模。如果這些指標未與用於政策建立的擴展操作比例地變化，則可能會導致持續的橫向擴展或縮減操作，這可能會影響可用性或成本。

    對於資料分層叢集 (r6gd 系列執行個體類型)，請避免使用記憶體指標進行擴展。

1. **排程規模調整** - 如果您發現工作負載具確定性 (會在特定時間達到高/低負載)，建議您使用排程規模調整功能，根據需求設定目標容量。目標追蹤可在需要更多資源時橫向擴展，並在需要較少資源時縮減，最適合用於讓非確定性工作負載和叢集以所需的目標指標運作。

1. **停用縮減** - 針對目標追蹤自動調整規模的功能最適合用於工作負載逐漸增加/減少的叢集，因為指標的峰值/低谷可能會觸發連續的橫向擴展/縮減振盪。若要避免這種振盪，可以從停用縮減功能開始，您之後可以隨時根據需求手動縮減。

1. **測試您的應用程式** - 建議您使用預估的最小/最大工作負載來測試應用程式，以確定叢集所需的絕對碎片/複本數下限與上限，同時建立規模調整政策以避免可用性問題。自動調整規模可以橫向擴展至為目標設定的最大值，也可縮減至最小值。

1. **定義目標值** - 您可以針對四週期間的叢集使用率分析對應 CloudWatch 指標，以判斷目標閾值。如果您仍不確定要選擇哪個值，建議從支援的最小預先定義指標值開始。

1. 針對目標追蹤的自動調整規模功能最適合用於在碎片/複本維度間均勻分配工作負載的叢集。不均勻分配可能會導致：
   + 由於幾個熱碎片/複本上出現工作負載峰值/低谷，因此在沒有需要時進行擴展。
   + 即使具有熱碎片/複本，但由於整體平均接近目標，因此有需要時不進行縮放。

**注意**  
橫向擴展叢集時，ElastiCache 會自動將載入其中一個現有節點 (隨機選取) 的函數複製到新節點。如果您的叢集具有 Valkey 或 Redis OSS 7.0 或更新版本，且您的應用程式使用 [函數](https://valkey.io/topics/functions-intro/)，建議您將所有函數載入所有碎片，然後再向外擴展，讓您的叢集不會在不同的碎片上最終產生不同的函數。

註冊 Auto Scaling 後，請注意以下事項：
+ 支援自動調整規模的組態具有限制，因此建議您不要變更已針對自動調整規模註冊之複寫群組的組態。範例如下：
  + 手動將執行個體類型修改為不支援的類型。
  + 為複寫群組與全域資料存放區建立關聯。
  + 變更 `ReservedMemoryPercent` 參數。
  + 手動將碎片/複本增加/減少至超出政策建立期間設定的容量上限/下限。

# 搭配碎片使用 Auto Scaling
<a name="AutoScaling-Using-Shards"></a>

透過 ElastiCache 的 AutoScaling，您可以將追蹤和排程政策與 Valkey 或 Redis OSS 引擎搭配使用。

以下提供目標追蹤和排程政策的詳細資訊，以及如何使用 AWS 管理主控台 AWS CLI 和 APIs 套用這些政策。

**Topics**
+ [目標追蹤擴展政策](AutoScaling-Scaling-Policies-Target.md)
+ [新增擴展原則](AutoScaling-Scaling-Adding-Policy-Shards.md)
+ [註冊可擴展的目標](AutoScaling-Scaling-Registering-Policy-CLI.md)
+ [定義擴展政策](AutoScaling-Scaling-Defining-Policy-API.md)
+ [停用規模縮減活動](AutoScaling-Scaling-Disabling-Scale-in.md)
+ [套用擴展原則](AutoScaling-Scaling-Applying-a-Scaling-Policy.md)
+ [編輯擴展原則](AutoScaling-Scaling-Editing-a-Scaling-Policy.md)
+ [刪除擴展原則](AutoScaling-Scaling-Deleting-a-Scaling-Policy.md)
+ [CloudFormation 使用 Auto Scaling 政策](AutoScaling-with-Cloudformation-Shards.md)
+ [排程擴展](AutoScaling-with-Scheduled-Scaling-Shards.md)

# 目標追蹤擴展政策
<a name="AutoScaling-Scaling-Policies-Target"></a>

使用目標追蹤擴展政策，您可以選取指標及設定目標值。ElastiCache for Valkey 和 Redis OSS Auto Scaling 會建立和管理 CloudWatch 警示，以觸發擴展政策，並根據指標和目標值計算擴展調整。規模調整政策會視需要新增或移除複本，讓指標保持在等於或接近指定目標值。除了讓指標保持在接近目標值之外，目標追蹤規模調整政策也會配合指標中，因為負載模式波動所造成的波動調整，並將機群容量中的快速波動降到最低。

例如，想想看當規模調整政策使用預先定義的平均 `ElastiCachePrimaryEngineCPUUtilization` 指標搭配所設定目標值時的情況。此政策可以讓 CPU 使用率維持在等於或接近指定的目標值。

## 預先定義的指標
<a name="AutoScaling-Scaling-Criteria-predfined-metrics"></a>

預先定義的指標是參照指定 CloudWatch 指標之特定名稱、維度和統計資料 (`average`) 的結構。Auto Scaling 政策會為您的叢集定義下列其中一項預先定義的指標：


****  

| 預先定義的指標名稱 | CloudWatch 指標名稱 | CloudWatch 指標維度 | 不合格執行個體類型  | 
| --- | --- | --- | --- | 
| ElastiCachePrimaryEngineCPUUtilization |  `EngineCPUUtilization`  |  ReplicationGroupId, Role = Primary  | 無 | 
| ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage |  `DatabaseCapacityUsageCountedForEvictPercentage`  |  Valkey 或 Redis OSS 複寫群組指標  | 無 | 
| ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage |  `DatabaseMemoryUsageCountedForEvictPercentage`  |  Valkey 或 Redis OSS 複寫群組指標  | R6gd | 

無法使用資料層級執行個體類型 `ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage`，因為這些執行個體類型會將資料儲存在記憶體和 SSD 中。資料層級執行個體的預期使用案例是擁有 100% 的記憶體使用量，並視需要填滿 SSD。

## 碎片的 Auto Scaling 條件
<a name="AutoScaling-Scaling-Criteria"></a>

當服務偵測到預先定義指標等於或大於目標設定，便會自動增加碎片容量。ElastiCache for Valkey 和 Redis OSS 會將叢集碎片擴展為等於兩個數字中較大者的計數：與目標的百分比變化和目前碎片的 20%。對於縮減，除非整體指標值低於已定義目標的 75%，否則 ElastiCache 不會自動縮減。

以下提供水平擴展的範例，如果你有 50 個碎片，
+ 如果您的目標違規 30%，ElastiCache 會向外擴展 30%，導致每個叢集產生 65 個碎片。
+ 如果您的目標違規 10%，ElastiCache 預設會向外擴展 最低 20%，因此每個叢集會產生 60 個碎片。

對於縮減範例，如果您已選取目標值 60%，ElastiCache 不會自動縮減，直到指標小於或等於 45% （低於目標 60% 的 25%)。

## Auto Scaling 考量事項
<a name="AutoScaling-Scaling-Considerations"></a>

請謹記以下幾點考量：
+ 目標追蹤擴展政策假設在指定的指標超過目標值時，應執行向外擴展。您無法使用目標追蹤擴展政策在指定的指標低於目標值時執行向外擴展。ElastiCache for Valkey 和 Redis OSS 會將碎片擴展為叢集中現有碎片目標的至少 20% 偏差。
+ 所指定指標的資料不足時，目標追蹤擴展政策不會執行擴展。政策不會執行縮減，因為縮減不會將資料不足解釋為低使用率。
+ 您可能會看到目標值與實際指標資料點之間有些差距。這是因為當 ElastiCache Auto Scaling 決定要新增或移除多少容量時，一律會四捨五入或捨棄，以保守的方式運作。這樣可防止新增不足的容量，或移除過多的容量。
+ 為了確保應用程式可用性，服務可以根據指標依比例快速水平擴展，但需以更保守的方式縮減規模。
+ 您可以為 ElastiCache for Valkey 和 Redis OSS 叢集設定多個目標追蹤擴展政策，前提是每個叢集都使用不同的指標。ElastiCache Auto Scaling 的目的是一律優先考慮可用性，因此其行為會根據目標追蹤政策是否已準備好向外擴展或向內擴展而有所不同。如果任何目標追蹤政策已準備好向外擴展，它就會將服務向外擴展，但只有在所有目標追蹤政策 (已啟用向內擴展部分) 都已準備好要向內擴展時才會向內擴展。
+ 請勿編輯或刪除 ElastiCache Auto Scaling 針對目標追蹤擴展政策管理的 CloudWatch 警示。當您刪除擴展政策時，ElastiCache Auto Scaling 會自動刪除警示。
+ ElastiCache Auto Scaling 不會阻止您手動修改叢集碎片。這些手動調整不會影響附加至調整規模政策的任何現有 CloudWatch 警示，但會影響可能觸發這些 CloudWatch 警示的指標。
+ 這些由 Auto Scaling 管理的 CloudWatch 警示，是根據叢集中所有碎片的 AVG 指標所定義的。因此，使用熱碎片可能會導致以下任一情況：
  + 由於幾個熱碎片上的負載觸發了 CloudWatch 警示，因此在沒有需要時進行擴展
  + 由於跨影響警示的所有碎片之彙總 AVG 沒有超出限制，因此在需要時不進行擴展。
+ 每個叢集節點的 ElastiCache 預設限制仍然適用。因此，當選擇使用 Auto Scaling 且您希望節點數上限超過預設配額時，請至 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)請求增加配額，並選擇配額類型 **Nodes per cluster per instance type (每執行個體類型每叢集的節點數)**。
+ 確保 VPC 中有足夠的 ENI (彈性網路介面) 可用，進行水平擴展時會需要用到。如需詳細資訊，請參閱[彈性網路介面](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ElasticNetworkInterfaces.html)。
+ 如果 EC2 沒有足夠的可用容量，ElastiCache Auto Scaling 將無法擴展，而且會在容量可用時延遲。
+ 在縮減期間，ElastiCache for Redis OSS Auto Scaling 不會移除項目大小大於序列化後 256 MB 的槽碎片。
+ 進行規模縮減期間，如果產生的碎片組態上的可用記憶體不足，就不會移除碎片。

# 新增擴展原則
<a name="AutoScaling-Scaling-Adding-Policy-Shards"></a>

您可以使用 新增擴展政策 AWS 管理主控台。

**將 Auto Scaling 政策新增至 ElastiCache for Valkey 和 Redis OSS 叢集**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)：// 開啟 Amazon ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**。

1. 選擇要新增政策至其中的叢集 (請選擇叢集名稱而非其左側的按鈕)。

1. 選擇 **Auto Scaling policies (Auto Scaling 政策)** 索引標籤。

1. 選擇 **Dynamic scaling** (動態擴展)。

1. 在 **Policy Name (政策名稱)** 輸入政策名稱。

1. 在 **Scalable Dimension (可擴展的維度)** 選擇 **shards (碎片)**。

1. 目標指標請選擇下列其中一個：
   + **Primary CPU Utilization (主要 CPU 使用率)**，用於根據平均 CPU 使用率建立政策。
   + **Memory (記憶體)**，用於根據平均資料庫記憶體建立政策。
   + 根據平均資料庫容量使用情況建立政策的**容量**。容量指標包括資料層級執行個體的記憶體和 SSD 使用率，以及所有其他執行個體類型的記憶體使用率。

1. 針對目標值，選擇大於或等於 35 且小於或等於 70 的值。Auto Scaling 將在整個 ElastiCache 碎片中為所選目標指標保留此值：
   + **主要 CPU 使用率**：維護主節點上 `EngineCPUUtilization` 指標結果的目標值。
   + **記憶體**：維護 `DatabaseMemoryUsageCountedForEvictPercentage` 指標結果的目標值 
   + 維護 `DatabaseCapacityUsageCountedForEvictPercentage` 指標結果目標值的**容量**，

   系統會新增或移除叢集碎片，讓指標接近指定的值。

1. (選用) 主控台不支援規模縮減或水平擴展冷卻時間。使用 AWS CLI 修改冷卻時間值。

1. 針對**最小容量**，輸入 ElastiCache Auto Scaling 政策需要維護的碎片數量下限。

1. 針對**容量上限**，輸入 ElastiCache Auto Scaling 政策需要維護的碎片數量上限。此值必須等於或大於 250。

1. 選擇**建立**。

# 註冊可擴展的目標
<a name="AutoScaling-Scaling-Registering-Policy-CLI"></a>

您必須先向 ElastiCache Auto Scaling註冊叢集，才能搭配 ElastiCache for Valkey 和 Redis OSS 叢集使用 Auto Scaling。這是為了定義要套用到叢集的擴展維度和限制。ElastiCache 自動擴展會沿著`elasticache:replication-group:NodeGroups`可擴展維度動態擴展叢集，這代表叢集碎片的數量。

 **使用 AWS CLI** 

若要註冊 ElastiCache for Valkey 和 Redis OSS 叢集，請使用 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令搭配下列參數：
+ `--service-namespace` – 將此值設定為 `elasticache`
+ `--resource-id` – 叢集的資源識別符。對於此參數，資源類型為 `ReplicationGroup` ，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ `--scalable-dimension` – 將此值設定為 `elasticache:replication-group:NodeGroups`。
+ `--max-capacity ` – 由 ElastiCache 自動擴展管理的碎片數目上限。如需了解有關 `--min-capacity`、`--max-capacity` 以及叢集中碎片數目之間的關係資訊，請參閱「[容量下限和上限](AutoScaling-Policies.md#AutoScaling-MinMax)」。
+ `--min-capacity ` – 由 ElastiCache 自動擴展管理的碎片數量下限。如需了解有關 `--min-capacity`、`--max-capacity` 以及叢集中碎片數目之間的關係資訊，請參閱「[容量下限和上限](AutoScaling-Policies.md#AutoScaling-MinMax)」。

**Example**  
 在下列範例中，您會註冊名為 的 ElastiCache 叢集`myscalablecluster`。註冊中表明應該動態擴展叢集，使其具有 1 到 10 個碎片。  
若為 Linux、macOS 或 Unix：  

```
aws application-autoscaling register-scalable-target \
    --service-namespace elasticache \
    --resource-id replication-group/myscalablecluster \
    --scalable-dimension elasticache:replication-group:NodeGroups \
    --min-capacity 1 \
    --max-capacity 10 \
```
針對 Windows：  

```
aws application-autoscaling register-scalable-target ^
    --service-namespace elasticache ^
    --resource-id replication-group/myscalablecluster ^
    --scalable-dimension elasticache:replication-group:NodeGroups ^
    --min-capacity 1 ^
    --max-capacity 10 ^
```

**使用 API**

若要註冊 ElastiCache 叢集，請使用 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令搭配下列參數：
+ ServiceNamespace - 將此值設為 elasticache。
+ ResourceID - ElastiCache 叢集的資源識別碼。對於此參數，資源類型為 ReplicationGroup，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ ScalableDimension - 將此值設為 `elasticache:replication-group:NodeGroups`。
+ MinCapacity：由 ElastiCache 自動擴展管理的碎片數量下限。如需了解 --min-capacity、--max-capacity 以及叢集中複本數之間的關係，請參閱「[容量下限和上限](AutoScaling-Policies.md#AutoScaling-MinMax)」。
+ MaxCapacity：由 ElastiCache 自動擴展管理的碎片數量上限。如需了解 --min-capacity、--max-capacity 以及叢集中複本數之間的關係，請參閱「[容量下限和上限](AutoScaling-Policies.md#AutoScaling-MinMax)」。

**Example**  
在下列範例中，您會`myscalablecluster`使用 Application Auto Scaling API 註冊名為 的 ElastiCache 叢集。此註冊中表明應該動態擴展叢集，使其具有 1 到 5 個複本。  

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:NodeGroups",
    "MinCapacity": 1,
    "MaxCapacity": 5
}
```

# 定義擴展政策
<a name="AutoScaling-Scaling-Defining-Policy-API"></a>

目標追踪規模調整政策組態由 JSON 區塊表示，其中定義了指標和目標值。您可以將規模調整政策的組態設定，儲存為文字檔案中的 JSON 區塊。叫用 AWS CLI 或 Application Auto Scaling API 時，您可以使用該文字檔案。如需政策組態語法的詳細資訊，請參閱「Application Auto Scaling API 參考」中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

您可使用下列選項來定義目標追蹤擴展政策的組態：

**Topics**
+ [使用預先定義的指標](#AutoScaling-Scaling-Predefined-Metric)
+ [使用自訂的指標](#AutoScaling-Scaling-Custom-Metric)
+ [使用冷卻時間](#AutoScaling-Scaling-Cooldown-periods)

## 使用預先定義的指標
<a name="AutoScaling-Scaling-Predefined-Metric"></a>

透過使用預先定義的指標，您可以快速定義 ElastiCache for Valkey 和 Redis OSS 叢集的目標追蹤擴展政策，該叢集可與 ElastiCache Auto Scaling 中的目標追蹤搭配使用。

目前，ElastiCache 在 NodeGroup Auto Scaling 中支援下列預先定義的指標：
+ **ElastiCachePrimaryEngineCPUUtilization** – 叢集中所有主節點 CloudWatch 中`EngineCPUUtilization`指標的平均值。
+ **ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage** – 叢集中所有主節點 CloudWatch 中`DatabaseMemoryUsageCountedForEvictPercentage`指標的平均值。
+ **ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage** – CloudWatch 中叢集中所有主節點的`ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage`指標平均值。

如需 `EngineCPUUtilization`、`DatabaseMemoryUsageCountedForEvictPercentage` 和 `DatabaseCapacityUsageCountedForEvictPercentage` 指標的詳細資訊，請參閱 [使用 CloudWatch 指標監控用量](CacheMetrics.md)。若要在您的規模調整政策中使用預先定義的指標，請為規模調整政策建立目標追蹤組態設定。此組態設定必須加入用於預先定義指標的 `PredefinedMetricSpecification`，以及用於該指標目標值的 TargetValue。

**Example**  
下列範例說明 ElastiCache for Valkey 和 Redis OSS 叢集目標追蹤擴展的典型政策組態。在此組態中，`ElastiCachePrimaryEngineCPUUtilization`預先定義的指標會根據叢集中所有主節點的平均 CPU 使用率 40% 來調整叢集。  

```
{
    "TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
    }
}
```

## 使用自訂的指標
<a name="AutoScaling-Scaling-Custom-Metric"></a>

 使用自訂的指標，您可以定義目標追蹤規模調整政策來滿足您的自訂需求。您可以根據隨擴展比例變更的任何 ElastiCache 指標來定義自訂指標。並非所有 ElastiCache 指標都適用於目標追蹤。指標必須是有效的使用率指標，而且能夠表示執行個體的忙碌程度。指標的值必須根據叢集中碎片的數量依比例增加或減少。若要使用指標資料來依比例水平擴展或縮減碎片的數量，這樣子成比例的增加或減少是必要的。

**Example**  
下列的範例描述規模調整政策的目標追蹤組態設定。在此組態中，自訂指標會根據名為 之叢集中所有碎片的平均 CPU 使用率 50% 來調整 ElastiCache for Redis OSS 叢集`my-db-cluster`。

```
{
    "TargetValue": 50,
    "CustomizedMetricSpecification":
    {
        "MetricName": "EngineCPUUtilization",
        "Namespace": "AWS/ElastiCache",
        "Dimensions": [
            {
                "Name": "ReplicationGroup","Value": "my-db-cluster"
            },
            {
                "Name": "Role","Value": "PRIMARY"
            }
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

## 使用冷卻時間
<a name="AutoScaling-Scaling-Cooldown-periods"></a>

您可以指定一個值 (單位為秒)，讓 `ScaleOutCooldown` 新增冷卻時間以便水平擴展您的叢集。同樣的，您可以指定一個值 (單位為秒)，讓 `ScaleInCooldown` 新增冷卻時間以便為您的叢集縮減規模。如需政策組態語法的詳細資訊，請參閱「Application Auto Scaling API 參考」中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

 下列的範例描述規模調整政策的目標追蹤組態設定。在此組態中，`ElastiCachePrimaryEngineCPUUtilization`預先定義的 指標用於根據該叢集中所有主節點的平均 CPU 使用率 40% 來調整 ElastiCache for Redis OSS 叢集。這個組態設定分別提供了 10 分鐘的規模縮減冷卻時間，和 5 分鐘的橫向擴展冷卻時間。

```
{
    "TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```

# 停用規模縮減活動
<a name="AutoScaling-Scaling-Disabling-Scale-in"></a>

您可以停用縮減活動，防止叢集中的目標追蹤擴展政策組態擴展。停用規模縮減的動作，可防止規模調整政策刪除碎片，同時讓規模調整政策仍然能視需要建立碎片。

您可以為 `DisableScaleIn` 指定布林值，以啟用或停用 叢集的規模縮減活動。如需政策組態語法的詳細資訊，請參閱「Application Auto Scaling API 參考」中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

下列的範例描述規模調整政策的目標追蹤組態設定。在此組態中，`ElastiCachePrimaryEngineCPUUtilization`預先定義的指標會根據該叢集中所有主節點的平均 CPU 使用率 40%，來調整 ElastiCache for Valkey 和 Redis OSS 叢集。此組態設定停用了規模調整政策的規模縮減動作。

```
{
    "TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
    },
    "DisableScaleIn": true
}
```

# 套用擴展原則
<a name="AutoScaling-Scaling-Applying-a-Scaling-Policy"></a>

向 ElastiCache for Valkey 和 Redis OSS 自動擴展註冊叢集並定義擴展政策之後，您可以將擴展政策套用至已註冊的叢集。若要將擴展政策套用至 ElastiCache for Redis OSS 叢集，您可以使用 AWS CLI 或 Application Auto Scaling API。

## 使用 套用擴展政策 AWS CLI
<a name="AutoScaling-Scaling-Applying-a-Scaling-Policy-CLI"></a>

若要將擴展政策套用至 ElastiCache for Valkey 和 Redis OSS 叢集，請使用 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 命令搭配下列參數：
+ **--policy-name** - 規模調整政策的名稱。
+ **--policy-type** - 將此值設為 `TargetTrackingScaling`。
+ **--resource-id** – 資源識別符。對於此參數，資源類型為 `ReplicationGroup` ，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** - 將此值設為 `elasticache`。
+ **--scalable-dimension** - 將此值設為 `elasticache:replication-group:NodeGroups`。
+ **--target-tracking-scaling-policy-configuration** – 要用於叢集的目標追蹤擴展政策組態。

在下列範例中，您將名為 的目標追蹤擴展政策套用至名為 `myscalablepolicy`的 ElastiCache for Valkey 和 Redis OSS 叢集，該叢集`myscalablecluster`使用 ElastiCache 自動擴展。做法是使用儲存於 `config.json` 檔案中的政策組態設定。

針對 Linux、macOS 或 Unix：

```
aws application-autoscaling put-scaling-policy \
    --policy-name myscalablepolicy \
    --policy-type TargetTrackingScaling \
    --resource-id replication-group/myscalablecluster \
    --service-namespace elasticache \
    --scalable-dimension elasticache:replication-group:NodeGroups \
    --target-tracking-scaling-policy-configuration file://config.json
```

針對 Windows：

```
aws application-autoscaling put-scaling-policy ^
    --policy-name myscalablepolicy ^
    --policy-type TargetTrackingScaling ^
    --resource-id replication-group/myscalablecluster ^
    --service-namespace elasticache ^
    --scalable-dimension elasticache:replication-group:NodeGroups ^
    --target-tracking-scaling-policy-configuration file://config.json
```

## 使用 API 套用規模調整政策
<a name="AutoScaling-Scaling-Applying-a-Scaling-Policy-API"></a>

若要將擴展政策套用至 ElastiCache for Valkey 和 Redis OSS 叢集，請使用 [PutScalingPolicy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) AWS CLI 命令搭配下列參數：
+ **--policy-name** - 規模調整政策的名稱。
+ **--resource-id** – 資源識別符。對於此參數，資源類型為 `ReplicationGroup` ，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** - 將此值設為 `elasticache`。
+ **--scalable-dimension** - 將此值設為 `elasticache:replication-group:NodeGroups`。
+ **--target-tracking-scaling-policy-configuration** – 要用於叢集的目標追蹤擴展政策組態。

在下列範例中，您將名為 的目標追蹤擴展政策套用至名為 `myscalablepolicy`且`myscalablecluster`具有 ElastiCache 自動擴展的 ElastiCache 叢集。您使用的政策組態設定，是以 `ElastiCachePrimaryEngineCPUUtilization` 這個預先定義的指標為根據。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.PutScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "PolicyName": "myscalablepolicy",
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:NodeGroups",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": {
        "TargetValue": 40.0,
        "PredefinedMetricSpecification":
        {
            "PredefinedMetricType": "ElastiCachePrimaryEngineCPUUtilization"
        }
    }
}
```

# 編輯擴展原則
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy"></a>

您可以使用 AWS 管理主控台、 AWS CLI或 Application Auto Scaling API 編輯擴展政策。

## 使用 編輯擴展政策 AWS 管理主控台
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy-CON"></a>

**編輯 ElastiCache for Valkey 和 Redis OSS 叢集的 Auto Scaling 政策**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)：// 開啟 Amazon ElastiCache 主控台。

1. 在導覽窗格中，選擇適當的引擎。

1. 選擇要新增政策至其中的叢集 (請選擇叢集名稱而非其左側的按鈕)。

1. 選擇 **Auto Scaling policies (Auto Scaling 政策)** 索引標籤。

1. 根據 **Scaling policies** (擴展政策)，找到您要變更的自動擴展政策，並選擇 **Modify** (修改)。

1. 對政策進行必要的變更。

1. 選擇 **Modify** (修改)。

## 使用 AWS CLI 和 API 編輯擴展政策
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy-CLI"></a>

您可以使用 AWS CLI 或 Application Auto Scaling API，以套用擴展政策的相同方式編輯擴展政策：
+ 使用 時 AWS CLI，請在 `--policy-name` 參數中指定您要編輯的政策名稱。針對您想要變更的參數指定新的參數值。
+ 使用 Application Auto Scaling API 時，請在 `PolicyName` 參數中指定您所要編輯之政策的名稱。針對您想要變更的參數指定新的參數值。

如需詳細資訊，請參閱[套用擴展原則](AutoScaling-Scaling-Applying-a-Scaling-Policy.md)。

# 刪除擴展原則
<a name="AutoScaling-Scaling-Deleting-a-Scaling-Policy"></a>

您可以使用 AWS 管理主控台、 AWS CLI或 Application Auto Scaling API 刪除擴展政策。

## 使用 刪除擴展政策 AWS 管理主控台
<a name="AutoScaling-Scaling-Editing-a-Scaling-Policy-CON"></a>

**刪除 ElastiCache for Redis OSS 叢集的 Auto Scaling 政策**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)：// 開啟 Amazon ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**。

1. 選擇要您想編輯其擴展政策的叢集 (請選擇叢集名稱而非其左側的按鈕。

1. 選擇 **Auto Scaling policies (Auto Scaling 政策)** 索引標籤。

1. 在 **Scaling Policies** (擴展政策) 區段中，選擇自動擴展政策，然後選擇 **Delete** (刪除)。

## 使用 刪除擴展政策 AWS CLI
<a name="AutoScaling-Scaling-Deleting-a-Scaling-Policy-CLI"></a>

若要刪除 ElastiCache for Valkey 和 Redis OSS 叢集的擴展政策，請使用 [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-scaling-policy.html) AWS CLI 命令搭配下列參數：
+ **--policy-name** - 規模調整政策的名稱。
+ **--resource-id** – 資源識別符。對於此參數，資源類型為 `ReplicationGroup` ，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** - 將此值設為 `elasticache`。
+ **--scalable-dimension** - 將此值設為 `elasticache:replication-group:NodeGroups`。

在下列範例中，您會`myscalablepolicy`從名為 的叢集中刪除名為 的目標追蹤擴展政策`myscalablecluster`。

若為 Linux、macOS 或 Unix：

```
aws application-autoscaling delete-scaling-policy \
    --policy-name myscalablepolicy \
    --resource-id replication-group/myscalablecluster \
    --service-namespace elasticache \
    --scalable-dimension elasticache:replication-group:NodeGroups
```

針對 Windows：

```
aws application-autoscaling delete-scaling-policy ^
    --policy-name myscalablepolicy ^
    --resource-id replication-group/myscalablecluster ^
    --service-namespace elasticache ^
    --scalable-dimension elasticache:replication-group:NodeGroups
```

## 使用 API 刪除規模調整政策
<a name="AutoScaling-Scaling-Deleting-a-Scaling-Policy-API"></a>

若要刪除 ElastiCache for Valkey 和 Redis OSS 叢集的擴展政策，請使用 [DeleteScalingPolicy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-scaling-policy.html) AWS CLI 命令搭配下列參數：
+ **--policy-name** - 規模調整政策的名稱。
+ **--resource-id** – 資源識別符。對於此參數，資源類型為 `ReplicationGroup` ，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ **--service-namespace** - 將此值設為 `elasticache`。
+ **--scalable-dimension** - 將此值設為 `elasticache:replication-group:NodeGroups`。

在下列範例中，您會`myscalablepolicy`從名為 的叢集中刪除名為 的目標追蹤擴展政策`myscalablecluster`。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "PolicyName": "myscalablepolicy",
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:NodeGroups"
}
```

# CloudFormation 使用 Auto Scaling 政策
<a name="AutoScaling-with-Cloudformation-Shards"></a>

此程式碼片段示範如何建立目標追蹤政策，並使用 [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) 資源將其套用至 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html) 資源。其使用 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) 和 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 內部函數來建構 `ResourceId` 屬性，該屬性具有相同範本中指定的 `AWS::ElastiCache::ReplicationGroup` 資源的邏輯名稱。

```
ScalingTarget:
   Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
   Properties:
     MaxCapacity: 3
     MinCapacity: 1
     ResourceId: !Sub replication-group/${logicalName}
     ScalableDimension: 'elasticache:replication-group:NodeGroups'
     ServiceNamespace: elasticache
     RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/elasticache.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG"

  ScalingPolicy:
    Type: "AWS::ApplicationAutoScaling::ScalingPolicy"
    Properties:
      ScalingTargetId: !Ref ScalingTarget
      ServiceNamespace: elasticache
      PolicyName: testpolicy
      PolicyType: TargetTrackingScaling
      ScalableDimension: 'elasticache:replication-group:NodeGroups'
      TargetTrackingScalingPolicyConfiguration:
        PredefinedMetricSpecification:
          PredefinedMetricType: ElastiCachePrimaryEngineCPUUtilization
        TargetValue: 40
```

# 排程擴展
<a name="AutoScaling-with-Scheduled-Scaling-Shards"></a>

按照排程進行擴展讓您能夠因應可預測的需求變化，據以擴展您的應用程式。若要使用排程擴展，您可以建立排程動作，指示 ElastiCache for Valkey 和 Redis OSS 在特定時間執行擴展活動。當您建立排程動作時，您可以指定現有的叢集、應進行擴展活動的時間、最小容量和最大容量。您可以建立僅擴展一次或依週期性排程擴展的排程動作。

 您只能為已存在的叢集建立排程動作。您無法在建立叢集的同時建立排程動作。

如需排程動作建立、管理和刪除作業相關術語的詳細資訊，請參閱[排程動作建立、管理和刪除作業常用的命令](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html#scheduled-scaling-commonly-used-commands) 

**若要建立週期性排程：**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)：// 開啟 Amazon ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**。

1. 選擇您要新增政策的叢集。

1. 從 **Actions (動作)** 下拉式選單中選擇 **Manage Auto Scaling policies (管理 Auto Scaling 政策)**。

1. 選擇 **Auto Scaling policies (Auto Scaling 政策)** 索引標籤。

1. 在 **Auto scaling policies (Auto Scaling 政策)** 區段中，會出現 **Add Scaling policy (新增規模調整政策)** 對話方塊。選擇 **Scheduled scaling (排程規模調整)**。

1. 在 **Policy Name (政策名稱)** 輸入政策的名稱。

1. 在 **Scalable Dimension (可擴展的維度)** 選擇 **Shards (碎片)**。

1. 在 **Target Shards (目標碎片)** 選擇值。

1. 在 **Recurrence (重複)** 選擇 **Recurring (週期性)**。

1. 在 **Frequency (頻率)** 選擇各自的值。

1. 在 **Start Date (開始日期)** 和 **Start time (開始時間)** 選擇政策生效的時間。

1. 選擇 **Add Policy (新增政策)**。

**若要建立一次性排程動作：**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)：// 開啟 Amazon ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**。

1. 選擇您要新增政策的叢集。

1. 從 **Actions (動作)** 下拉式選單中選擇 **Manage Auto Scaling policies (管理 Auto Scaling 政策)**。

1. 選擇 **Auto Scaling policies (Auto Scaling 政策)** 索引標籤。

1. 在 **Auto scaling policies (Auto Scaling 政策)** 區段中，會出現 **Add Scaling policy (新增規模調整政策)** 對話方塊。選擇 **Scheduled scaling (排程規模調整)**。

1. 在 **Policy Name (政策名稱)** 輸入政策的名稱。

1. 在 **Scalable Dimension (可擴展的維度)** 選擇 **Shards (碎片)**。

1. 在 **Target Shards (目標碎片)** 選擇值。

1. 在 **Recurrence (重複)**，選擇 **Once (一次)**。

1. 在 **Start Date (開始日期)** 和 **Start time (開始時間)** 選擇政策生效的時間。

1. 在 **End Date (結束日期)** 選擇政策效用結束的日期。

1. 選擇 **Add Policy (新增政策)**。

**刪除排程動作**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)：// 開啟 Amazon ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**。

1. 選擇您要新增政策的叢集。

1. 從 **Actions (動作)** 下拉式選單中選擇 **Manage Auto Scaling policies (管理 Auto Scaling 政策)**。

1. 選擇 **Auto Scaling policies (Auto Scaling 政策)** 索引標籤。

1. 在 **Auto Scaling policies (Auto Scaling 政策)** 區段中，選擇 Auto Scaling 政策，然後從 **Actions (動作)** 對話中選擇 **Delete (刪除)**。

**使用 AWS CLI 管理排定的擴展**

使用下列 application-autoscaling API：
+ [put-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scheduled-action.html) 
+ [describe-scheduled-actions](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/describe-scheduled-actions.html) 
+ [delete-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-scheduled-action.html) 

## 使用 CloudFormation 建立排程動作
<a name="AutoScaling-with-Cloudformation-Declare-Scheduled-Action"></a>

此程式碼片段示範如何建立目標追蹤政策，並使用 [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) 資源將其套用至 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html) 資源。其使用 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) 和 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 內部函數來建構 `ResourceId` 屬性，該屬性具有相同範本中指定的 `AWS::ElastiCache::ReplicationGroup` 資源的邏輯名稱。

```
ScalingTarget:
   Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
   Properties:
     MaxCapacity: 3
     MinCapacity: 1
     ResourceId: !Sub replication-group/${logicalName}
     ScalableDimension: 'elasticache:replication-group:NodeGroups'
     ServiceNamespace: elasticache
     RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/elasticache.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG"
     ScheduledActions:
       - EndTime: '2020-12-31T12:00:00.000Z'
         ScalableTargetAction:
           MaxCapacity: '5'
           MinCapacity: '2'
         ScheduledActionName: First
         Schedule: 'cron(0 18 * * ? *)'
```

# 搭配複本使用自動擴展
<a name="AutoScaling-Using-Replicas"></a>

ElastiCache 複寫群組可以設定一或多個快取，以做為單一邏輯節點運作。

以下提供目標追蹤和排程政策的詳細資訊，以及如何使用 AWS 管理主控台 AWS CLI 和 APIs 套用這些政策。

# 目標追蹤擴展政策
<a name="AutoScaling-Scaling-Policies-Replicas-Replicas"></a>

使用目標追蹤擴展政策，您可以選取指標及設定目標值。ElastiCache for Valkey 和 Redis OSS AutoScaling 會建立和管理 CloudWatch 警示，以觸發擴展政策，並根據指標和目標值計算擴展調整。規模調整政策會視需要平均在所有碎片間新增或移除複本，以讓指標保持在等於或接近指定目標值。除了讓指標保持在接近目標值之外，目標追蹤規模調整政策也會配合指標中，因為負載模式波動所造成的波動調整，並將機群容量中的快速波動降到最低。

## 複本的 Auto Scaling 條件
<a name="AutoScaling-Scaling-Criteria-Replicas"></a>

Auto Scaling 政策會為您的叢集定義下列預先定義的指標：

`ElastiCacheReplicaEngineCPUUtilization`：在 ElastiCache 用來觸發自動擴展操作的所有複本中彙總的 AVG EngineCPU 使用率閾值。您可以將使用率目標設定為 35% 到 70% 之間。

當服務偵測到 `ElastiCacheReplicaEngineCPUUtilization` 指標等於或大於目標設定，便會自動增加碎片間的複本數。ElastiCache 會將叢集複本擴展為等於兩個數字中較大者的計數：與目標和一個複本的百分比變化。對於縮減，除非整體指標值低於已定義目標的 75%，否則 ElastiCache 不會自動縮減。

以下提供水平擴展的範例，如果有 5 個碎片，各 1 個複本：

如果您的目標違規 30%，ElastiCache for Valkey 和 Redis OSS 會跨所有碎片向外擴展 1 個複本 (max(0.3，預設 1))。這會產生 5 個碎片，每個碎片各 2 個複本。

對於縮減範例，如果您已選取目標值 60%，ElastiCache for Valkey 和 Redis OSS 將不會自動縮減，直到指標小於或等於 45% （低於目標 60% 的 25%)。

### Auto Scaling 考量事項
<a name="AutoScaling-Scaling-Considerations-Replicas"></a>

請謹記以下幾點考量：
+ 目標追蹤擴展政策假設在指定的指標超過目標值時，應執行向外擴展。您無法使用目標追蹤擴展政策在指定的指標低於目標值時執行向外擴展。ElastiCache for Valkey 和 Redis OSS 會將複本擴展為叢集中所有碎片中現有複本的最大值 （與目標相差 %，預設 1)。
+ 所指定指標的資料不足時，目標追蹤擴展政策不會執行擴展。政策不會執行向內擴展，因為向內擴展不會將資料不足解釋為低使用率。
+ 您可能會看到目標值與實際指標資料點之間有些差距。這是因為當 ElastiCache Auto Scaling 決定要新增或移除多少容量時，一律會四捨五入或捨棄，以保守的方式運作。這樣可防止新增不足的容量，或移除過多的容量。
+ 為了確保應用程式的可用性，此服務可以配合指標依比例快速擴展規模，但是以更漸進的方式在叢集中碎片間最多縮減規模 1 個複本。
+ 您可以為 ElastiCache for Valkey 和 Redis OSS 叢集設定多個目標追蹤擴展政策，前提是每個叢集都使用不同的指標。Auto Scaling 的目的是一律優先考慮可用性，因此其行為會根據目標追蹤政策是否已準備好向外擴展或向內擴展而有所不同。如果任何目標追蹤政策已準備好向外擴展，它就會將服務向外擴展，但只有在所有目標追蹤政策 (已啟用向內擴展部分) 都已準備好要向內擴展時才會向內擴展。
+ 請勿編輯或刪除 ElastiCache Auto Scaling 針對目標追蹤擴展政策管理的 CloudWatch 警示。當您刪除擴展政策或刪除叢集時，Auto Scaling 會自動刪除警示。
+ ElastiCache Auto Scaling 不會阻止您跨碎片手動修改複本。這些手動調整不會影響附加至調整規模政策的任何現有 CloudWatch 警示，但會影響可能觸發這些 CloudWatch 警示的指標。
+ 這些由 Auto Scaling 管理的 CloudWatch 警示，是根據叢集中所有碎片的 AVG 指標所定義的。因此，使用熱碎片可能會導致以下任一情況：
  + 由於幾個熱碎片上的負載觸發了 CloudWatch 警示，因此在沒有需要時進行擴展
  + 由於跨影響警示的所有碎片之彙總 AVG 沒有超出限制，因此在需要時不進行擴展。
+ 每個叢集節點的 ElastiCache 預設限制仍然適用。因此，當選擇使用 Auto Scaling 且您希望節點數上限超過預設配額時，請至 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)請求增加配額，並選擇配額類型 **Nodes per cluster per instance type (每執行個體類型每叢集的節點數)**。
+ 確保 VPC 中有足夠的 ENI (彈性網路介面) 可用，進行水平擴展時會需要用到。如需詳細資訊，請參閱[彈性網路介面](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ElasticNetworkInterfaces.html)。
+ 如果 EC2 沒有足夠的容量可用，ElastiCache Auto Scaling 將不會橫向擴展，直到容量可用，或者如果您將叢集手動修改為具有足夠容量的執行個體類型。
+ ElastiCache Auto Scaling 不支援擴展叢集`ReservedMemoryPercent`低於 25% 的複本。如需詳細資訊，請參閱[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。

# 新增擴展原則
<a name="AutoScaling-Adding-Policy-Replicas"></a>

您可以使用 新增擴展政策 AWS 管理主控台。

**使用 新增擴展政策 AWS 管理主控台**

將自動擴展政策新增至 ElastiCache for Valkey 和 Redis OSS

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)：// 開啟 Amazon ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**。

1. 選擇要新增政策至其中的叢集 (請選擇叢集名稱而非其左側的按鈕)。

1. 選擇 **Auto Scaling policies (Auto Scaling 政策)** 索引標籤。

1. 選擇 **Dynamic scaling** (動態擴展)。

1. 根據 **Scaling policies** (擴展政策)，選擇 **Add dynamic scaling** (新增動態擴展)。

1. 在 **Policy Name (政策名稱)** 輸入政策的名稱。

1. 在 **Scalable Dimension (可擴展的維度)**，從對話方塊中選取 **Replicas (複本)**。

1. 針對目標值，輸入您要在 ElastiCache 複本上維護的 CPU 使用率平均百分比。此值必須 >=35 且 <=70。系統會新增或移除叢集複本，讓指標接近指定的值。

1. (選用) 主控台不支援規模縮減或水平擴展冷卻時間。使用 AWS CLI 修改冷卻值。

1. 針對**最小容量**，輸入 ElastiCache Auto Scaling 政策需要維護的複本數量下限。

1. 針對**最大容量**，輸入 ElastiCache Auto Scaling 政策需要維護的複本數量上限。此值必須 >=5。

1. 選擇**建立**。

# 註冊可擴展的目標
<a name="AutoScaling-Register-Policy"></a>

您可以根據預先定義的指標或自訂指標，套用規模調整政策。若要這樣做，您可以使用 AWS CLI 或 Application Auto Scaling API。第一步是向 Auto Scaling 註冊 ElastiCache for Valkey 和 Redis OSS 複寫群組。

您必須先向 ElastiCache 自動擴展註冊叢集，才能搭配叢集使用 ElastiCache 自動擴展。這是為了定義要套用到叢集的擴展維度和限制。ElastiCache 自動擴展會沿著`elasticache:replication-group:Replicas`可擴展維度動態擴展叢集，這代表每個碎片的叢集複本數量。

**使用 CLI** 

若要註冊 ElastiCache 叢集，請使用 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令搭配下列參數：
+ --service-namespace - 將此值設為 elasticache。
+ --resource-id – ElastiCache 叢集的資源識別符。在此參數中，資源類型為 ReplicationGroup，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ --scalable-dimension - 將此值設定為 `elasticache:replication-group:Replicas`。
+ --min-capacity – ElastiCache Auto Scaling 要管理的複本數量下限。如需了解 --min-capacity、--max-capacity 以及叢集中複本數之間的關係，請參閱「[容量下限和上限](AutoScaling-Policies.md#AutoScaling-MinMax)」。
+ --max-capacity – ElastiCache Auto Scaling 要管理的複本數量上限。如需了解 --min-capacity、--max-capacity 以及叢集中複本數之間的關係，請參閱「[容量下限和上限](AutoScaling-Policies.md#AutoScaling-MinMax)」。

**Example**  
在下列範例中，您會註冊名為 的 ElastiCache 叢集`myscalablecluster`。註冊中表明應該動態擴展叢集，使其具有 1 到 5 個複本。  
若為 Linux、macOS 或 Unix：  

```
aws application-autoscaling register-scalable-target \
    --service-namespace elasticache \
    --resource-id replication-group/myscalablecluster \
    --scalable-dimension elasticache:replication-group:Replicas \
    --min-capacity 1 \
    --max-capacity 5 \
```
針對 Windows：  

```
aws application-autoscaling register-scalable-target ^
    --service-namespace elasticache ^
    --resource-id replication-group/myscalablecluster ^
    --scalable-dimension elasticache:replication-group:Replicas ^
    --min-capacity 1 ^
    --max-capacity 5 ^
```

**使用 API**

若要註冊 ElastiCache 叢集，請使用 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令搭配下列參數：
+ ServiceNamespace - 將此值設為 elasticache。
+ ResourceID - ElastiCache 叢集的資源識別碼。在此參數中，資源類型為 ReplicationGroup，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ ScalableDimension - 將此值設為 `elasticache:replication-group:Replicas`。
+ MinCapacity：由 ElastiCache 自動擴展管理的複本數目下限。如需了解 --min-capacity、--max-capacity 以及叢集中複本數之間的關係，請參閱「[容量下限和上限](AutoScaling-Policies.md#AutoScaling-MinMax)」。
+ MaxCapacity：由 ElastiCache 自動擴展管理的複本數量上限。如需了解 --min-capacity、--max-capacity 以及叢集中複本數之間的關係，請參閱「[容量下限和上限](AutoScaling-Policies.md#AutoScaling-MinMax)」。

**Example**  
在下列範例中，您會`myscalablecluster`使用 Application Auto Scaling API 註冊名為 的叢集。此註冊中表明應該動態擴展叢集，使其具有 1 到 5 個複本。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:Replicas",
    "MinCapacity": 1,
    "MaxCapacity": 5
}
```

# 定義擴展政策
<a name="AutoScaling-Defining-Policy"></a>

目標追踪規模調整政策組態由 JSON 區塊表示，其中定義了指標和目標值。您可以將規模調整政策的組態設定，儲存為文字檔案中的 JSON 區塊。叫用 AWS CLI 或 Application Auto Scaling API 時，您可以使用該文字檔案。如需政策組態語法的詳細資訊，請參閱 *Application Auto Scaling API 參考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

您可使用下列選項來定義目標追蹤擴展政策的組態：

**Topics**
+ [使用預先定義的指標](#AutoScaling-Predefined-Metric)
+ [編輯擴展原則](AutoScaling-Editing-Policy.md)
+ [刪除擴展原則](AutoScaling-Deleting-Policy.md)
+ [CloudFormation 使用 Auto Scaling 政策](AutoScaling-with-Cloudformation.md)
+ [排程擴展](AutoScaling-with-Scheduled-Scaling-Replicas.md)

## 使用預先定義的指標
<a name="AutoScaling-Predefined-Metric"></a>

目標追踪規模調整政策組態由 JSON 區塊表示，其中定義了指標和目標值。您可以將規模調整政策的組態設定，儲存為文字檔案中的 JSON 區塊。叫用 AWS CLI 或 Application Auto Scaling API 時，您可以使用該文字檔案。如需政策組態語法的詳細資訊，請參閱 *Application Auto Scaling API 參考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

您可使用下列選項來定義目標追蹤擴展政策的組態：

**Topics**
+ [使用預先定義的指標](#AutoScaling-Predefined-Metric)
+ [使用自訂的指標](#AutoScaling-Custom-Metric)
+ [使用冷卻時間](#AutoScaling-Using-Cooldowns)
+ [停用規模縮減活動](#AutoScaling-Disabling-Scalein)
+ [將擴展政策套用至 ElastiCache for Valkey 和 Redis OSS 叢集](#AutoScaling-Applying-Policy)

### 使用預先定義的指標
<a name="AutoScaling-Predefined-Metric"></a>

透過使用預先定義的指標，您可以快速定義 ElastiCache for Valkey 和 Redis OSS 叢集的目標追蹤擴展政策，該叢集可與 ElastiCache Auto Scaling 中的目標追蹤搭配使用。目前，ElastiCache 在 ElastiCache 複本 Auto Scaling 中支援下列預先定義的指標：

`ElastiCacheReplicaEngineCPUUtilization` – 叢集中所有複本在 CloudWatch 中 EngineCPUUtilization 指標的平均值。您可以在 ElastiCache 下的 CloudWatch 中找到`ReplicationGroupId, Role`所需的 ReplicationGroupId 和角色複本的彙總指標值。

若要在您的規模調整政策中使用預先定義的指標，請為規模調整政策建立目標追蹤組態設定。此組態設定必須加入用於預先定義指標的 `PredefinedMetricSpecification`，以及用於該指標目標值的 `TargetValue`。

### 使用自訂的指標
<a name="AutoScaling-Custom-Metric"></a>

使用自訂的指標，您可以定義目標追蹤規模調整政策來滿足您的自訂需求。您可以根據隨擴展比例變更的任何 ElastiCache for Valkey 和 Redis OSS 指標來定義自訂指標。並非所有 ElastiCache 指標都適用於目標追蹤。指標必須是有效的使用率指標，而且能夠表示執行個體的忙碌程度。指標的值必須根據叢集中複本的數量依比例增加或減少。若要使用指標資料來依比例增加或減少碎片數量，這樣子成比例的增加或減少是必要的。

**Example**  
下列的範例描述規模調整政策的目標追蹤組態設定。在此組態中，自訂指標會根據名為 的叢集中所有複本的平均 CPU 使用率 50% 來調整叢集`my-db-cluster`。  

```
{"TargetValue": 50,
    "CustomizedMetricSpecification":
    {"MetricName": "EngineCPUUtilization",
        "Namespace": "AWS/ElastiCache",
        "Dimensions": [
            {"Name": "ReplicationGroup","Value": "my-db-cluster"},
            {"Name": "Role","Value": "REPLICA"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

### 使用冷卻時間
<a name="AutoScaling-Using-Cooldowns"></a>

您可以指定一個值 (單位為秒)，讓 `ScaleOutCooldown` 新增冷卻時間以便水平擴展您的叢集。同樣的，您可以指定一個值 (單位為秒)，讓 `ScaleInCooldown` 新增冷卻時間以便為您的叢集縮減規模。如需有關 `ScaleInCooldown` 和 `ScaleOutCooldown` 的詳細資訊，請參閱 *Application Auto Scaling API 參考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。下列的範例描述規模調整政策的目標追蹤組態設定。在此組態中，`ElastiCacheReplicaEngineCPUUtilization`預先定義的指標會根據該叢集中所有複本的平均 CPU 使用率 40% 來調整叢集。這個組態設定分別提供了 10 分鐘的規模縮減冷卻時間，和 5 分鐘的規模擴展冷卻時間。

```
{"TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {"PredefinedMetricType": "ElastiCacheReplicaEngineCPUUtilization"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```

### 停用規模縮減活動
<a name="AutoScaling-Disabling-Scalein"></a>

您可以停用縮減活動，防止目標追蹤擴展政策組態在 ElastiCache for Valkey 和 Redis OSS 叢集中擴展。停用規模縮減的動作，可防止規模調整政策刪除複本，同時讓規模調整政策仍然能視需要新增複本。

您可以為 `DisableScaleIn` 指定布林值，以啟用或停用 叢集的規模縮減活動。如需有關 `DisableScaleIn` 的詳細資訊，請參閱 *Application Auto Scaling API 參考*中的 [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)。

**Example**  
下列的範例描述規模調整政策的目標追蹤組態設定。在此組態中，`ElastiCacheReplicaEngineCPUUtilization`預先定義的指標會根據該叢集中所有複本的平均 CPU 使用率 40% 來調整叢集。此組態設定停用了規模調整政策的規模縮減動作。

```
{"TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {"PredefinedMetricType": "ElastiCacheReplicaEngineCPUUtilization"
    },
    "DisableScaleIn": true
}
```

### 將擴展政策套用至 ElastiCache for Valkey 和 Redis OSS 叢集
<a name="AutoScaling-Applying-Policy"></a>

向 ElastiCache for Valkey 和 Redis OSS 自動擴展註冊叢集並定義擴展政策之後，您可以將擴展政策套用至已註冊的叢集。若要將擴展政策套用至 ElastiCache for Valkey 和 Redis OSS 叢集，您可以使用 AWS CLI 或 Application Auto Scaling API。

**使用 AWS CLI**

若要將擴展政策套用至 ElastiCache for Valkey 和 Redis OSS 叢集，請使用 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) 命令搭配下列參數：
+ --policy-name - 規模調整政策的名稱。
+ --policy-type - 將此值設為 `TargetTrackingScaling`。
+ --resource-id – 叢集的資源識別符。在此參數中，資源類型為 ReplicationGroup，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ --service-namespace - 將此值設為 elasticache。
+ --scalable-dimension - 將此值設定為 `elasticache:replication-group:Replicas`。
+ --target-tracking-scaling-policy-configuration – 要用於叢集的目標追蹤擴展政策組態。

**Example**  
在下列範例中，您將名為 的目標追蹤擴展政策套用`myscalablepolicy`到`myscalablecluster`使用 ElastiCache 自動擴展名為 的叢集。做法是使用儲存於 `config.json` 檔案中的政策組態設定。

針對 Linux、macOS 或 Unix：

```
aws application-autoscaling put-scaling-policy \
    --policy-name myscalablepolicy \
    --policy-type TargetTrackingScaling \
    --resource-id replication-group/myscalablecluster \
    --service-namespace elasticache \
    --scalable-dimension elasticache:replication-group:Replicas \
    --target-tracking-scaling-policy-configuration file://config.json
```

```
{"TargetValue": 40.0,
    "PredefinedMetricSpecification":
    {"PredefinedMetricType": "ElastiCacheReplicaEngineCPUUtilization"
    },
    "DisableScaleIn": true
}
```

針對 Windows：

```
aws application-autoscaling put-scaling-policy ^
    --policy-name myscalablepolicy ^
    --policy-type TargetTrackingScaling ^
    --resource-id replication-group/myscalablecluster ^
    --service-namespace elasticache ^
    --scalable-dimension elasticache:replication-group:Replicas ^
    --target-tracking-scaling-policy-configuration file://config.json
```

**使用 API**

若要使用 Application Auto Scaling API 將擴展政策套用至 ElastiCache 叢集，請使用 [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) Application Auto Scaling API 操作搭配下列參數：
+ PolicyName - 規模調整政策的名稱。
+ PolicyType - 將此值設為 `TargetTrackingScaling`。
+ ResourceID – 叢集的資源識別符。在此參數中，資源類型為 ReplicationGroup，唯一識別符為 ElastiCache for Redis OSS 叢集的名稱，例如 `replication-group/myscalablecluster`。
+ ServiceNamespace - 將此值設為 elasticache。
+ ScalableDimension - 將此值設為 `elasticache:replication-group:Replicas`。
+ TargetTrackingScalingPolicyConfiguration – 要用於叢集的目標追蹤擴展政策組態。

**Example**  
在下列範例中，您將名為 的目標追蹤擴展政策套用`scalablepolicy`到`myscalablecluster`使用 ElastiCache 自動擴展名為 的叢集。您使用的政策組態設定，是以 `ElastiCacheReplicaEngineCPUUtilization` 這個預先定義的指標為根據。

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.PutScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "PolicyName": "myscalablepolicy",
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:Replicas",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": {
        "TargetValue": 40.0,
        "PredefinedMetricSpecification":
        {
            "PredefinedMetricType": "ElastiCacheReplicaEngineCPUUtilization"
        }
    }
}
```

# 編輯擴展原則
<a name="AutoScaling-Editing-Policy"></a>

您可以使用 AWS 管理主控台、 AWS CLI或 Application Auto Scaling API 編輯擴展政策。

**使用 編輯擴展政策 AWS 管理主控台**

您只能使用 AWS 管理主控台來編輯具有預先定義指標類型的政策

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)：// 開啟 Amazon ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**

1. 選擇要新增政策至其中的叢集 (請選擇叢集名稱而非其左側的按鈕)。

1. 選擇 **Auto Scaling policies (Auto Scaling 政策)** 索引標籤。

1. 根據 **Scaling policies** (擴展政策)，找到您要變更的自動擴展政策，並選擇 **Modify** (修改)。

1. 對政策進行必要的變更。

1. 選擇 **Modify** (修改)。

1. 對政策進行變更。

1. 選擇 **Modify** (修改)。

**使用 AWS CLI 或 Application Auto Scaling API 編輯擴展政策 **

您可以使用 AWS CLI 或 Application Auto Scaling API，以套用擴展政策的相同方式編輯擴展政策：
+ 使用 Application Auto Scaling API 時，請在 `PolicyName` 參數中指定您所要編輯之政策的名稱。針對您想要變更的參數指定新的參數值。

如需詳細資訊，請參閱[將擴展政策套用至 ElastiCache for Valkey 和 Redis OSS 叢集](AutoScaling-Defining-Policy.md#AutoScaling-Applying-Policy)。

# 刪除擴展原則
<a name="AutoScaling-Deleting-Policy"></a>

您可以使用 AWS 管理主控台、 AWS CLI 或 Application Auto Scaling API 刪除擴展政策

**使用 刪除擴展政策 AWS 管理主控台**

您只能使用 AWS 管理主控台來編輯具有預先定義指標類型的政策

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)：// 開啟 Amazon ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**

1. 選擇您要刪除其 Auto Scaling 政策的叢集。

1. 選擇 **Auto Scaling policies (Auto Scaling 政策)** 索引標籤。

1. 在 **Scaling Policies** (擴展政策) 區段中，選擇自動擴展政策，然後選擇 **Delete** (刪除)。

**使用 AWS CLI 或 Application Auto Scaling API 刪除擴展政策 **

您可以使用 AWS CLI 或 Application Auto Scaling API，從 ElastiCache 叢集刪除擴展政策。

**CLI**

若要從 ElastiCache for Valkey 和 Redis OSS 叢集中刪除擴展政策，請使用 [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html) 命令搭配下列參數：
+ --policy-name - 規模調整政策的名稱。
+ --resource-id – 叢集的資源識別符。在此參數中，資源類型為 ReplicationGroup，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ --service-namespace - 將此值設為 elasticache。
+ --scalable-dimension - 將此值設定為 `elasticache:replication-group:Replicas`。

**Example**  
在下列範例中，會將名為 `myscalablepolicy` 的目標追蹤擴展政策，從名為 `myscalablecluster` 的 ELC; 叢集中刪除。

若為 Linux、macOS 或 Unix：

```
aws application-autoscaling delete-scaling-policy \
    --policy-name myscalablepolicy \
    --resource-id replication-group/myscalablecluster \
    --service-namespace elasticache \
    --scalable-dimension elasticache:replication-group:Replicas \
```

針對 Windows：

```
aws application-autoscaling delete-scaling-policy ^
    --policy-name myscalablepolicy ^
    --resource-id replication-group/myscalablecluster ^
    --service-namespace elasticache ^
    --scalable-dimension elasticache:replication-group:Replicas ^
```

**API**

若要從 ElastiCache for Valkey 和 Redis OSS 叢集刪除擴展政策，請使用 [DeleteScalingPolicy](https://docs.aws.amazon.com/ApplicationAutoScaling/latest/APIReference/API_DeleteScalingPolicy.html) Application Auto Scaling API 操作搭配下列參數：
+ PolicyName - 規模調整政策的名稱。
+ ResourceID – 叢集的資源識別符。在此參數中，資源類型為 ReplicationGroup，唯一識別符為叢集的名稱，例如 `replication-group/myscalablecluster`。
+ ServiceNamespace - 將此值設為 elasticache。
+ ScalableDimension - 將此值設為 `elasticache:replication-group:Replicas`。

在下列範例中，您會`myscalablepolicy`使用 Application Auto Scaling API 從名為 `myscalablecluster`的叢集中刪除名為 的目標追蹤擴展政策。

```
POST / HTTP/1.1
>>>>>>> mainline
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
Content-Length: 219
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS
{
    "PolicyName": "myscalablepolicy",
    "ServiceNamespace": "elasticache",
    "ResourceId": "replication-group/myscalablecluster",
    "ScalableDimension": "elasticache:replication-group:Replicas"
}
```

# CloudFormation 使用 Auto Scaling 政策
<a name="AutoScaling-with-Cloudformation"></a>

此程式碼片段顯示如何建立排定的動作，並使用資源 [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) 將其套用到 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html) 資源。其使用 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) 和 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 內部函數來建構 `ResourceId` 屬性，該屬性具有相同範本中指定的 `AWS::ElastiCache::ReplicationGroup` 資源的邏輯名稱。

```
ScalingTarget:
   Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
   Properties:
     MaxCapacity: 0
     MinCapacity: 0
     ResourceId: !Sub replication-group/${logicalName}
     ScalableDimension: 'elasticache:replication-group:Replicas'
     ServiceNamespace: elasticache
     RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/elasticache.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG"

  ScalingPolicy:
    Type: "AWS::ApplicationAutoScaling::ScalingPolicy"
    Properties:
      ScalingTargetId: !Ref ScalingTarget
      ServiceNamespace: elasticache
      PolicyName: testpolicy
      PolicyType: TargetTrackingScaling
      ScalableDimension: 'elasticache:replication-group:Replicas'
      TargetTrackingScalingPolicyConfiguration:
        PredefinedMetricSpecification:
          PredefinedMetricType: ElastiCacheReplicaEngineCPUUtilization
        TargetValue: 40
```

# 排程擴展
<a name="AutoScaling-with-Scheduled-Scaling-Replicas"></a>

按照排程進行擴展讓您能夠因應可預測的需求變化，據以擴展您的應用程式。若要使用排程擴展，您可以建立排程動作，指示 ElastiCache for Valkey 和 Redis OSS 在特定時間執行擴展活動。當您建立排程動作時，您可以指定現有的 ElastiCache 叢集、應進行擴展活動的時間、最小容量和最大容量。您可以建立僅擴展一次或依週期性排程擴展的排程動作。

 您只能為已存在的 ElastiCache 叢集建立排程動作。您無法在建立叢集的同時建立排程動作。

如需排程動作建立、管理和刪除作業相關術語的詳細資訊，請參閱[排程動作建立、管理和刪除作業常用的命令](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scheduled-scaling.html#scheduled-scaling-commonly-used-commands) 

**建立一次性排程動作：**

類似於碎片維度。請參閱 [排程擴展](AutoScaling-with-Scheduled-Scaling-Shards.md)。

**刪除排程動作**

類似於碎片維度。請參閱 [排程擴展](AutoScaling-with-Scheduled-Scaling-Shards.md)。

**使用 AWS CLI 管理排定的擴展**

使用下列 application-autoscaling API：
+ [put-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scheduled-action.html) 
+ [describe-scheduled-actions](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scheduled-actions.html) 
+ [delete-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scheduled-action.html) 

## 使用 CloudFormation 建立 Auto Scaling 政策
<a name="AutoScaling-with-Cloudformation-Update-Action"></a>

此程式碼片段顯示如何建立排定的動作，並使用資源 [AWS::ApplicationAutoScaling::ScalableTarget](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalabletarget.html) 將其套用到 [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html) 資源。其使用 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html) 和 [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html) 內部函數來建構 `ResourceId` 屬性，該屬性具有相同範本中指定的 `AWS::ElastiCache::ReplicationGroup` 資源的邏輯名稱。

```
ScalingTarget:
   Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
   Properties:
     MaxCapacity: 0
     MinCapacity: 0
     ResourceId: !Sub replication-group/${logicalName}
     ScalableDimension: 'elasticache:replication-group:Replicas'
     ServiceNamespace: elasticache
     RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/aws-service-role/elasticache.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG"
     ScheduledActions:
       - EndTime: '2020-12-31T12:00:00.000Z'
         ScalableTargetAction:
           MaxCapacity: '5'
           MinCapacity: '2'
         ScheduledActionName: First
         Schedule: 'cron(0 18 * * ? *)'
```

# 修改叢集模式
<a name="modify-cluster-mode"></a>

Valkey 和 Redis OSS 是分散式記憶體內資料庫，可支援碎片和複寫。ElastiCache Valkey 和 Redis OSS 叢集是分散式實作，允許跨多個節點分割資料。ElastiCache for Redis OSS 叢集有兩種操作模式：啟用叢集模式 (CME) 和停用叢集模式 (CMD)。在 CME 中，Valkey 和 Redis OSS 引擎可做為具有多個碎片和節點的分散式資料庫，而在 CMD 中，Valkey 和 Redis OSS 可做為單一節點。

在從 CMD 遷移至 CME 之前，必須滿足下列條件：

**重要**  
叢集模式組態只能從停用叢集模式變更為啟用叢集模式。還原此組態是不可能的。
+ 叢集可能只有資料庫 0 中的金鑰。
+ 應用程式必須使用能夠使用叢集通訊協定並使用組態端點的 Valkey 或 Redis OSS 用戶端。
+ 必須在至少有 1 個複本的叢集上啟用自動容錯移轉。
+ 遷移所需的最低引擎版本為 Valkey 7.2 及更高版本，或 Redis OSS 7.0 及更高版本。

如要從 CMD 遷移至 CME，叢集模式組態必須從停用叢集模式變更為啟用叢集模式。這是一個兩步驟的程序，可確保遷移程序期間的叢集可用性。

**注意**  
您需要提供具有啟用叢集組態的參數群組，也就是說，已啟用叢集的參數設為 `yes`。如果您使用的是預設參數群組，ElastiCache for Redis OSS 會自動挑選具有啟用叢集組態的對應預設參數群組。已為 CMD 叢集將啟用叢集的參數值設為 `no`。當叢集移至相容模式時，做為修改動作的一部分，啟用叢集的參數值會隨之更新為 `yes`。  
如需詳細資訊，請參閱[使用 ElastiCache 參數群組設定引擎參數](ParameterGroups.md)

1. **準備** – 建立一個測試 CME 叢集，並確保您的堆疊已準備好一起運作。ElastiCache for Redis OSS 無法驗證您的準備狀態。如需詳細資訊，請參閱[為 Valkey 或 Redis OSS 建立叢集](Clusters.Create.md)。

1. 將**現有的 CMD 叢集組態修改為與叢集模式相容** – 在此模式中，將部署單一碎片，ElastiCache for Redis OSS 將做為單一節點運作，也可以做為單一碎片叢集運作。相容模式表示用戶端應用程式可以使用任一通訊協定與叢集進行通訊。在此模式中，應用程式必須重新設定為開始使用 Valkey 或 Redis OSS 叢集通訊協定和組態端點。若要將 Valkey 或 Redis OSS 叢集模式變更為叢集模式相容，請遵循下列步驟：
**注意**  
在相容模式下，叢集不允許使用其他修改操作，例如擴展和引擎版本。此外，在 [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html) 要求中定義叢集模式參數時，無法修改參數 (`cacheParameterGroupName` 除外)。

   1. 使用 AWS 管理主控台，請參閱 [修改複寫群組](Replication.Modify.md) 並將叢集模式設定為**相容**

   1. 使用 API，請參閱 [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html) 並將 `ClusterMode` 參數更新為 `compatible`。

   1. 使用 AWS CLI，請參閱 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html) 並將 `cluster-mode` 參數更新為 `compatible`。

   將 Valkey 或 Redis OSS 叢集模式變更為叢集模式相容之後，[DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html) API 會傳回 ElastiCache for Redis OSS 叢集組態端點。叢集配置端點是單一端點，可供應用程式用來連線至叢集。如需詳細資訊，請參閱[在 ElastiCache 中尋找連線端點](Endpoints.md)。

1. **將叢集組態修改為啟用叢集模式** – 一旦叢集模式設為叢集模式相容之後，第二個步驟即是將叢集組態修改為啟用叢集模式。在此模式下，單一碎片正在執行，客戶現在可以擴展其叢集或修改其他叢集組態。

   若要將叢集模式變更為已啟用，請依照下列步驟進行：

   開始之前，請確定您的 Valkey 或 Redis OSS 用戶端已使用叢集通訊協定遷移至 ，且叢集的組態端點未使用。

   1. 使用 AWS 管理主控台，請參閱 [修改複寫群組](Replication.Modify.md) 並將叢集模式設定為**已啟用**。

   1. 使用 API，請參閱 [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html) 並將 `ClusterMode` 參數更新為 `enabled`。

   1. 使用 AWS CLI，請參閱 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html) 並將 `cluster-mode` 參數更新為 `enabled`。

   將叢集模式變更為啟用後，端點將根據 Valkey 或 Redis OSS 叢集規格進行設定。[DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html) API 將以 `enabled` 的型式傳回叢集模式參數，以及現在可供應用程式用於連接到叢集的叢集端點。

   請注意，叢集模式變更為啟用後，叢集端點將會變更。請務必使用新端點更新您的應用程式。

您也可以選擇從叢集模式相容恢復到停用叢集模式 (CMD)，並保留原始組態。

**從叢集模式相容將叢集組態修改為停用叢集模式**

1. 使用 AWS 管理主控台，請參閱 [修改複寫群組](Replication.Modify.md) 並將叢集模式設定為**已停用**

1. 使用 API，請參閱 [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html) 並將 `ClusterMode` 參數更新為 `disabled`。

1. 使用 AWS CLI，請參閱 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html) 並將 `cluster-mode` 參數更新為 `disabled`。

將叢集模式變更為停用之後，[DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html) API 會將叢集模式參數以 `disabled` 的形式傳回。

# 使用全域資料存放區跨AWS區域複寫
<a name="Redis-Global-Datastore"></a>

**注意**  
全域資料存放區目前僅適用於節點型叢集。

透過使用全域資料存放區功能，您可以跨AWS區域使用全受管、快速、可靠且安全的 Valkey 或 Redis OSS 叢集複寫。使用此功能，您可以建立跨區域僅供讀取複本叢集，以跨AWS區域啟用低延遲讀取和災難復原。

在以下各節中，您可以找到如何使用全域資料存放區的描述。

**Topics**
+ [概觀](#Redis-Global-Data-Stores-Overview)
+ [先決條件和限制](Redis-Global-Datastores-Getting-Started.md)
+ [使用全域資料存放區 (主控台)](Redis-Global-Datastores-Console.md)
+ [使用全域資料存放區 (CLI)](Redis-Global-Datastores-CLI.md)

## 概觀
<a name="Redis-Global-Data-Stores-Overview"></a>

每個*全域資料存放區*都是一個或多個叢集的集合，用於彼此複寫。

全域資料存放區由下列項目組成：
+ **主要 (主動) 叢集** - 主要叢集接受複寫到全域資料存放區內所有叢集的寫入。主要叢集也接受讀取請求。
+ **次要 (被動) 叢集** - 次要叢集只接受讀取要求，並從主要叢集複寫資料更新。次要叢集必須位於與主要叢集不同的AWS區域。

當您在 ElastiCache for Valkey 或 Redis OSS 中建立全域資料存放區時，它會自動將您的資料從主要叢集複寫到次要叢集。您可以選擇複寫 Valkey 或 Redis OSS 資料的AWS區域，然後在該區域中建立次要叢集AWS。然後 ElastiCache 會設定和管理兩個叢集之間的自動非同步資料複寫。

使用適用於 Valkey 或 Redis OSS 的全域資料存放區具有下列優點：
+ **地理效能** – 透過在其他AWS區域中設定遠端複本叢集並在它們之間同步資料，您可以減少該AWS區域中的資料存取延遲。全域資料存放區可以透過跨AWS區域提供低延遲的地理本機讀取，協助提高應用程式的回應能力。
+ **災難復原** - 如果全域資料存放區中的主要叢集發生降級，您可以將次要叢集升級為新的主要叢集。您可以透過連接到包含次要叢集的任何AWS區域來執行此操作。

下圖顯示了全域資料存放區如何運作。

![\[全域資料存放區\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/Global-DataStore.png)


# 先決條件和限制
<a name="Redis-Global-Datastores-Getting-Started"></a>

在開始使用全域資料存放區之前，請注意下列事項：
+ 下列 AWS 區域支援全域資料存放區：
  + **非洲** - 開普敦
  + **亞太區域** - 香港、海德拉巴、雅加達、馬來西亞、墨爾本、孟買、大阪、首爾、新加坡、雪梨、泰國和東京 
  + **加拿大** - 加拿大中部和加拿大西部 （卡加利）
  + **中國** - 北京和寧夏
  + **歐洲 ** - 法蘭克福、倫敦、愛爾蘭、米蘭、巴黎、西班牙、斯德哥爾摩和蘇黎世
  + **AWS GovCloud** -美國西部和美國東部
  + **以色列** - 特拉維夫
  + **中東** - 巴林和阿拉伯聯合大公國
  + **美國** - 東部 （維吉尼亞北部和俄亥俄） 和美國西部 （加利佛尼亞北部和奧勒岡）
  + **南美洲** - 墨西哥 （中部） 和聖保羅
+  全域資料存放區中的所有叢集 (主要和次要) 應具有相同數量的主節點、節點類型、引擎版本和碎片數量 (在啟用叢集模式的情況下)。全域資料存放區中的每個叢集都可以擁有不同數量的僅供讀取複本，以容納該叢集的本機讀取流量。

  如果您計劃使用現有的單一節點叢集，則必須啟用複寫。
+ 大型和以上大小的執行個體支援全域資料存放區。
+ 您可以為主要叢集設定複寫，從一個 AWS 區域到最多兩個其他 AWS 區域中的次要叢集。
**注意**  
例外情況是中國 (北京) 區域和中國 (寧夏) 區域，在兩個區域之間只能進行複寫。
+ 您只能在 VPC 叢集中使用全域資料存放區。如需詳細資訊，請參閱[用於存取 Amazon VPC 中 ElastiCache 快取的存取模式](elasticache-vpc-accessing.md)。當您使用 EC2-Classic 時，不支援全域資料存放區。如需詳細資訊，請參閱《Amazon EC2 使用者指南》中的 [EC2-Classic](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/ec2-classic-platform.html)。 *Amazon EC2 *
**注意**  
目前無法在 [搭配 ElastiCache 使用本地區域](Local_zones.md) 使用全域資料存放區。
+ ElastiCache 不支援從一個區域自動容錯移轉到另一個 AWS 區域。必要時，您可以手動升級次要叢集。如需範例，請參閱「[將次要叢集升級為主要叢集](Redis-Global-Datastores-Console.md#Redis-Global-Datastores-Console-Promote-Secondary)」。
+ 若要從現有資料啟動，請使用現有叢集做為主要叢集以建立全域資料存放區。我們不支援將現有叢集新增為次要叢集。將叢集新增為次要叢集的程序會清除資料，這可能會導致資料遺失。
+ 當您修改屬於全域資料存放區之叢集的本機參數群組時，參數更新會套用至所有叢集。
+ 您可以利用垂直方式 (擴展和縮減) 和水平方式 (橫向縮減和擴展) 來擴展區域叢集。您可以透過修改全域資料存放區來擴展叢集。全域資料存放區中的所有區域叢集隨後便會進行擴展，而不會發生中斷。如需詳細資訊，請參閱[擴展 ElastiCache](Scaling.md)。
+ 全域資料存放區支援[靜態加密](at-rest-encryption.md)、[傳輸中加密](in-transit-encryption.md)和 [AUTH](auth.md)。
+ 全域資料存放區不支援網際網路通訊協定第 6 版 (IPv6)。
+  全域資料存放區支援 AWS KMS 金鑰。如需詳細資訊，請參閱 *AWS Key Management Service 開發人員指南*中的 [AWS KMS 金鑰管理服務概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)。

**注意**  
全域資料存放區支援[發佈/訂閱簡訊](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/elasticache-use-cases.html#elasticache-for-redis-use-cases-messaging)，規定如下：  
若是停用叢集模式，完全支援發佈/訂閱簡訊。在主要 AWS 區域的主要叢集上發佈的事件會傳播到次要 AWS 區域。
若是啟用叢集模式，適用下列條件：  
對於不在金鑰空間中的已發佈事件，只有相同區域中的訂閱者 AWS 會收到事件。
對於已發佈的金鑰空間事件，所有 AWS 區域中的訂閱者都會收到事件。

# 使用全域資料存放區 (主控台)
<a name="Redis-Global-Datastores-Console"></a>

若要使用主控台建立全域資料存放區，請遵循下列兩個步驟程序：

1. 使用現有叢集或建立新叢集，來建立主要叢集。引擎必須是 Valkey 7.2 或更新版本，或 Redis OSS 5.0.6 或更新版本。

1. 在不同的 AWS 區域中新增最多兩個次要叢集，再次使用 Valkey 7.2 或更新版本，或 Redis OSS 5.0.6 或更新版本。

下列程序引導您如何為 Valkey 或 Redis OSS 建立全域資料存放區，並使用 ElastiCache 主控台執行其他操作。

**Topics**
+ [使用現有叢集建立全域資料存放區](#Redis-Global-Datastores-Console-Create-Primary)
+ [使用新的主要叢集建立新的全域資料存放區](#Redis-Global-Datastores-Create-From-Scratch)
+ [檢視全域資料存放區詳細資訊](#Redis-Global-Datastores-Console-Details)
+ [將區域新增至全域資料存放區](#Redis-Global-Datastores-Console-Create-Secondary)
+ [修改全域資料存放區](#Redis-Global-Datastores-Console-Modify-Regional-Clusters)
+ [將次要叢集升級為主要叢集](#Redis-Global-Datastores-Console-Promote-Secondary)
+ [從全域資料存放區移除區域](#Redis-Global-Datastore-Console-Remove-Region)
+ [刪除全域資料存放區](#Redis-Global-Datastores-Console-Delete-GlobalDatastore)

## 使用現有叢集建立全域資料存放區
<a name="Redis-Global-Datastores-Console-Create-Primary"></a>

在此案例中，您使用現有的叢集做為新全域資料存放區的主要叢集。然後您可以在不同的 AWS 區域中建立次要唯讀叢集。這個次要叢集會從主要叢集接收自動的非同步更新。

**重要**  
現有叢集必須使用 Valkey 7.2 或更新版本的引擎，或 Redis OSS 5.0.6 或更新版本的引擎。

**使用現有叢集建立全域資料存放區**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 在導覽窗格中，選擇**全域資料存放區**，然後選擇**建立全域資料存放區**。

1. 在**主要叢集設定**頁面上，執行下列動作：
   + 在**全域資料存放區資訊**欄位中，輸入新全域資料存放區的名稱。
   + (選用) 輸入 **Description (描述)** 值。

1. 在**區域叢集**下，選取**使用現有的區域叢集**。

1. 在**現有叢集**下，選取您要使用的現有叢集。

1. 保持以下選項不變。它們會預先填入以符合主要叢集組態，您無法變更它們。
   + 引擎版本
   + 節點類型
   + 參數群組
**注意**  
ElastiCache 會自動從所提供的參數群組值產生新的參數群組，並將新參數群組套用至叢集。使用此新參數群組可修改全域資料存放區上的參數。每個自動產生的參數群組都只與一個叢集相關聯，因此也只與一個全域資料存放區相關聯。
   + 碎片數量
   + Encryption at rest (靜態加密) - 啟用存放在磁碟上的資料加密功能。如需詳細資訊，請參閱[靜態加密](at-rest-encryption.md)。
**注意**  
您可以選擇**客戶受管 AWS KMS** 金鑰並選擇金鑰，以提供不同的加密金鑰。如需詳細資訊，請參閱[使用客戶受管 AWS KMS 金鑰](at-rest-encryption.md#using-customer-managed-keys-for-elasticache-security)。
   + Encryption in-transit (傳輸中加密) - 啟用傳輸中資料加密功能。如需詳細資訊，請參閱[傳輸中加密](in-transit-encryption.md)。對於 Valkey 7.2 及更新版本和 Redis OSS 6.0 及更新版本，如果您啟用傳輸中加密，系統會提示您指定下列其中一個**存取控制**選項：
     + **No Access Control (無存取控制)** - 這是預設的設定。這表示沒有任何限制。
     + **User Group Access Control List (使用者群組存取控制清單)** - 選擇具有已定義的一組使用者和可用作業許可的使用者群組。如需詳細資訊，請參閱[使用主控台和 CLI 管理使用者群組](Clusters.RBAC.md#User-Groups)。
     + **AUTH 預設使用者** – Valkey 或 Redis OSS 伺服器的身分驗證機制。如需詳細資訊，請參閱 [AUTH](auth.md)。

1. (選用) 視需要更新其餘的次要叢集設定。這些值會預先填入與主要叢集相同的值，但您可以更新它們以符合該叢集的特定需求。
   + 連線埠
   + 複本數量
   + 子網路群組
   + 偏好的可用區域
   + 安全群組
   + 客戶受管 (AWS KMS 金鑰）
   + AUTH 字符
   + 啟用自動備份
   + Backup retention period (備份保留期間)
   + 備份時段
   + Maintenance window (維護時段)
   + SNS 通知的主題

1. 選擇**建立**。這樣做會將全域資料存放區的狀態設定為 **Creating (正在建立)**。狀態轉變為 **Modifying (修改中)**之後，主要叢集便與全域資料存放區建立關聯，且次要叢集處於 **Associating (建立關聯中)**狀態。

   在主要叢集和次要叢集皆關聯至全域資料存放區之後，狀態會變更為 **Available (可用)**。此時，您已具備接受讀取和寫入的主要叢集，以及接受從主要叢集複寫之讀取的次要叢集。

   此頁面已更新，指出叢集是否為全域資料存放區的一部分，包括：
   + **Global Datastore (全域資料存放區)** - 叢集所屬全域資料存放區的名稱。
   + **Global Datastore Role (全域資料存放區角色)** - 主要或次要叢集的角色。

您最多可以在不同的區域中新增一個額外的次要叢集 AWS 。如需詳細資訊，請參閱[將區域新增至全域資料存放區](#Redis-Global-Datastores-Console-Create-Secondary)。

## 使用新的主要叢集建立新的全域資料存放區
<a name="Redis-Global-Datastores-Create-From-Scratch"></a>

如果您選擇以新叢集建立全域資料存放區，請依照下列程序操作。

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 在導覽窗格中，選擇**全域資料存放區**，然後選擇**建立全域資料存放區**。

1. 在 **Primary cluster settings** (主要叢集設定) 中，執行下列動作：

   1. 針對 **Cluster mode** (叢集模式)，選擇 **Enabled** (已啟用) 或 **Disabled** (已停用)。

   1. 針對 **Global Datastore info** (全域資料存放區資訊)，輸入 **Name** (名稱) 的值。ElastiCache 會使用此尾碼來產生全域資料存放區的唯一名稱。您可以使用您在此處指定的尾碼來搜尋全域資料存放區。

   1. (選用) 輸入 **Global Datastore Description (全域資料存放區描述)** 的值。

1. 在 **Regional cluster** (區域叢集) 中：

   1. 針對**區域**，選擇可用的 AWS 區域。

   1. 選擇 **Create new regional cluster** (建立新的區域叢集)，或 **Use existing regional cluster** (使用現有的區域叢集)

   1. 如果選擇 **Create new regional cluster** (建立新的區域叢集)，請在 **Cluster info** (叢集資訊) 中，輸入叢集的名稱和選用描述。

   1. 在 **Location** (位置) 中，建議您接受 **Multi-AZ** (多可用區域) 和 **Auto-failover** (自動容錯移轉) 的預設設定。

1. 在 **Cluster settings** (叢集設定) 中

   1. 針對 **Engine version** (引擎版本)，選擇可用版本，即 5.0.6 或更新版本。

   1. 針對 **Port** (連接埠)，使用預設連接埠 6379。如果您基於任何原因需要使用不同的連接埠，請輸入連接埠號碼。

   1. 對於 **Parameter group (參數群組)**，請選擇參數群組或新建參數群組。參數群組可控制叢集的執行時間參數。如需參數群組的詳細資訊，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)和[建立 ElastiCache 參數群組](ParameterGroups.Creating.md)。
**注意**  
當您選取參數群組來設定引擎組態值時，該參數群組會套用至全域資料存放區中的所有叢集。在 **Parameter Groups (參數群組)** 頁面上，yes/no (是/否) **Global (全域)** 屬性指出參數群組是否為全域資料存放區的一部分。

   1. 在 **Node type (節點類型)** 中，選擇向下箭頭 (![\[Downward-pointing triangle icon, typically used to indicate a dropdown menu.\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCache-DnArrow.png))。在 **Change node type (變更節點類型)** 對話方塊中，為您想要的節點類型選擇 **Instance family (執行個體系列)** 的值。然後選擇您要用於此叢集的節點類型，然後選擇 **Save (儲存)**。

      如需詳細資訊，請參閱[選擇您的節點大小](CacheNodes.SelectSize.md)。

      如果選擇 r6gd 節點類型，將自動啟用資料分層。如需詳細資訊，請參閱[ElastiCache 中的資料分層](data-tiering.md)。

   1. 如果您要建立 Valkey 或 Redis OSS （停用叢集模式） 叢集：

      針對 **Number of replicas** (複本數)，選擇您要讓此叢集具備的複本數目。

   1. 如果您要建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集：

      1. 針對**碎片數量**，選擇您希望此 Valkey 或 Redis OSS （啟用叢集模式） 叢集的碎片數量 （分割區/節點群組）。

         對於某些版本的 Valkey 或 Redis OSS （啟用叢集模式），您可以動態變更叢集中的碎片數量：
         + **Redis OSS 3.2.10 和更新版本** – 如果您的叢集正在執行 Redis OSS 3.2.10 或更新版本，您可以動態變更叢集中的碎片數量。如需詳細資訊，請參閱[擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)。
         + **其他 Redis OSS 版本** – 如果您的叢集在 3.2.10 版之前執行 Redis OSS 版本，則有另一種方法。在這種情況下，若要變更叢集中的碎片數量，請使用新的碎片數量建立新的叢集。如需詳細資訊，請參閱[從備份還原到新的快取](backups-restoring.md)。

      1. 針對 **Replicas per shard (每個碎片的複本)**，選擇您要讓每個碎片具備的僅供讀取複本節點數目。

         下列限制適用於 Valkey 或 Redis OSS （啟用叢集模式）。
         + 如果您已啟用多個可用區，請確保每個碎片至少有一個複本。
         + 使用主控台建立叢集時，每個碎片的複本數都相同。
         + 每個碎片的僅供讀取複本數均固定而無法變更。如果您發現每個碎片 (API/CLI：節點群組) 需要更多或更少的複本，則必須使用新的複本數來建立新叢集。如需詳細資訊，請參閱[教學課程：使用外部建立的備份植入新的節點型叢集](backups-seeding-redis.md)。

1. 針對 **Subnet group settings** (子網路群組設定)，選擇要套用至此叢集的子網路。ElastiCache 提供預設 IPv4 子網路群組，或者您可以選擇建立新的子網路群組。針對 IPv6，您必須建立具有 IPv6 CIDR 區塊的子網路群組。若您選擇 **dual stack** (雙堆疊)，則須選取 IPv6 或 IPv4 做為探索 IP 類型。

   如需詳細資訊，請參閱[在您的 VPC 中建立子網路](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#AddaSubnet)。

1. 針對 **Availability zone placements** (可用區域置放)，您有兩種選項：
   + **No preference (無偏好設定)** - ElastiCache 會選擇可用區域。
   + **Specify availability zones (指定可用區域)** - 您可為每個叢集指定可用區域。

     如果您選擇指定可用區域，請針對每個碎片中的每個叢集，從清單中選擇可用區域。

   如需詳細資訊，請參閱[選擇 ElastiCache 的區域和可用區域](RegionsAndAZs.md)。  
![\[圖片：指定 Keyspace 和可用區域\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCache-ClusterOn-Slots-AZs.png)

   *指定 Keyspace 和可用區域*

1. 選擇 **Next** (下一步)

1. 在**進階 Valkey 和 Redis OSS 設定**下

   1. 針對 **Security** (安全)：

     1. 若要加密資料，您有下列選項：
        + **Encryption at rest (靜態加密)** - 啟用存放在磁碟上的資料加密功能。如需詳細資訊，請參閱[靜態加密](at-rest-encryption.md)。
**注意**  
您可以選擇**客戶受管 AWS KMS 金鑰**並選擇金鑰，以提供不同的加密金鑰。如需詳細資訊，請參閱[使用來自 AWS KMS 的客戶受管金鑰](at-rest-encryption.md#using-customer-managed-keys-for-elasticache-security)。
        + **Encryption in-transit (傳輸中加密)** - 啟用傳輸中資料加密功能。如需詳細資訊，請參閱[傳輸中加密](in-transit-encryption.md)。針對 Valkey 7.2 及更高版本，以及 Redis OSS 6.0 及更高版本，如果您啟用傳輸中加密，系統會提示您指定下列其中一個**存取控制**選項：
          + **No Access Control (無存取控制)** - 這是預設的設定。這表示使用者存取叢集時不受任何限制。
          + **User Group Access Control List (使用者群組存取控制清單)** - 選取的使用者群組需具有可存取叢集的已定義使用者集。如需詳細資訊，請參閱[使用主控台和 CLI 管理使用者群組](Clusters.RBAC.md#User-Groups)。
          + **AUTH 預設使用者** – Valkey 或 Redis OSS 伺服器的身分驗證機制。如需詳細資訊，請參閱 [AUTH](auth.md)。
        + **AUTH** – Valkey 或 Redis OSS 伺服器的身分驗證機制。如需詳細資訊，請參閱 [AUTH](auth.md)。
**注意**  
對於 3.2.6 以上版本的 Redis OSS，除了 3.2.10 版之外，AUTH 是唯一的選項。

     1. 在 **Security groups (安全群組)** 中，選擇要用於此叢集的安全群組。*安全群組*可做為防火牆來控制叢集的網路存取。您可以為 VPC 使用預設安全群組，或建立新的安全群組。

        如需安全群組的詳細資訊，請參閱 *Amazon VPC 使用者指南*中的 [VPC 的安全群組](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

1. 針對定期排程自動備份，請選取 **Enable automatic backups (啟用自動備份)**，然後輸入每份自動備份要保存的天數，過了此天數後即會自動將其刪除。如果您不想定期排程自動備份，請清除 **Enable automatic backups (啟用自動備份)** 核取方塊。在任何一種情況下，您都可以選擇建立手動備份。

   如需備份和還原的詳細資訊，請參閱 [快照和還原](backups.md)。

1. (選用) 指定維護時段。*維護時段*是 ElastiCache 排程的每週叢集系統維護時間，通常長度為一小時。您可以讓 ElastiCache 選擇維護時段的日期和時間 (*No preference* (無偏好設定))，或自行選擇日期、時間和持續時間 (*Specify maintenance window* (指定維護時段))。如果您從清單中選擇 *Specify maintenance window (指定維護時段)*，請為您的維護時段選擇 *Start day (開始日)*、*Start time (開始時間)* 和 *Duration (持續時間)*。所有時間均以 UCT 時間表示。

   如需詳細資訊，請參閱[管理 ElastiCache 叢集維護](maintenance-window.md)。

1. (選用) 針對 **Logs (日誌)**：
   + 在 **Log format (日誌格式)** 下，選擇 **Text (文字)** 或 **JSON**。
   + 在 **Destination Type (目的地類型)** 下，選擇 **CloudWatch Logs** 或 **Kinesis Firehose**。
   + 在**日誌目的地**下，選擇**建立新** ，然後輸入您的 CloudWatch Logs 日誌群組名稱或 Firehose 串流名稱，或選擇**選取現有**，然後選擇您的 CloudWatch Logs 日誌群組名稱或您的 Firehose 串流名稱。

1. 針對 **Tags** (標籤)，為協助您管理叢集和其他 ElastiCache 資源，您可以用標籤形式將自己的中繼資料指派給每個資源。如需詳細資訊，請參閱[為您的 ElastiCache 資源加上標籤](Tagging-Resources.md)。

1. 檢閱所有項目和選項，然後進行任何所需的更正。就緒後，請選擇 **Next** (下一步)。

1. 在上述步驟中設定叢集之後，現在設定次要叢集詳細資訊。

1. 在**區域叢集**下，選擇 叢集所在的 AWS 區域。

1. 在 **Cluster info** (叢集資訊) 中，輸入叢集的名稱和選用描述。

1. 下列選項會預先填入以符合主要叢集組態，且無法變更：
   + 位置
   + 引擎版本
   + 執行個體類型
   + 節點類型
   + 碎片數量
   + 參數群組
**注意**  
ElastiCache 會自動從所提供的參數群組值產生新的參數群組，並將新參數群組套用至叢集。使用此新參數群組可修改全域資料存放區上的參數。每個自動產生的參數群組都只與一個叢集相關聯，因此也只與一個全域資料存放區相關聯。
   + Encryption at rest (靜態加密) - 啟用存放在磁碟上的資料加密功能。如需詳細資訊，請參閱[靜態加密](at-rest-encryption.md)。
**注意**  
您可以選擇**客戶受管 AWS KMS** 金鑰並選擇金鑰，以提供不同的加密金鑰。如需詳細資訊，請參閱[使用客戶受管 AWS KMS 金鑰](at-rest-encryption.md#using-customer-managed-keys-for-elasticache-security)。
   + Encryption in-transit (傳輸中加密) - 啟用傳輸中資料加密功能。如需詳細資訊，請參閱[傳輸中加密](in-transit-encryption.md)。對於 Valkey 7.2 及更高版本，以及 Redis OSS 6.4 及更高版本，如果您啟用傳輸中加密，系統會提示您指定下列其中一個**存取控制**選項：
     + **No Access Control (無存取控制)** - 這是預設的設定。這表示使用者存取叢集時不受任何限制。
     + **User Group Access Control List (使用者群組存取控制清單)** - 選擇的使用者群組需具有可存取叢集的已定義使用者集。如需詳細資訊，請參閱[使用主控台和 CLI 管理使用者群組](Clusters.RBAC.md#User-Groups)。
     + **AUTH 預設使用者** – Valkey 或 Redis OSS 伺服器的身分驗證機制。如需詳細資訊，請參閱 [AUTH](auth.md)。
**注意**  
對於 4.0.2 和 6.0.4 之間的 Redis OSS 版本，當第一次支援傳輸中加密時，AUTH 是唯一的選項。

   其餘的次要叢集設定會預先填入與主要叢集相同的值，但是可以更新下列項目以符合該叢集的特定需求：
   + 連線埠
   + 複本數量
   + 子網路群組
   + 偏好的可用區域 
   + 安全群組
   + 客戶受管 (AWS KMS 金鑰） 
   + AUTH 字符
   + 啟用自動備份
   + Backup retention period (備份保留期間)
   + 備份時段
   + Maintenance window (維護時段)
   + SNS 通知的主題

1. 選擇**建立**。這樣做會將全域資料存放區的狀態設定為 **Creating (正在建立)**。在主要叢集和次要叢集皆關聯至全域資料存放區之後，狀態會變更為 **Available (可用)**。您已具備接受讀取和寫入的主要叢集，以及接受從主要叢集複寫之讀取的次要叢集。

   此頁面也會更新，以指出叢集是否為全域資料存放區的一部分，包括下列項目：
   + **Global Datastore (全域資料存放區)** - 叢集所屬全域資料存放區的名稱。
   + **Global Datastore Role (全域資料存放區角色)** - 主要或次要叢集的角色。

您最多可以在不同的區域中新增一個額外的次要叢集 AWS 。如需詳細資訊，請參閱[將區域新增至全域資料存放區](#Redis-Global-Datastores-Console-Create-Secondary)。

## 檢視全域資料存放區詳細資訊
<a name="Redis-Global-Datastores-Console-Details"></a>

您可以在全域資料存放區頁面檢視現有**全域資料存放**區的詳細資訊，也可以修改它們。

**檢視全域資料存放區詳細資訊**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 在導覽窗格中，選擇**全域資料存放區**，然後選擇可用的全域資料存放區。

接著，您可以檢查下列全域資料存放區屬性：
+ **全域資料存放區名稱：**全域資料存放區的名稱
+ **描述：**全域資料存放區的描述
+ **狀態：**選項包括：
  + 正在建立
  + Modifying (正在修改)
  + 可用性
  + 正在刪除
  + Primary-Only (僅限主要) - 此狀態表示全域資料存放區僅包含主要叢集。所有次要叢集都已刪除或未成功建立。
+ **叢集模式：**啟用或停用
+ **引擎版本：**執行全域資料存放區的 Valkey 或 Redis OSS 引擎版本
+ **執行個體節點類型：**用於全域資料存放區的節點類型
+ **靜態加密：**啟用或停用
+ **傳輸中加密：**啟用或停用
+ **AUTH：**啟用或停用

您可以對全域資料存放區進行下列變更：
+ [將區域新增至全域資料存放區](#Redis-Global-Datastores-Console-Create-Secondary) 
+ [從全域資料存放區移除區域](#Redis-Global-Datastore-Console-Remove-Region) 
+ [將次要叢集升級為主要叢集](#Redis-Global-Datastores-Console-Promote-Secondary)
+ [修改全域資料存放區](#Redis-Global-Datastores-Console-Modify-Regional-Clusters)

全域資料存放區頁面也會列出組成全域資料存放區的個別叢集，以及每個叢集的下列屬性：
+ **區域** - 儲存叢集 AWS 的區域
+ **Role (角色)** - 主要或次要
+ **Cluster name (叢集名稱)** - 叢集的名稱
+ **Status (狀態)** - 選項包括：
  + **Associating (正在關聯)** - 叢集正在與全域資料存放區進行關聯
  + **Associated (已關聯)** - 叢集已關聯至全域資料存放區關聯
  + **Disassociating (正在取消關聯)** - 正在進行從使用全域資料存放區名稱的全域資料存放區移除次要叢集的程序。之後，次要叢集不會再接收來自主要叢集的更新，但會保留為該 AWS 區域中的獨立叢集。
  + **Disassociated (已取消關聯)** - 次要叢集已從全域資料存放區移除，現在是其 AWS 區域中的獨立叢集。
+ **全域資料存放區複本延遲** – 顯示全域資料存放區中每個次要 AWS 區域的一個值。這是次要區域的主節點和主要區域的主節點之間的延遲。對於啟用叢集模式的 Valkey 或 Redis OSS，延遲表示碎片之間的最大延遲秒數。

## 將區域新增至全域資料存放區
<a name="Redis-Global-Datastores-Console-Create-Secondary"></a>

您最多可以將一個額外 AWS 區域新增至現有的全域資料存放區。在此案例中，您要在從主要叢集接收自動和非同步更新的個別 AWS 區域中建立唯讀叢集。

**將 AWS 區域新增至全域資料存放區**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 在導覽窗格中，選擇**全域資料存放區**，然後選取現有的全域資料存放區。

1. 選擇**新增區域叢集**，然後選擇要存放次要叢集 AWS 的區域。

1. 在**叢集資訊**下，輸入**名稱**的值，以及選擇性地輸入叢集的**描述**的值。

1. 保持以下選項不變。這些項目會預先填入以符合主要叢集組態，且您無法加以變更。
   + 引擎版本
   + 執行個體類型
   + 節點類型
   + 碎片數量
   + 參數群組
**注意**  
ElastiCache 會自動從所提供的參數群組值產生新的參數群組，並將新參數群組套用至叢集。使用此新參數群組可修改全域資料存放區上的參數。每個自動產生的參數群組都只與一個叢集相關聯，因此也只與一個全域資料存放區相關聯。
   + 靜態加密
**注意**  
您可以選擇**客戶受管 AWS KMS** 金鑰並選擇金鑰，以提供不同的加密金鑰。
   + 傳輸中加密
   + AUTH

1. (選用) 更新其餘的次要叢集設定。這些值會預先填入與主要叢集相同的值，但您可以更新它們以符合該叢集的特定需求：
   + 連線埠
   + 複本數量
   + 子網路群組
   + 偏好的可用區域
   + 安全群組
   + 客戶受管 AWS KMS 金鑰） 
   + AUTH 字符
   + 啟用自動備份
   + Backup retention period (備份保留期間)
   + 備份時段
   + Maintenance window (維護時段)
   + SNS 通知的主題

1. 選擇**新增**。

## 修改全域資料存放區
<a name="Redis-Global-Datastores-Console-Modify-Regional-Clusters"></a>

您可以修改區域叢集的屬性。除了將次要叢集升級為主要叢集之外，全域資料存放區上一次只能進行一項修改作業。如需詳細資訊，請參閱[將次要叢集升級為主要叢集](#Redis-Global-Datastores-Console-Promote-Secondary)。

**修改全域資料存放區**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 在導覽窗格中，選擇**全域資料存放**區，然後在**全域資料存放區名稱**中選擇全域資料存放區。

1. 選擇 **Modify (修改)**，然後選擇下列選項：
   + **Modify description (修改描述)** - 更新全域資料存放區的描述
   + **修改引擎版本** – 只有 Valkey 7.2 和更新版本或 Redis OSS 5.0.6 和更新版本可用。
   + **Modify node type (修改節點類型)** - 可利用垂直方式 (擴充規模和縮減規模) 和水平方式 (橫向縮減和擴展) 來擴展區域叢集。選項包括 R5 和 M5 節點系列。如需節點類型的詳細資訊，請參閱[支援的節點類型](CacheNodes.SupportedTypes.md)。
   + **Modify Automatic Failover (修改自動容錯移轉)** - 啟用或停用自動容錯移轉功能。當您啟用容錯移轉，而區域叢集中的主節點意外關閉時，ElastiCache 會容錯移轉到其中一個區域複本。如需詳細資訊，請參閱[自動容錯移轉](AutoFailover.md)。

   對於啟用叢集模式的 Valkey 或 Redis OSS 叢集：
   + **Add shards (新增碎片)** - 輸入要新增的碎片數目，並選擇性指定一或多個可用區域。
   + **刪除碎片** – 選擇要在每個 AWS 區域中刪除的碎片。
   + **Rebalance shards (重新平衡碎片)** - 重新平衡位置分佈，確保在叢集中現有的碎片間均勻分佈。

若要修改全域資料存放區的參數，請修改全域資料存放區的任何成員叢集參數群組。ElastiCache 會自動將此變更套用至該全域資料存放區內的所有叢集。若要修改該叢集的參數群組，請使用 Valkey 或 Redis OSS 主控台或 [ModifyCacheCluster](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyCacheCluster.html) API 操作。如需詳細資訊，請參閱[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。當您修改全域資料存放區中包含之任何叢集的參數群組時，它會套用至該全域資料存放區內的所有叢集。

若要重設整個參數群組或特定參數，請使用 [ResetCacheParameterGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ResetCacheParameterGroup.html) API 操作。

## 將次要叢集升級為主要叢集
<a name="Redis-Global-Datastores-Console-Promote-Secondary"></a>

如果主要叢集或 AWS 區域無法使用或遇到效能問題，您可以將次要叢集提升為主要叢集。即使正在進行其他修改，也可隨時進行升級。您也可以同時發佈多個升級，全域資料存放區最終會解析為一個主要叢集。如果您同時提升多個次要叢集，ElastiCache 無法保證哪個叢集最終解析為主要叢集。

**將次要叢集升級為主要叢集**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 在導覽窗格中，選擇**全域資料存放區**。

1. 選擇全域資料存放區名稱以檢視詳細資訊。

1. 選擇 **Secondary (次要)** 叢集。

1. 選擇 **Promote to primary (升級為主要)**。

   接著系統會提示您確認您的決定，並顯示下列警告：` Promoting a region to primary will make the cluster in this region as read/writable. Are you sure you want to promote the secondary cluster to primary?`

   `The current primary cluster in primary region will become secondary and will stop accepting writes after this operation completes. Please ensure you update your application stack to direct traffic to the new primary region.`

1. 如果您要繼續升級， 請選擇 **Confirm (確認)**，如果不想繼續升級，請選擇 **Cancel (取消)**。

如果您選擇確認，則全域資料存放區會移至**Modifying (正在修改)** 狀態，且在升級完成之前無法使用。

## 從全域資料存放區移除區域
<a name="Redis-Global-Datastore-Console-Remove-Region"></a>

您可以使用下列程序，從全域資料存放區移除 AWS 區域。

**從全域資料存放區移除 AWS 區域**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 在導覽窗格中，選擇**全域資料存放區**。

1. 選擇全域資料存放區。

1. 選擇您要移除的 **Region (區域)**。

1. 選擇 **Remove region (移除區域)**。
**注意**  
此選項僅適用於次要叢集。

   接著系統會提示您確認您的決定，並顯示下列警告：` Removing the region will remove your only available cross region replica for the primary cluster. Your primary cluster will no longer be set up for disaster recovery and improved read latency in remote region. Are you sure you want to remove the selected region from the global datastore?`

1. 如果您要繼續升級， 請選擇 **Confirm (確認)**，如果不想繼續升級，請選擇 **Cancel (取消)**。

如果您選擇確認，則會移除 AWS 區域，次要叢集不會再收到複寫更新。

## 刪除全域資料存放區
<a name="Redis-Global-Datastores-Console-Delete-GlobalDatastore"></a>

若要刪除全域資料存放區，請先移除所有次要叢集。如需詳細資訊，請參閱[從全域資料存放區移除區域](#Redis-Global-Datastore-Console-Remove-Region)。這樣做會使全域資料存放區處於 **primary-only (僅限主要)** 狀態。

**刪除全域資料存放區**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 在導覽窗格中，選擇**全域資料存放區**。

1. 在 **Global Datastore Name (全域資料存放區名稱)** 下，選擇您要刪除的全域資料存放區，然後選擇 **Delete (刪除)**。

   接著系統會提示您確認您的決定，並顯示下列警告：`Are you sure you want to delete this Global Datastore?`

1. 選擇 **刪除**。

全域資料存放區會轉換為 **Deleting (正在刪除)** 狀態。

# 使用全域資料存放區 (CLI)
<a name="Redis-Global-Datastores-CLI"></a>

您可以使用 AWS Command Line Interface (AWS CLI) 從命令列控制多個 AWS 服務，並透過指令碼將其自動化。您可以使用 AWS CLI 進行臨機操作 （一次性）。

## 下載和設定 AWS CLI
<a name="Redis-Global-Datastores-Downloading-CLI"></a>

 AWS CLI 會在 Windows、macOS 或 Linux 上執行。請使用下列程序來下載並進行設定。

**下載、安裝及設定 CLI**

1. 在[AWS 命令列界面](https://aws.amazon.com/cli)網頁上下載 AWS CLI。

1. 遵循*AWS Command Line Interface 《 使用者指南*》中安裝 AWS CLI 和設定 AWS CLI 的指示。

## 將 AWS CLI 與全域資料存放區搭配使用
<a name="Redis-Global-Datastores-Using-CLI"></a>

使用下列 CLI 作業來處理全域資料存放區：
+ [create-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-global-replication-group.html)

  ```
  aws elasticache create-global-replication-group \
     --global-replication-group-id-suffix my global datastore  \
     --primary-replication-group-id sample-repl-group  \
     --global-replication-group-description an optional description of the global datastore
  ```

  建立時，Amazon ElastiCache 會自動將字首套用至全域資料存放區 ID。每個 AWS 區域都有自己的字首。例如，在美國西部 (加利佛尼亞北部) 區域建立的全域資料儲存 ID 都以 "virxk" 開頭，加上您提供的尾碼名稱。尾碼與自動產生的字首結合，可保證跨多個區域的全域資料存放區名稱保持唯一性。

  下表列出每個 AWS 區域及其全域資料存放區 ID 字首。

    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/Redis-Global-Datastores-CLI.html)
+  [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html) - 使用此作業可透過將全域資料存放區的名稱提供給 `--global-replication-group-id` 參數，為全域資料存放區建立次要叢集。

  ```
  aws elasticache create-replication-group \
    --replication-group-id secondary replication group name \
    --replication-group-description “Replication group description" \
    --global-replication-group-id global datastore name
  ```

  呼叫此操作並傳入`--global-replication-group-id`值時，ElastiCache 會從全域複寫群組的主要複寫群組推斷下列參數的值。請勿傳入這些參數的值：

  `"PrimaryClusterId",`

  `"AutomaticFailoverEnabled",`

  ` "NumNodeGroups",`

  ` "CacheParameterGroupName",`

  ` "CacheNodeType",`

  ` "Engine",`

  ` "EngineVersion",`

  ` "CacheSecurityGroupNames",`

  ` "EnableTransitEncryption",`

  ` "AtRestEncryptionEnabled",`

  ` "SnapshotArns",`

  ` "SnapshotName"`
+ [describe-global-replication-groups](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-global-replication-groups.html)

  ```
  aws elasticache describe-global-replication-groups \
     --global-replication-group-id my global datastore  \
     --show-member-info an optional parameter that returns a list of the primary and secondary clusters that make up the global datastore
  ```
+ [modify-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-global-replication-group.html)

  ```
  aws elasticache modify-global-replication-group \
     --global-replication-group-id my global datastore  \
     --automatic-failover-enabled \
     --cache-node-type node type \
     --cache-parameter-group-name parameter group name \ 
     --engine-version engine version \
     -—apply-immediately \
     --global-replication-group-description description
  ```

  **ElastiCache GlobalDataStore 的 Redis 至 OSS Valkey 跨引擎升級**

  您可以使用主控台、API 或 CLI，將現有的 Redis OSS 全域複寫群組升級至 Valkey。

  如果您有現有的 Redis OSS 全域複寫群組，您可以使用 modify-global-replication-group API 指定新的引擎和引擎版本，以升級至 Valkey。

  若為 Linux、macOS 或 Unix：

  ```
  aws elasticache modify-global-replication-group \
     --global-replication-group-id myGlobalReplGroup \
     --engine valkey \
     --apply-immediately \
     --engine-version 8.0
  ```

  針對 Windows：

  ```
  aws elasticache modify-global-replication-group ^
     --global-replication-group-id myGlobalReplGroup ^
     --engine valkey ^
     --apply-immediately ^
     --engine-version 8.0
  ```

  如果您將自訂快取參數群組套用至要升級的現有 Redis OSS 全域複寫群組，您也需要在請求中傳遞自訂的 Valkey 快取參數群組。輸入 Valkey 自訂參數群組必須與現有的 Redis OSS 自訂參數群組具有相同的 Redis OSS 靜態參數值。

  若為 Linux、macOS 或 Unix：

  ```
  aws elasticache modify-global-replication-group \
     --global-replication-group-id myGlobalReplGroup \
     --engine valkey \
     --engine-version 8.0 \
     --apply-immediately \
     --cache-parameter-group-name myParamGroup
  ```

  針對 Windows：

  ```
  aws elasticache modify-global-replication-group ^
     --global-replication-group-id myGlobalReplGroup ^
     --engine valkey ^
     --engine-version 8.0 ^
     --apply-immediately ^
     --cache-parameter-group-name myParamGroup
  ```
+ [delete-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-global-replication-group.html)

  ```
  aws elasticache delete-global-replication-group \
     --global-replication-group-id my global datastore  \
     --retain-primary-replication-group defaults to true
  ```
+ [disassociate-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/disassociate-global-replication-group.html)

  ```
  aws elasticache disassociate-global-replication-group \
     --global-replication-group-id my global datastore  \
     --replication-group-id my secondary cluster  \
     --replication-group-region the AWS Region in which the secondary cluster resides
  ```
+ [failover-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/failover-global-replication-group.html)

  ```
  aws elasticache failover-replication-group \
     --global-replication-group-id my global datastore \
     --primary-region The AWS Region of the primary cluster \  
     --primary-replication-group-id  The name of the global datastore, including the suffix.
  ```
+ [increase-node-groups-in-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/increase-node-groups-in-global-replication-group.html)

  ```
  aws elasticache increase-node-groups-in-global-replication-group \
     --apply-immediately yes \
     --global-replication-group-id global-replication-group-name \
     --node-group-count 3
  ```
+ [decrease-node-groups-in-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/decrease-node-groups-in-global-replication-group.html)

  ```
  aws elasticache decrease-node-groups-in-global-replication-group \
     --apply-immediately yes \
     --global-replication-group-id global-replication-group-name \
     --node-group-count 3
  ```
+ [rebalance-shards-in-global-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/rebalance-slots-in-global-replication-group.html)

  ```
  aws elasticache rebalance-shards-in-global-replication-group \
     --apply-immediately yes \
     --global-replication-group-id global-replication-group-name
  ```

使用說明列出 ElastiCache for Valkey 或 Redis OSS 的所有可用命令。

```
aws elasticache help
```

您還可以使用說明來描述特定命令，並了解更多關於它的用法：

```
aws elasticache create-global-replication-group help
```

# 使用複寫群組的高可用性
<a name="Replication"></a>

單節點 Amazon ElastiCache Valkey 和 Redis OSS 叢集是具有有限資料保護服務 (AOF) 的記憶體內實體。若您的叢集因任何原因失敗，您會遺失所有叢集的資料。不過，如果您執行 Valkey 或 Redis OSS 引擎，您可以將 2 到 6 個節點分組到具有複本的叢集中，其中 1 到 5 個唯讀節點包含群組單一讀取/寫入主節點的複寫資料。在此案例中，若一個節點因任何原因失敗，因為其已在一或多個其他節點中複寫，因此您也不會遺失所有資料。因為複寫延遲，若失敗的是主要讀取/寫入節點，有些資料可能會遺失。

如下圖所示，複寫結構包含在包含在 Valkey 或 Redis OSS 叢集中的碎片 （在 API/CLI 中稱為*節點群組*) 中。Valkey 或 Redis OSS （停用叢集模式） 叢集一律有一個碎片。Valkey 或 Redis OSS （啟用叢集模式） 叢集最多可以有 500 個碎片，其中叢集的資料分割於碎片。您可以建立具有較高數量碎片和較低數量複本的叢集，每一叢集最高總計為 90 個節點。此叢集組態的範圍可以從 90 個碎片和 0 個複本到 15 個碎片和 5 個複本，這是允許的複本最大數量。

使用 ElastiCache for Valkey 和 ElastiCache 5.0.6 版或更新版本的 Redis OSS 時，每個叢集的節點或碎片限制最多可增加至 500 個。例如，您可以選擇設定具有 500 個節點的叢集，並容許碎片在 83 個（每個碎片一個主要版本和 5 個複本）到 500 個（單一主要版本並且沒有複本）之間變化。請確保有足夠的可用 IP 地址來容納增加的數量。常見的缺陷包括子網路群組中的子網路的 CIDR 範圍太小，或是子網路被共用並被其他叢集大量使用。如需詳細資訊，請參閱[建立子網路群組](SubnetGroups.Creating.md)。

 對於 5.0.6 以下的版本，每個叢集的限制為 250 個。

若要請求提高配額，請參閱 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)，並選擇配額類型 **Nodes per cluster per instance type (每執行個體類型每叢集的節點數)**。

![\[影像：Valkey 或 Redis OSS （停用叢集模式） 叢集有一個碎片和 0 到 5 個複本節點\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCacheClusters-CSN-Redis-Replicas.png)


*Valkey 或 Redis OSS （停用叢集模式） 叢集有一個碎片和 0 到 5 個複本節點*

若帶有複本的叢集已啟用多個可用區，並且當主要節點故障時，主要節點會容錯移轉至僅供讀取複本。因為資料會以非同步的方式在複本節點上更新，可能會因更新複本節點時發生延遲而導致某些資料遺失。如需詳細資訊，請參閱[緩解執行 Valkey 或 Redis OSS 時的故障](disaster-recovery-resiliency.md#FaultTolerance.Redis)。

**Topics**
+ [了解 Valkey 和 Redis OSS 複寫](Replication.Redis.Groups.md)
+ [複寫：停用 Valkey 和 Redis OSS 叢集模式與啟用](Replication.Redis-RedisCluster.md)
+ [搭配 Valkey 和 Redis OSS 使用異地同步備份，將 ElastiCache 中的停機時間降至最低](AutoFailover.md)
+ [同步與備份的實作方式](Replication.Redis.Versions.md)
+ [建立 Valkey 或 Redis OSS 複寫群組](Replication.CreatingRepGroup.md)
+ [檢視複寫群組詳細資訊](Replication.ViewDetails.md)
+ [尋找複寫群組端點](Replication.Endpoints.md)
+ [修改複寫群組](Replication.Modify.md)
+ [刪除複寫群組](Replication.DeletingRepGroup.md)
+ [變更複本的數量](increase-decrease-replica-count.md)
+ [針對 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，將僅供讀取複本提升為主要複本](Replication.PromoteReplica.md)

# 了解 Valkey 和 Redis OSS 複寫
<a name="Replication.Redis.Groups"></a>

Redis OSS 以兩種方式實作複寫：
+ 使用包含每個節點中叢集所有資料的單一碎片：Valkey 或 Redis OSS （停用叢集模式）
+ 資料分割最多 500 個碎片：Valkey 或 Redis OSS （啟用叢集模式）

複寫群組中的每個碎片都具備單一讀/寫主節點，以及最多 5 個僅供讀取複本節點。您可以建立具有較高數量碎片和較低數量複本的叢集，每一叢集最高總計為 90 個節點。此叢集組態的範圍可以從 90 個碎片和 0 個複本到 15 個碎片和 5 個複本，這是允許的複本最大數量。

如果 Redis OSS 引擎版本為 5.0.6 或更高版本，節點或碎片限制可以提高到每個叢集最多 500 個。例如，您可以選擇設定具有 500 個節點的叢集，並容許碎片在 83 個（每個碎片一個主要版本和 5 個複本）到 500 個（單一主要版本並且沒有複本）之間變化。請確保有足夠的可用 IP 地址來容納增加的數量。常見的缺陷包括子網路群組中的子網路的 CIDR 範圍太小，或是子網路被共用並被其他叢集大量使用。如需詳細資訊，請參閱[建立子網路群組](SubnetGroups.Creating.md)。

 對於 5.0.6 以下的版本，每個叢集的限制為 250 個。

若要請求提高配額，請參閱 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)，並選擇配額類型 **Nodes per cluster per instance type (每執行個體類型每叢集的節點數)**。

**Topics**
+ [Valkey 或 Redis OSS （停用叢集模式）](#Replication.Redis.Groups.Classic)
+ [Valkey 或 Redis OSS （啟用叢集模式）](#Replication.Redis.Groups.Cluster)

## Valkey 或 Redis OSS （停用叢集模式）
<a name="Replication.Redis.Groups.Classic"></a>

Valkey 或 Redis OSS （停用叢集模式） 叢集具有單一碎片，其中包含節點集合；一個主要讀取/寫入節點和最多五個次要唯讀複本節點。每個僅供讀取複本都會保有從叢集主要節點取得的資料複本。非同步複寫機制會用於將僅供讀取複本與主要節點保持同步。應用程式可從叢集內的任何節點進行讀取。應用程式只能寫入主要節點。僅供讀取複本可改善讀取輸送量，並在節點故障時保護資料，避免遺失。

![\[影像：具有單一碎片和複本節點的 Valkey 或 Redis OSS （停用叢集模式） 叢集\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCacheClusters-CSN-Redis-Replicas.png)


*具有單一碎片和複本節點的 Valkey 或 Redis OSS （停用叢集模式） 叢集*

您可以使用具有複本節點的 Valkey 或 Redis OSS （停用叢集模式） 叢集來擴展您的解決方案，讓 ElastiCache 處理讀取密集型應用程式，或支援同時從相同叢集讀取的大量用戶端。

Valkey 或 Redis OSS （停用叢集模式） 叢集中的所有節點都必須位於相同的區域。

當您將僅供讀取複本新增到叢集時，所有來自主要節點的資料都會複製到新節點。之後，每當資料寫入到主要節點時，變更都會以非同步方式散佈到所有僅供讀取複本。

若要改善容錯能力並減少寫入停機時間，請為具有複本的 Valkey 或 Redis OSS （停用叢集模式） 叢集啟用具有自動容錯移轉的異地同步備份。如需詳細資訊，請參閱[搭配 Valkey 和 Redis OSS 使用異地同步備份，將 ElastiCache 中的停機時間降至最低](AutoFailover.md)。

您可以變更 Valkey 或 Redis OSS （停用叢集模式） 叢集內節點的角色，主要複本和其中一個複本會交換角色。您可能會為了調校效能而執行此作業。例如，針對需要大量寫入活動的 web 應用程式，您可以選擇網路延遲最低的節點。如需詳細資訊，請參閱[針對 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，將僅供讀取複本提升為主要複本](Replication.PromoteReplica.md)。

## Valkey 或 Redis OSS （啟用叢集模式）
<a name="Replication.Redis.Groups.Cluster"></a>

Valkey 或 Redis OSS （啟用叢集模式） 叢集由 1 到 500 個碎片 (API/CLI：節點群組） 組成。每個碎片都有一個主節點，以及最多 5 個僅供讀取複本節點。組態的範圍可以從 90 個碎片和 0 個複本到 15 個碎片和 5 個複本，這是允許的複本最大數量。

如果引擎版本為 Valkey 7.2 及更高版本，或 Redis OSS 5.0.6 及更高版本，則每個叢集的節點或碎片限制最多可增加至 500 個。例如，您可以選擇設定具有 500 個節點的叢集，並容許碎片在 83 個（每個碎片一個主要版本和 5 個複本）到 500 個（單一主要版本並且沒有複本）之間變化。請確保有足夠的可用 IP 地址來容納增加的數量。常見的缺陷包括子網路群組中的子網路的 CIDR 範圍太小，或是子網路被共用並被其他叢集大量使用。如需詳細資訊，請參閱[建立子網路群組](SubnetGroups.Creating.md)。

 對於 5.0.6 以下的版本，每個叢集的限制為 250 個。

若要請求提高配額，請參閱 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)，並選擇配額類型 **Nodes per cluster per instance type (每執行個體類型每叢集的節點數)**。

 每個碎片中的僅供讀取複本都會保有從碎片主要節點取得的資料複本。非同步複寫機制會用於將僅供讀取複本與主要節點保持同步。應用程式可從叢集內的任何節點進行讀取。應用程式只能寫入主要節點。僅供讀取複本可增強讀取擴展性及保護資料遺失。資料會分割至 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的碎片。

應用程式使用 Valkey 或 Redis OSS （啟用叢集模式） 叢集的*組態端點*來與叢集中的節點連線。如需詳細資訊，請參閱[在 ElastiCache 中尋找連線端點](Endpoints.md)。

![\[影像：具有多個碎片和複本節點的 Valkey 或 Redis OSS （啟用叢集模式） 叢集\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCacheClusters-CSN-RedisClusters.png)


*具有多個碎片和複本節點的 Valkey 或 Redis OSS （啟用叢集模式） 叢集*

Valkey 或 Redis OSS （啟用叢集模式） 叢集中的所有節點必須位於相同的區域。若要改善容錯能力，您可以在該區域中的多個可用區域內同時佈建主要節點及僅供讀取複本。

目前，Valkey 或 Redis OSS （啟用叢集模式） 功能有一些限制。
+ 您無法將任何複本節點手動提升為主要節點。

# 複寫：停用 Valkey 和 Redis OSS 叢集模式與啟用
<a name="Replication.Redis-RedisCluster"></a>

從 Valkey 7.2 和 Redis OSS 3.2 版開始，您可以建立兩種不同類型叢集的其中之一 (API/CLI：複寫群組）。Valkey 或 Redis OSS （停用叢集模式） 叢集一律具有單一碎片 (API/CLI：節點群組），最多可有 5 個僅供讀取複本節點。Valkey 或 Redis OSS （啟用叢集模式） 叢集最多有 500 個碎片，每個碎片都有 1 到 5 個僅供讀取複本節點。

![\[影像：Valkey 或 Redis OSS （停用叢集模式），以及 Valkey 或 Redis OSS （啟用叢集模式） 叢集\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCache-NodeGroups.png)


*Valkey 或 Redis OSS （停用叢集模式），以及 Valkey 或 Redis OSS （啟用叢集模式） 叢集*

下表摘要說明 Valkey 或 Redis OSS （停用叢集模式） 與 Valkey 或 Redis OSS （啟用叢集模式） 叢集之間的重要差異。


**比較 Valkey 或 Redis OSS （停用叢集模式） 和 Valkey 或 Redis OSS （啟用叢集模式） 叢集**  

| 功能 | Valkey 或 Redis OSS （停用叢集模式） | Valkey 或 Redis OSS （啟用叢集模式） | 
| --- | --- | --- | 
| 可修改 | 是。支援新增和刪除複本節點，以及向上擴展節點類型。 | 有限。如需更多詳細資訊，請參閱「[ElastiCache 的版本管理](VersionManagement.md)」及「[擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)」。 | 
| 資料分割 | 否 | 是 | 
| 碎片 | 1 | 1 到 500  | 
| 僅供讀取複本 | 0 到 5 若您沒有複本而節點失敗，則可能會發生資料遺失。 | 每個碎片 0 到 5 個。若您沒有複本而節點失敗，您可能遺失該碎片中的所有資料。 | 
| Multi-AZ  | 是，至少 1 個複本。選用。預設開啟。 | 是選用。預設開啟。 | 
| 快照 (備份) | 是，建立單一 .rdb 檔案。 | 是，為每個碎片建立唯一 .rdb 檔案。 | 
| 還原 | 是，使用來自 Valkey 或 Redis OSS （停用叢集模式） 叢集的單一 .rdb 檔案。 | 是，使用來自 Valkey 或 Redis OSS （停用叢集模式） 或 Valkey 或 Redis OSS （啟用叢集模式） 叢集的 .rdb 檔案。 | 
| 支援 | 所有 Valkey 和 Redis OSS 版本 | 所有 Valkey 版本，以及 Redis OSS 3.2 和更新版本 | 
| 引擎是否可升級 | 是，但包含限制。如需詳細資訊，請參閱[ElastiCache 的版本管理](VersionManagement.md)。 | 是，但包含限制。如需詳細資訊，請參閱[ElastiCache 的版本管理](VersionManagement.md)。 | 
| 加密 | 3.2.6 版 （針對 EOL 排程，請參閱 [Redis OSS 版本生命週期結束排程](engine-versions.md#deprecated-engine-versions)) 和 4.0.10 及更新版本。 | 3.2.6 版 （針對 EOL 排程，請參閱 [Redis OSS 版本生命週期結束排程](engine-versions.md#deprecated-engine-versions)) 和 4.0.10 及更新版本。 | 
| HIPAA 合格服務 | 3.2.6 版 （針對 EOL 排程，請參閱 [Redis OSS 版本生命週期結束排程](engine-versions.md#deprecated-engine-versions)) 和 4.0.10 及更新版本。 | 3.2.6 版 （針對 EOL 排程，請參閱 [Redis OSS 版本生命週期結束排程](engine-versions.md#deprecated-engine-versions)) 和 4.0.10 及更新版本。 | 
| PCI DSS 合規 | 3.2.6 版 （針對 EOL 排程，請參閱 [Redis OSS 版本生命週期結束排程](engine-versions.md#deprecated-engine-versions)) 和 4.0.10 及更新版本。 | 3.2.6 版 （針對 EOL 排程，請參閱 [Redis OSS 版本生命週期結束排程](engine-versions.md#deprecated-engine-versions)) 和 4.0.10 及更新版本。 | 
| 線上重新分片 | N/A | 3.2.10 版 （針對 EOL 排程，請參閱 [Redis OSS 版本生命週期結束排程](engine-versions.md#deprecated-engine-versions)) 和更新版本。 | 

## 我應該選擇哪一個？
<a name="Replication.Redis-RedisCluster.Choose"></a>

在 Valkey 或 Redis OSS （停用叢集模式） 或 Valkey 或 Redis OSS （啟用叢集模式） 之間進行選擇時，請考慮下列因素：
+ **擴展與分割** - 業務需求變動。您需要為峰值需求佈建，或在需求變更時擴展。Valkey 或 Redis OSS （停用叢集模式） 支援擴展。您可以透過新增或刪除複本節點來擴展讀取容量，或是透過向上擴展至更大的節點類型來擴展容量。這些操作都需要時間。如需詳細資訊，請參閱 [擴展 Valkey 或 Redis OSS 的複本節點 （停用叢集模式）](Scaling.RedisReplGrps.md)。

   

  Valkey 或 Redis OSS （啟用叢集模式） 支援將您的資料分割到最多 500 個節點群組。您可以在商業需求變更時動態調整碎片的數量。分割的其中一項優勢，便是您會將負載擴張到更大量的端點，減少尖峰需求期間的存取瓶頸。此外，因為資料可擴張到多個伺服器，您可以容納更大的資料集。如需擴展分割區的資訊，請參閱 [擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)。

   
+ **節點大小與節點數量** – 由於 Valkey 或 Redis OSS （停用叢集模式） 叢集只有一個碎片，因此節點類型必須足夠大，以容納叢集的所有資料加上必要的額外負荷。另一方面，由於在使用 Valkey 或 Redis OSS （啟用叢集模式） 叢集時，您可以將資料分割成數個碎片，因此節點類型可以更小，不過您需要更多的類型。如需詳細資訊，請參閱[選擇您的節點大小](CacheNodes.SelectSize.md)。

   
+ **讀取與寫入** – 如果叢集上的主要負載是讀取資料的應用程式，您可以透過新增和刪除僅供讀取複本來擴展 Valkey 或 Redis OSS （停用叢集模式） 叢集。不過，僅供讀取複本的數量上限為 5 個。如果叢集上的負載具有大量寫入，您可以受益於具有多個碎片的 Valkey 或 Redis OSS （啟用叢集模式） 叢集的其他寫入端點。

無論您選擇實作的叢集類型為何，請務必選擇適合您目前及未來需求的節點類型。

# 搭配 Valkey 和 Redis OSS 使用異地同步備份，將 ElastiCache 中的停機時間降至最低
<a name="AutoFailover"></a>

有些執行個體 ElastiCache for Valkey 和 Redis OSS 可能需要取代主節點；這些執行個體包括特定類型的計劃維護，以及不太可能發生的主節點或可用區域故障事件。

此取代會導致叢集出現一些停機情況，但如果啟用異地同步備份，停機時間可降至最低。主節點的角色會自動容錯移轉到其中一個僅供讀取複本。不需要建立和佈建新的主節點，因為 ElastiCache 會透明地處理這個問題。此容錯移轉及複本提升可確保您能在提升完成時立即繼續寫入新的主要節點。

ElastiCache 也會傳播所提升複本的網域名稱服務 (DNS)。它會執行這項操作的原因在於，若您的應用程式正在寫入主要端點，您的應用程式中便不需要變更任何端點。如果您是從個別端點讀取，則請確保將提升至主要端點的複本讀取端點變更為新複本的端點。

如果是計劃的節點替換，這些替換因維護更新或自助式更新而啟動，請留意以下事項：
+ 對於 Valkey 和 Redis OSS 叢集，計劃的節點取代會在叢集提供傳入寫入請求時完成。
+ 對於在 5.0.6 或更新版本引擎上執行且已啟用異地同步備份的停用 Valkey 和 Redis OSS 叢集模式叢集，計劃的節點替換會在叢集提供傳入寫入請求時完成。
+ 對於已啟用異地同步備份且在 4.0.10 或更早的引擎上執行的停用 Valkey 和 Redis OSS 叢集模式叢集，您可能會注意到與 DNS 更新相關的短暫寫入中斷。此中斷最多可能需要幾秒鐘的時間。此程序的速度比重新建立及佈建新的主節點更快 (也就是沒有啟用異地同步備份時發生的程序)。

您可以使用 ElastiCache 管理主控台、 AWS CLI或 ElastiCache API 啟用異地同步備份。

在 Valkey 或 Redis OSS 叢集 （在 API 和 CLI 中，複寫群組） 上啟用 ElastiCache 異地同步備份可改善容錯能力。當您的叢集的讀取/寫入主要叢集因任何原因變得無法連線或失敗的情況下，這特別有用。僅在每個碎片中具有多個節點的 Valkey 和 Redis OSS 叢集上支援異地同步備份。

**Topics**
+ [啟用多個可用區](#AutoFailover.Enable)
+ [具有異地同步備份回應的故障案例](#AutoFailover.Scenarios)
+ [測試自動容錯移轉](#auto-failover-test)
+ [多可用區的限制](#AutoFailover.Limitations)

## 啟用多個可用區
<a name="AutoFailover.Enable"></a>

您可以在使用 ElastiCache 主控台或 ElastiCache API 建立或修改叢集 (API 或 CLI AWS CLI、複寫群組） 時啟用異地同步備份。

您只能在至少有一個可用僅供讀取複本的 Valkey 或 Redis OSS （停用叢集模式） 叢集上啟用異地同步備份。沒有僅供讀取複本的叢集無法提供高度可用性或容錯能力。如需建立附帶複寫叢集的資訊，請參閱[建立 Valkey 或 Redis OSS 複寫群組](Replication.CreatingRepGroup.md)。如需將僅供讀取複本新增到附帶複寫叢集的資訊，請參閱[新增 Valkey 或 Redis OSS 的僅供讀取複本 （停用叢集模式）](Replication.AddReadReplica.md)。

**Topics**
+ [啟用異地同步備份 (主控台)](#AutoFailover.Enable.Console)
+ [啟用異地同步備份 (AWS CLI)](#AutoFailover.Enable.CLI)
+ [啟用異地同步備份 (ElastiCache API)](#AutoFailover.Enable.API)

### 啟用異地同步備份 (主控台)
<a name="AutoFailover.Enable.Console"></a>

您可以在建立新的 Valkey 或 Redis OSS 叢集或修改具有複寫的現有叢集時，使用 ElastiCache 主控台啟用異地同步備份。

根據預設，Valkey 或 Redis OSS （啟用叢集模式） 叢集上會啟用異地同步備份。

**重要**  
只有當叢集的所有碎片中至少有一個複本的可用區域與主節點不同時，ElastiCache 才會自動啟用異地同步備份。

#### 使用 ElastiCache 主控台建立叢集時啟用異地同步備份
<a name="AutoFailover.Enable.Console.NewCacheCluster"></a>

如需此程序的詳細資訊，請參閱[建立 Valkey （停用叢集模式） 叢集 （主控台）](SubnetGroups.designing-cluster-pre.valkey.md#Clusters.Create.CON.valkey-gs)。請務必確保您有一或多個複本，並啟用多個可用區。

#### 在現有叢集上啟用異地同步備份 (主控台)
<a name="AutoFailover.Enable.Console.ReplGrp"></a>

如需此程序的詳細資訊，請參閱[使用 ElastiCache AWS 管理主控台](Clusters.Modify.md#Clusters.Modify.CON)修改叢集。

### 啟用異地同步備份 (AWS CLI)
<a name="AutoFailover.Enable.CLI"></a>

下列程式碼範例使用 AWS CLI 為複寫群組 啟用異地同步備份`redis12`。

**重要**  
複寫群組 `redis12` 必須已存在，並且其中必須至少要有一個可用的僅供讀取複本。

若為 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
    --replication-group-id redis12 \
    --automatic-failover-enabled \
    --multi-az-enabled \
    --apply-immediately
```

針對 Windows：

```
aws elasticache modify-replication-group ^
    --replication-group-id redis12 ^
    --automatic-failover-enabled ^
    --multi-az-enabled ^
    --apply-immediately
```

此命令的 JSON 輸出看起來會與以下內容相似。

```
{
    "ReplicationGroup": {
        "Status": "modifying", 
        "Description": "One shard, two nodes", 
        "NodeGroups": [
            {
                "Status": "modifying", 
                "NodeGroupMembers": [
                    {
                        "CurrentRole": "primary", 
                        "PreferredAvailabilityZone": "us-west-2b", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis12-001.v5r9dc.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis12-001"
                    }, 
                    {
                        "CurrentRole": "replica", 
                        "PreferredAvailabilityZone": "us-west-2a", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis12-002.v5r9dc.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis12-002"
                    }
                ], 
                "NodeGroupId": "0001", 
                "PrimaryEndpoint": {
                    "Port": 6379, 
                    "Address": "redis12.v5r9dc.ng.0001.usw2.cache.amazonaws.com"
                }
            }
        ], 
        "ReplicationGroupId": "redis12", 
        "SnapshotRetentionLimit": 1, 
        "AutomaticFailover": "enabling", 
        "MultiAZ": "enabled", 
        "SnapshotWindow": "07:00-08:00", 
        "SnapshottingClusterId": "redis12-002", 
        "MemberClusters": [
            "redis12-001", 
            "redis12-002"
        ], 
        "PendingModifiedValues": {}
    }
}
```

如需詳細資訊，請參閱 *AWS CLI 命令參考*中的下列主題：
+ [create-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-cache-cluster.html)
+ [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html)
+ *AWS CLI 命令參考*中的 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)。

### 啟用異地同步備份 (ElastiCache API)
<a name="AutoFailover.Enable.API"></a>

下列程式碼範例使用 ElastiCache API 為複寫群組 `redis12` 啟用異地同步備份。

**注意**  
若要使用此範例，複寫群組 `redis12` 必須已存在，並且其中必須至少要有一個可用的僅供讀取複本。

```
https://elasticache.us-west-2.amazonaws.com/
    ?Action=ModifyReplicationGroup
    &ApplyImmediately=true
    &AutoFailover=true
    &MultiAZEnabled=true
    &ReplicationGroupId=redis12
    &Version=2015-02-02
    &SignatureVersion=4
    &SignatureMethod=HmacSHA256
    &Timestamp=20140401T192317Z
    &X-Amz-Credential=<credential>
```

如需詳細資訊，請參閱 *ElastiCache API 參考*中的下列主題：
+ [CreateCacheCluster](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateCacheCluster.html)
+ [CreateReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html)
+ [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)

## 具有異地同步備份回應的故障案例
<a name="AutoFailover.Scenarios"></a>

在引入異地同步備份之前，ElastiCache 是透過重新建立及重新佈建故障的節點，來偵測並取代叢集中故障的節點。如果啟用多個可用區，故障的主要節點會容錯移轉至複寫延遲最短的複本。選取的複本會自動提升為主要節點，這比建立並重新佈建新的主要節點更快。此程序通常只需要幾秒鐘，您便能再次寫入叢集。

啟用異地同步備份時，ElastiCache 會持續監控主節點的狀態。若主要節點故障，便會根據故障的類型執行以下其中一個動作。

**Topics**
+ [只有主節點故障的故障案例](#AutoFailover.Scenarios.PrimaryOnly)
+ [主節點和某些僅供讀取複本故障的故障案例](#AutoFailover.Scenarios.PrimaryAndReplicas)
+ [整個叢集故障的故障案例](#AutoFailover.Scenarios.AllFail)

### 只有主節點故障的故障案例
<a name="AutoFailover.Scenarios.PrimaryOnly"></a>

若只有主要節點故障，複寫延遲最短的僅供讀取複本便會提升至主要叢集。接著會在與故障的主要節點相同的可用區域中建立並佈建遭取代的僅供讀取複本。

只有主節點故障時，ElastiCache 異地同步備份會執行下列作業：

1. 失敗的主要節點會離線。

1. 複寫延隔最少的僅供讀取複本會提升為主要節點。

   寫入通常可以在提升程序完成時繼續，這通常僅需要數秒鐘。若您的應用程式正在寫入主要端點，便不需要針對寫入或讀取變更端點。ElastiCache 會傳播提升複本的 DNS 名稱。

1. 啟動及佈建替換用的僅供讀取複本。

   替換用的僅供讀取複本會在失敗主要節點所在的可用區域內啟動，維持節點的分佈。

1. 複本會與新的主要節點同步。

新複本可供使用之後，請注意下列效果：
+ **主要端點** - 您不需要對應用程式進行任何變更，因為新主節點的 DNS 名稱會傳播到主要端點。
+ **讀取端點** - 讀取者端點會自動更新，以指向新的複本節點。

如需尋找叢集端點的資訊，請參閱下列主題：
+ [尋找 Valkey 或 Redis OSS （停用叢集模式） 叢集的端點 （主控台）](Endpoints.md#Endpoints.Find.Redis)
+ [尋找 Valkey 或 Redis OSS 複寫群組的端點 (AWS CLI)](Endpoints.md#Endpoints.Find.CLI.ReplGroups)
+ [尋找 Valkey 或 Redis OSS 複寫群組的端點 (ElastiCache API)](Endpoints.md#Endpoints.Find.API.ReplGroups)

 

### 主節點和某些僅供讀取複本故障的故障案例
<a name="AutoFailover.Scenarios.PrimaryAndReplicas"></a>

若主要節點及至少一個僅供讀取複本失敗時，複寫延隔最少的可用複本會提升至主要叢集。新的僅供讀取複本也會在失敗節點及提升為主要節點複本的相同可用區域內建立及佈建。

主節點和一部分僅供讀取複本故障時，ElastiCache 異地同步備份會執行下列作業：

1. 失敗的主要節點和失敗的僅供讀取複本會離線。

1. 複寫延隔最少的可用複本會提升為主要節點。

   寫入通常可以在提升程序完成時繼續，這通常僅需要數秒鐘。若您的應用程式正在寫入主要端點，便不需要針對寫入變更端點。ElastiCache 會傳播提升複本的 DNS 名稱。

1. 建立及佈建替換用的複本。

   替換用的複本會在失敗節點所在的可用區域內建立，維持節點的分佈。

1. 所有叢集都會和新的主要節點同步。

在新節點可用之後，請對應用程式進行以下變更：
+ **主要端點** - 不要對應用程式做任何變更。新主要節點的 DNS 名稱會傳播到主要端點。
+ **讀取端點** - 讀取端點會自動更新，以指向新的複本節點。

如需尋找複寫群組端點的資訊，請參閱下列主題：
+ [尋找 Valkey 或 Redis OSS （停用叢集模式） 叢集的端點 （主控台）](Endpoints.md#Endpoints.Find.Redis)
+ [尋找 Valkey 或 Redis OSS 複寫群組的端點 (AWS CLI)](Endpoints.md#Endpoints.Find.CLI.ReplGroups)
+ [尋找 Valkey 或 Redis OSS 複寫群組的端點 (ElastiCache API)](Endpoints.md#Endpoints.Find.API.ReplGroups)

 

### 整個叢集故障的故障案例
<a name="AutoFailover.Scenarios.AllFail"></a>

若所有項目都失敗，便會在原始節點的相同可用區域內重新建立及佈建所有節點。

在此案例中，叢集內的所有資料都會因為叢集內的每個節點都發生故障而遺失。這種情況相當罕見。

整個叢集故障時，ElastiCache 異地同步備份會執行下列作業：

1. 失敗的主要節點和僅供讀取複本會離線。

1. 建立及佈建替換用的主要節點。

1. 建立及佈建替換用的複本。

   替代項目會在失敗節點所在的可用區域內建立，維持節點的分佈。

   因為整個叢集失敗，資料會遺失，並且所有新的節點都會從零開始。

因為每個替換用節點都會具備與欲取代節點相同的端點，因此您不需要在應用程式內對任何端點進行變更。

如需尋找複寫群組端點的資訊，請參閱下列主題：
+ [尋找 Valkey 或 Redis OSS （停用叢集模式） 叢集的端點 （主控台）](Endpoints.md#Endpoints.Find.Redis)
+ [尋找 Valkey 或 Redis OSS 複寫群組的端點 (AWS CLI)](Endpoints.md#Endpoints.Find.CLI.ReplGroups)
+ [尋找 Valkey 或 Redis OSS 複寫群組的端點 (ElastiCache API)](Endpoints.md#Endpoints.Find.API.ReplGroups)

我們建議您在不同可用區域內建立主要節點和僅供讀取複本，以提升您的容錯能力層級。

## 測試自動容錯移轉
<a name="auto-failover-test"></a>

啟用自動容錯移轉之後，您可以使用 ElastiCache 主控台、 AWS CLI和 ElastiCache API 來進行測試。

在測試時，請注意下列事項：
+ 您可以使用此操作，在任何滾動 24 小時期間內測試最多 15 個碎片 （在 ElastiCache API 和 中稱為節點群組 AWS CLI) 的自動容錯移轉。
+ 若您在不同叢集 (在 API 和 CLI 中稱為複寫群組) 內的碎片上呼叫此操作，您可以同時進行呼叫。
+ 在某些情況下，您可以在相同 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組的不同碎片上多次呼叫此操作。在這種情況下，必須先完成第一個節點取代，才能夠執行後續呼叫。
+ 若要判斷節點替換是否已完成，請使用 Amazon ElastiCache 主控台 AWS CLI、 或 ElastiCache API 檢查事件。尋找與自動容錯移轉相關的以下事件 (根據可能發生的順序列出)：

  1. 複寫群組訊息：`Test Failover API called for node group <node-group-id>`

  1. 快取叢集訊息：`Failover from primary node <primary-node-id> to replica node <node-id> completed`

  1. 複寫群組訊息：`Failover from primary node <primary-node-id> to replica node <node-id> completed`

  1. 快取叢集訊息：`Recovering cache nodes <node-id>`

  1. 快取叢集訊息：`Finished recovery for cache nodes <node-id>`

  如需詳細資訊，請參閱下列內容：
  + *ElastiCache 使用者指南*中的「[檢視 ElastiCache 事件](ECEvents.Viewing.md)」
  + *ElastiCache API 參考*中的 [DescribeEvents](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeEvents.html)
  + *AWS CLI 命令參考*中的 [describe-events](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-events.html)。
+ 此 API 旨在測試您的應用程式在 ElastiCache 容錯移轉情況下的行為。並非設計成啟動容錯移轉以解決叢集問題的操作工具。此外，在某些情況下，例如大規模操作事件， AWS 可能會封鎖此 API。

**Topics**
+ [使用 測試自動容錯移轉 AWS 管理主控台](#auto-failover-test-con)
+ [使用 測試自動容錯移轉 AWS CLI](#auto-failover-test-cli)
+ [使用 ElastiCache API 測試自動容錯移轉](#auto-failover-test-api)

### 使用 測試自動容錯移轉 AWS 管理主控台
<a name="auto-failover-test-con"></a>

使用下列程序，透過主控台測試自動容錯移轉。

**測試自動容錯移轉**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**。

1. 從叢集清單中，選擇您要測試之叢集左側的方塊。​此叢集至少需要有一個僅供讀取複本節點。

1. 在 **Details (詳細資訊)** 區域中，確認此叢集已啟用異地同步備份。若叢集尚未啟用多個可用區，請選擇不同叢集，或是修改此叢集以啟用多個可用區。如需詳細資訊，請參閱[使用 ElastiCache AWS 管理主控台](Clusters.Modify.md#Clusters.Modify.CON)。  
![\[影像：啟用多可用區域叢集的詳細資訊區域\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCache-AutoFailover-MultiAZ-Enabled.png)

1. 針對 Valkey 或 Redis OSS （停用叢集模式），選擇叢集的名稱。

   針對 Valkey 或 Redis OSS （啟用叢集模式），請執行下列動作：

   1. 選擇叢集名稱。

   1. 在 **Shards (碎片)** 頁面上，針對您希望測試容錯移轉的碎片 (API 和 CLI 中稱為節點群組)，選擇碎片名稱。

1. 在 Nodes (節點) 頁面上，選擇 **Failover Primary (容錯移轉主要節點)**。

1. 選擇 **Continue (繼續)** 來容錯移轉主要節點，或是 **Cancel (取消)** 來取消操作而不容錯移轉主要節點。

   在容錯移轉程序期間，主控台會繼續將節點的狀態顯示為「可用」**。若要追蹤容錯移轉測試的進度，請從主控台導覽窗格選擇 **Events (事件)**。在 **Events (事件)** 標籤上，觀察指出您容錯移轉已啟動的事件 (`Test Failover API called`) 並完成 (`Recovery completed`)。

 

### 使用 測試自動容錯移轉 AWS CLI
<a name="auto-failover-test-cli"></a>

您可以使用 AWS CLI 操作，在任何已啟用異地同步備份的叢集上測試自動容錯移轉`test-failover`。

**參數**
+ `--replication-group-id` - 必要。要測試的複寫群組 (在主控台上為叢集)。
+ `--node-group-id` - 必要項目。您欲測試自動容錯移轉的節點群組名稱。在連續 24 小時期間內，您最多可以測試 15 個節點群組。

下列範例使用 AWS CLI 在 Valkey 或 Redis OSS （啟用叢集模式） 叢集 `redis00-0003` 中的節點群組上測試自動容錯移轉`redis00`。

**Example 測試自動容錯移轉**  
若為 Linux、macOS 或 Unix：  

```
aws elasticache test-failover \
   --replication-group-id redis00 \
   --node-group-id redis00-0003
```
針對 Windows：  

```
aws elasticache test-failover ^
   --replication-group-id redis00 ^
   --node-group-id redis00-0003
```

上述命令的輸出會與以下內容相似。

```
{
    "ReplicationGroup": {
        "Status": "available", 
        "Description": "1 shard, 3 nodes (1 + 2 replicas)", 
        "NodeGroups": [
            {
                "Status": "available", 
                "NodeGroupMembers": [
                    {
                        "CurrentRole": "primary", 
                        "PreferredAvailabilityZone": "us-west-2c", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis1x3-001.7ekv3t.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis1x3-001"
                    }, 
                    {
                        "CurrentRole": "replica", 
                        "PreferredAvailabilityZone": "us-west-2a", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis1x3-002.7ekv3t.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis1x3-002"
                    }, 
                    {
                        "CurrentRole": "replica", 
                        "PreferredAvailabilityZone": "us-west-2b", 
                        "CacheNodeId": "0001", 
                        "ReadEndpoint": {
                            "Port": 6379, 
                            "Address": "redis1x3-003.7ekv3t.0001.usw2.cache.amazonaws.com"
                        }, 
                        "CacheClusterId": "redis1x3-003"
                    }
                ], 
                "NodeGroupId": "0001", 
                "PrimaryEndpoint": {
                    "Port": 6379, 
                    "Address": "redis1x3.7ekv3t.ng.0001.usw2.cache.amazonaws.com"
                }
            }
        ], 
        "ClusterEnabled": false, 
        "ReplicationGroupId": "redis1x3", 
        "SnapshotRetentionLimit": 1, 
        "AutomaticFailover": "enabled", 
        "MultiAZ": "enabled",
        "SnapshotWindow": "11:30-12:30", 
        "SnapshottingClusterId": "redis1x3-002", 
        "MemberClusters": [
            "redis1x3-001", 
            "redis1x3-002", 
            "redis1x3-003"
        ], 
        "CacheNodeType": "cache.m3.medium", 
        "DataTiering": "disabled",
        "PendingModifiedValues": {}
    }
}
```

若要追蹤容錯移轉的進度，請使用 AWS CLI `describe-events`操作。

如需詳細資訊，請參閱下列內容：
+ *AWS CLI 命令參考*中的 [test-failover](https://docs.aws.amazon.com/cli/latest/reference/elasticache/test-failover.html)。
+ *AWS CLI 命令參考*中的 [describe-events](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-events.html)。

 

### 使用 ElastiCache API 測試自動容錯移轉
<a name="auto-failover-test-api"></a>

您可以在任何啟用異地同步備份的叢集上，使用 ElastiCache API 作業 `TestFailover` 來測試自動容錯移轉。

**參數**
+ `ReplicationGroupId` - 必要項目。要測試的複寫群組 (在主控台上為叢集)。
+ `NodeGroupId` - 必要項目。您欲測試自動容錯移轉的節點群組名稱。在連續 24 小時期間內，您最多可以測試 15 個節點群組。

以下範例會在複寫群組 (主控台上為叢集) `redis00` 中的節點群組 `redis00-0003` 上測試自動容錯移轉。

**Example 測試自動容錯移轉**  

```
https://elasticache.us-west-2.amazonaws.com/
    ?Action=TestFailover
    &NodeGroupId=redis00-0003
    &ReplicationGroupId=redis00
    &Version=2015-02-02
    &SignatureVersion=4
    &SignatureMethod=HmacSHA256
    &Timestamp=20140401T192317Z
    &X-Amz-Credential=<credential>
```

若要追蹤您容錯移轉的進度，請使用 ElastiCache `DescribeEvents` API 作業。

如需詳細資訊，請參閱下列內容：
+ *ElastiCache API 參考*中的 [TestFailover](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_TestFailover.html) 
+ [ElastiCache API 參考](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeEvents.html)中的 *DescribeEvents* 

 

## 多可用區的限制
<a name="AutoFailover.Limitations"></a>

請注意異地同步備份的下列限制：
+ Valkey 和 Redis OSS 2.8.6 版及更新版本支援異地同步備份。
+ T1 節點類型不支援異地同步備份。
+ Valkey 和 Redis OSS 複寫是非同步的。因此，當主要節點容錯移轉至複本時，可能會因複寫延遲而導致一小部分的資料遺失。

  選擇要提升為主要複本的複本時，ElastiCache 會選擇具有最小複寫延遲的複本。換句話說，它會選擇最新的複本。這麼做有助於減少遺失的資料量。具有最少複寫延遲的複本可以和失敗的主要節點位於相同可用區域或不同可用區域中。
+ 當您在停用叢集模式的 Valkey 或 Redis OSS 叢集上手動將僅供讀取複本提升為主要叢集時，您只能在停用異地同步備份和自動容錯移轉時執行此操作。若要將僅供讀取複本節點提升為主要節點，請採取下列步驟：

  1. 停用叢集上的多個可用區。

  1. 停用叢集上的自動容錯移轉。您可以透過主控台清除複寫群組的**自動容錯移轉**核取方塊來執行此操作。您也可以在呼叫 `ModifyReplicationGroup`操作`false`時，將 `AutomaticFailoverEnabled` 屬性設定為 ， AWS CLI 以使用 執行此操作。

  1. 將僅供讀取複本提升為主要節點。

  1. 重新啟用多個可用區。
+ ElastiCache for Redis OSS 多可用區和僅附加檔案 (AOF) 是互斥的。若您啟用其中一項，便無法啟用另外一項。
+ 節點故障很少會是因為整個可用區域失敗所造成。在此情況下，只有在可用區域已備份時，才會建立取代失敗主要節點的複本。例如，假設有一個複寫群組，其中主要節點位於 AZ-a，複本位於 AZ-b 及 AZ-c。若主要節點失敗，複寫延隔最少的複本便會提升至主要叢集。然後 ElastiCache 只會在 AZ-a 復原且重新可用時，才會在 AZ-a (即失敗主節點的所在位置) 中建立新的複本。
+ 由客戶初始化的主要節點重新開機不會觸發自動容錯移轉。其他重新開機和故障會觸發自動容錯移轉。
+ 主要節點重新開機時，便會在回到線上時清除資料。當僅供讀取複本看到已清除的主要叢集時，它們便會清除資料複本，造成資料遺失。
+ 在提升僅供讀取複本之後，其他複本便會和新的主要節點同步。初始化同步後，複本的內容會被刪除，而且它們會從新的主要節點同步資料。此同步程序會造成短暫的中斷，在此期間無法存取複本。此同步程序也會在與複本進行同步時，於主要節點上造成暫時性的負載增加。此行為是 Valkey 和 Redis OSS 的原生行為，對 ElastiCache Multi-AZ 而言並非唯一行為。如需此行為的詳細資訊，請參閱 Valkey 網站上的[複寫](http://valkey.io/topics/replication)。

**重要**  
對於 Valkey 7.2.6 和更新版本或 Redis OSS 2.8.22 和更新版本，您無法建立外部複本。  
對於 2.8.22 之前的 Redis OSS 版本，建議您不要將外部複本連接到已啟用異地同步備份的 ElastiCache 叢集。這是不受支援的組態，可能會造成問題，導致 ElastiCache 無法正常執行容錯移轉與復原。若要將外部複本連線至 ElastiCache 叢集，請確定在進行連線之前未啟用異地同步備份。

# 同步與備份的實作方式
<a name="Replication.Redis.Versions"></a>

所有支援的 Valkey 和 Redis OSS 版本都支援主要節點和複本節點之間的備份和同步。不過，備份和同步的實作方式會因版本而異。

## Redis OSS 2.8.22 版及更新版本
<a name="Replication.Redis.Version2-8-22"></a>

Redis OSS 複寫，在 2.8.22 版和更新版本中，選擇兩種方法。如需詳細資訊，請參閱[2.8.22 之前的 Redis OSS 版本](#Replication.Redis.Earlier2-8-22)及[快照和還原](backups.md)。

在無分支過程期間，若寫入負載龐大，對叢集進行的寫入會發生延遲，確保您不會累積過多變更並因此防止快照。

## 2.8.22 之前的 Redis OSS 版本
<a name="Replication.Redis.Earlier2-8-22"></a>

2.8.22 之前的 Redis OSS 備份和同步是三個步驟的程序。

1. 分支，並在背景程序中，將叢集資料序列化到磁碟。這會建立 point-in-time 快照。

1. 在前景中，將變更日誌累積在*用戶端輸出緩衝區*中。
**重要**  
若變更日誌超過*用戶端輸出緩衝區*大小，則備份或同步便會失敗。如需詳細資訊，請參閱[確保您有足夠的記憶體來建立 Valkey 或 Redis OSS 快照](BestPractices.BGSAVE.md)。

1. 最後，將傳輸快取資料，以及變更日誌傳送到複本節點。

# 建立 Valkey 或 Redis OSS 複寫群組
<a name="Replication.CreatingRepGroup"></a>

您有以下選項，可用來建立包含複本節點的叢集。當您已有可用的 Valkey 或 Redis OSS （停用叢集模式） 叢集，而該叢集具有要用作主節點的複本，則有一個叢集適用。如果您需要在叢集中建立主要節點及僅供讀取複本，則適用另一個選項。目前，必須從頭開始建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集。

**選項 1：[使用現有叢集建立複寫群組](Replication.CreatingReplGroup.ExistingCluster.md)**  
使用此選項可運用現有的單一節點 Valkey 或 Redis OSS （停用叢集模式） 叢集。您需將此現有節點指定為新叢集中的主節點，然後將 1 到 5 個僅供讀取複本分別新增到叢集。若現有叢集正在作用中，僅供讀取複本便會在建立時與其同步。請參閱 [使用現有叢集建立複寫群組](Replication.CreatingReplGroup.ExistingCluster.md)。  
您無法使用現有叢集建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集。若要使用 ElastiCache 主控台建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集 (API/CLI：複寫群組），請參閱 [建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集 （主控台）](Clusters.Create.md#Clusters.Create.CON.RedisCluster)。

**選項 2：[從頭開始建立 Valkey 或 Redis OSS 複寫群組](Replication.CreatingReplGroup.NoExistingCluster.md)**  
如果您還沒有可用的 Valkey 或 Redis OSS （停用叢集模式） 叢集做為叢集的主要節點，或您想要建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集，請使用此選項。請參閱[從頭開始建立 Valkey 或 Redis OSS 複寫群組](Replication.CreatingReplGroup.NoExistingCluster.md)。

# 使用現有叢集建立複寫群組
<a name="Replication.CreatingReplGroup.ExistingCluster"></a>

下列程序會將複寫群組新增至您的 Valkey 或 Redis OSS （停用叢集模式） 單一節點叢集，這是將叢集升級至最新版本的 Valkey 所必需的。這是一個就地程序，涉及零停機時間和零資料遺失。當您為單一節點叢集建立複寫群組時，叢集的節點會成為新叢集中的主要節點。如果您沒有可以用作新叢集主要叢集的 Valkey 或 Redis OSS （停用叢集模式） 叢集，請參閱 [從頭開始建立 Valkey 或 Redis OSS 複寫群組](Replication.CreatingReplGroup.NoExistingCluster.md)。

可用的叢集是現有的單一節點 Valkey 或 Redis OSS 叢集。目前，Valkey 或 Redis OSS （啟用叢集模式） 不支援使用可用的單一節點叢集建立具有複本的叢集。如果您想要建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集，請參閱 [建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集 （主控台）](Replication.CreatingReplGroup.NoExistingCluster.Cluster.md#Replication.CreatingReplGroup.NoExistingCluster.Cluster.CON)。

## 使用現有叢集建立複寫群組 （主控台）
<a name="Replication.CreatingReplGroup.ExistingCluster.CON"></a>

請參閱主題：[使用 ElastiCache AWS 管理主控台](Clusters.AddNode.md#Clusters.AddNode.CON)。

## 使用可用的 Valkey 或 Redis OSS 叢集建立複寫群組 (AWS CLI)
<a name="Replication.CreatingReplGroup.ExistingCluster.CLI"></a>

在為主要 使用可用的 Valkey 或 Redis OSS 快取叢集時，建立具有僅供讀取複本的複寫群組有兩個步驟AWS CLI。

使用 時，AWS CLI您會建立複寫群組，指定可用的獨立節點做為叢集的主要節點，`--primary-cluster-id`以及使用 CLI 命令在叢集中所需的節點數目`create-replication-group`。包含以下參數。

**--replication-group-id**  
您要建立的複寫群組名稱。此參數的值會用來做為新增節點名稱的基礎，並在 `--replication-group-id` 的結尾加上 3 位數的序號。例如 `sample-repl-group-001`。  
Valkey 或 Redis OSS （停用叢集模式） 複寫群組命名限制如下：  
+ 必須包含 1-40 個英數字元或連字號。
+ 必須以字母開頭。
+ 不能連續包含兩個連字號。
+ 結尾不能是連字號。

**--replication-group-description**  
複寫群組的說明。

**--num-node-groups**  
此叢集中的您希望的節點數量。此值包含主要節點。此參數的最大值為 6。

**--primary-cluster-id**  
您要成為此複寫群組中主要節點的可用 Valkey 或 Redis OSS （停用叢集模式） 叢集節點的名稱。

下列命令`sample-repl-group`會使用可用的 Valkey 或 Redis OSS （停用叢集模式） 叢集建立複寫群組，`redis01`做為複寫群組的主要節點。它會建立 2 個新節點 (皆為僅供讀取複本)。`redis01` 的設定 (即參數群組、安全群組、節點類型、引擎版本等) 會套用到所有複寫群組中的節點。

針對 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
   --replication-group-id sample-repl-group \
   --replication-group-description "demo cluster with replicas" \
   --num-cache-clusters 3 \
   --primary-cluster-id redis01
```

針對 Windows：

```
aws elasticache create-replication-group ^
   --replication-group-id sample-repl-group ^
   --replication-group-description "demo cluster with replicas" ^
   --num-cache-clusters 3 ^
   --primary-cluster-id redis01
```

如需您可能想要使用的其他資訊和參數，請參閱AWS CLI主題 [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html)。

**接下來，將僅供讀取複本新增到複寫群組**  
在建立複寫群組之後，使用 `create-cache-cluster` 命令將一到五個僅供讀取複本新增到其中，並確認包含以下參數。

**--cache-cluster-id**  
您欲新增到複寫群組的叢集名稱。  
叢集命名限制條件如下：  
+ 必須包含 1-40 個英數字元或連字號。
+ 必須以字母開頭。
+ 不能連續包含兩個連字號。
+ 結尾不能是連字號。


**--replication-group-id**  
您要新增此叢集的複寫群組名稱。

針對每個您欲新增到複寫群組的僅供讀取複本重複此命令，並只變更 `--cache-cluster-id` 參數的值。

**注意**  
請記住，複寫群組無法擁有超過五個僅供讀取複本。嘗試將僅供讀取複本新增到已有五個僅供讀取複本的複寫群組，會造成操作失敗。

以下程式碼會將僅供讀取複本 `my-replica01` 新增到複寫群組 `sample-repl-group`。主要叢集的設定 (參數群組、安全群組、節點類型等) 會在新增到複寫群組時套用到節點。

針對 Linux、macOS 或 Unix：

```
aws elasticache create-cache-cluster \
   --cache-cluster-id my-replica01 \
   --replication-group-id sample-repl-group
```

針對 Windows：

```
aws elasticache create-cache-cluster ^
   --cache-cluster-id my-replica01 ^
   --replication-group-id sample-repl-group
```

此命令的輸出看起來會與以下內容相似。

```
{
    "ReplicationGroup": {
        "Status": "creating",
        "Description": "demo cluster with replicas",
        "ClusterEnabled": false,
        "ReplicationGroupId": "sample-repl-group",
        "SnapshotRetentionLimit": 1,
        "AutomaticFailover": "disabled",
        "SnapshotWindow": "00:00-01:00",
        "SnapshottingClusterId": "redis01",
        "MemberClusters": [
            "sample-repl-group-001",
            "sample-repl-group-002",
            "redis01"
        ],
        "CacheNodeType": "cache.m4.large",
        "DataTiering": "disabled",
        "PendingModifiedValues": {}
    }
}
```

如需詳細資訊，請參閱AWS CLI主題：
+ [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html)
+ [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)

## 將複本新增至獨立 Valkey 或 Redis OSS （停用叢集模式） 叢集 (ElastiCache API)
<a name="Replication.CreatingReplGroup.ExistingCluster.API"></a>

使用 ElastiCache API 時，您會建立複寫群組，將可用的獨立節點指定為叢集的主節點 (`PrimaryClusterId`)，以及使用 CLI 命令 `CreateReplicationGroup` 指定您希望叢集中具有的節點數量。包含以下參數。

**ReplicationGroupId**  
您要建立的複寫群組名稱。此參數的值會用來做為新增節點名稱的基礎，並在 `ReplicationGroupId` 的結尾加上 3 位數的序號。例如 `sample-repl-group-001`。  
Valkey 或 Redis OSS （停用叢集模式） 複寫群組命名限制如下：  
+ 必須包含 1-40 個英數字元或連字號。
+ 必須以字母開頭。
+ 不能連續包含兩個連字號。
+ 結尾不能是連字號。

**ReplicationGroupDescription**  
包含複本的叢集說明。

**NumCacheClusters**  
此叢集中的您希望的節點數量。此值包含主要節點。此參數的最大值為 6。

**PrimaryClusterId**  
您要成為此叢集中主節點的可用 Valkey 或 Redis OSS （停用叢集模式） 叢集名稱。

下列命令`sample-repl-group`會使用可用的 Valkey 或 Redis OSS （停用叢集模式） 叢集`redis01`做為複寫群組的主要節點，建立具有複本的叢集。它會建立 2 個新節點 (皆為僅供讀取複本)。`redis01` 的設定 (即參數群組、安全群組、節點類型、引擎版本等) 會套用到所有複寫群組中的節點。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=CreateReplicationGroup 
   &Engine=redis
   &EngineVersion=6.0
   &ReplicationGroupDescription=Demo%20cluster%20with%20replicas
   &ReplicationGroupId=sample-repl-group
   &PrimaryClusterId=redis01
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

如需其他資訊，請參閱 ElastiCache APL 主題：
+ [CreateReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html)
+ [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)

**接下來，將僅供讀取複本新增到複寫群組**  
在建立複寫群組之後，使用 `CreateCacheCluster` 操作將一到五個僅供讀取複本新增到其中，並確認包含以下參數。

**CacheClusterId**  
您欲新增到複寫群組的叢集名稱。  
叢集命名限制條件如下：  
+ 必須包含 1-40 個英數字元或連字號。
+ 必須以字母開頭。
+ 不能連續包含兩個連字號。
+ 結尾不能是連字號。


**ReplicationGroupId**  
您要新增此叢集的複寫群組名稱。

針對每個您欲新增到複寫群組的僅供讀取複本重複此操作，並只變更 `CacheClusterId` 參數的值。

以下程式碼會將僅供讀取複本 (`myReplica01`) 新增到複寫群組 (`myReplGroup`)。主要叢集的設定 (參數群組、安全群組、節點類型等) 會在新增到複寫群組時套用到節點。

```
https://elasticache.us-west-2.amazonaws.com/
	?Action=CreateCacheCluster
	&CacheClusterId=myReplica01
	&ReplicationGroupId=myReplGroup
	&SignatureMethod=HmacSHA256
	&SignatureVersion=4
	&Version=2015-02-02
	&X-Amz-Algorithm=&AWS;4-HMAC-SHA256
	&X-Amz-Credential=[your-access-key-id]/20150202/us-west-2/elasticache/aws4_request
	&X-Amz-Date=20150202T170651Z
	&X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date
	&X-Amz-Signature=[signature-value]
```

如需其他資訊及您可能需使用的參數，請參閱 ElastiCache API 主題：[CreateCacheCluster](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateCacheCluster.html)。

# 從頭開始建立 Valkey 或 Redis OSS 複寫群組
<a name="Replication.CreatingReplGroup.NoExistingCluster"></a>

您可以在下面找到如何建立 Valkey 或 Redis OSS 複寫群組，而不使用現有的 Valkey 或 Redis OSS 叢集做為主要叢集。您可以使用 ElastiCache 主控台 AWS CLI、 或 ElastiCache API，從頭開始建立 Valkey 或 Redis OSS （停用叢集模式） 或 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。

在繼續之前，請先決定是否要建立 Valkey 或 Redis OSS （停用叢集模式） 或 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。如需有關決定的指導，請參閱[複寫：停用 Valkey 和 Redis OSS 叢集模式與啟用](Replication.Redis-RedisCluster.md)。

**Topics**
+ [從頭開始建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組](Replication.CreatingReplGroup.NoExistingCluster.Classic.md)
+ [從頭開始在 Valkey 或 Redis OSS （啟用叢集模式） 中建立複寫群組](Replication.CreatingReplGroup.NoExistingCluster.Cluster.md)

# 從頭開始建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組
<a name="Replication.CreatingReplGroup.NoExistingCluster.Classic"></a>

您可以使用 ElastiCache 主控台 AWS CLI、 或 ElastiCache API，從頭開始建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組。Valkey 或 Redis OSS （停用叢集模式） 複寫群組一律有一個節點群組、一個主要叢集，以及最多五個僅供讀取複本。Valkey 或 Redis OSS （停用叢集模式） 複寫群組不支援分割您的資料。

**注意**  
節點/碎片的限制可增加至每一叢集 500 個。若要請求增加配額，請參閱 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)，並在請求中加入執行個體類型。

若要從頭開始建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，請採取下列其中一種方法：

## 從頭開始建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組 (AWS CLI)
<a name="Replication.CreatingReplGroup.NoExistingCluster.Classic.CLI"></a>

下列程序會使用 建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組 AWS CLI。

當您從頭開始建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組時，您可以透過對 AWS CLI `create-replication-group` 命令的單一呼叫來建立複寫群組及其所有節點。包含以下參數。

**--replication-group-id**  
您要建立的複寫群組名稱。  
Valkey 或 Redis OSS （停用叢集模式） 複寫群組命名限制如下：  
+ 必須包含 1-40 個英數字元或連字號。
+ 必須以字母開頭。
+ 不能連續包含兩個連字號。
+ 結尾不能是連字號。

**--replication-group-description**  
複寫群組的說明。

**--num-cache-clusters**  
您希望與此複寫群組一同建立的節點數量，其為主要節點及僅供讀取複本數的總和。  
若您啟用異地同步備份 (`--automatic-failover-enabled`)，`--num-cache-clusters` 的值必須至少為 2。

**--cache-node-type**  
複寫群組中每個節點的節點類型。  
ElastiCache 支援以下節點類型。一般而言，最新一代的節點類型跟前一代相同的節點類型比較起來，能夠以較低的成本提供更多記憶體和運算能力。  
如需深入了解每個節點類型的效能詳細資訊，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)。

**– data-tiering-enabled**  
如果您使用的是 r6gd 節點類型，應設定此參數。如果您不想要資料分層，應設為 `--no-data-tiering-enabled`。如需詳細資訊，請參閱[ElastiCache 中的資料分層](data-tiering.md)。

**--cache-parameter-group**  
指定對應到您引擎版本的參數群組。如果您執行 Redis OSS 3.2.4 或更新版本，請指定 `default.redis3.2` 參數群組或衍生自 的參數群組`default.redis3.2`，以建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組。如需詳細資訊，請參閱[Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)。

**--網路類型**  
`ipv4`、`ipv6` 或 `dual-stack`。若您選擇雙堆疊，則必須將 `--IpDiscovery` 參數設定為 `ipv4` 或 `ipv6`。

**--engine**  
redis

**--engine-version**  
若要擁有最豐富的功能組，請選擇最新的引擎版本。

節點的名稱會透過在複寫群組名稱後方加上 `-00`*\$1* 來衍生取得。例如，若使用複寫群組名稱 `myReplGroup`，則主要節點的名稱就會是 `myReplGroup-001`，僅供讀取複本的名稱則為 `myReplGroup-002` 到 `myReplGroup-006`。

若您希望在此複寫群組上啟用傳輸中及待用加密，請新增 `--transit-encryption-enabled` 或 `--at-rest-encryption-enabled` 參數或同時新增兩者，並符合以下條件。
+ 您的複寫群組必須執行 Redis OSS 3.2.6 或 4.0.10 版。
+ 複寫群組必須在 Amazon VPC 中建立。
+ 您也必須包含 `--cache-subnet-group` 參數。
+ 您也必須包含 `--auth-token` 參數，其中包含在此複寫群組上執行操作時所需要 AUTH 字符 (密碼) 的客戶指定字串值。

下列操作會建立`sample-repl-group`具有三個節點的 Valkey 或 Redis OSS （停用叢集模式） 複寫群組：一個主要節點和兩個複本。

若為 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
   --replication-group-id sample-repl-group \
   --replication-group-description "Demo cluster with replicas" \
   --num-cache-clusters 3 \
   --cache-node-type cache.m4.large \ 
   --engine redis
```

針對 Windows：

```
aws elasticache create-replication-group ^
   --replication-group-id sample-repl-group ^
   --replication-group-description "Demo cluster with replicas" ^
   --num-cache-clusters 3 ^
   --cache-node-type cache.m4.large ^  
   --engine redis
```

此命令的輸出看起來會與以下內容相似。

```
{
    "ReplicationGroup": {
        "Status": "creating",
        "Description": "Demo cluster with replicas",
        "ClusterEnabled": false,
        "ReplicationGroupId": "sample-repl-group",
        "SnapshotRetentionLimit": 0,
        "AutomaticFailover": "disabled",
        "SnapshotWindow": "01:30-02:30",
        "MemberClusters": [
            "sample-repl-group-001",
            "sample-repl-group-002",
            "sample-repl-group-003"
        ],
        "CacheNodeType": "cache.m4.large",
        "DataTiering": "disabled",
        "PendingModifiedValues": {}
    }
}
```

如需您可能想要使用的其他資訊和參數，請參閱 [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html) AWS CLI 主題。

## 從頭開始建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組 (ElastiCache API)
<a name="Replication.CreatingReplGroup.NoExistingCluster.Classic.API"></a>

下列程序會使用 ElastiCache API 建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組。

當您從頭開始建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組時，您可以透過對 ElastiCache API `CreateReplicationGroup`操作的單一呼叫來建立複寫群組及其所有節點。包含以下參數。

**ReplicationGroupId**  
您要建立的複寫群組名稱。  
Valkey 或 Redis OSS （啟用叢集模式） 複寫群組命名限制如下：  
+ 必須包含 1-40 個英數字元或連字號。
+ 必須以字母開頭。
+ 不能連續包含兩個連字號。
+ 結尾不能是連字號。

**ReplicationGroupDescription**  
您複寫群組的說明。

**NumCacheClusters**  
您希望與此複寫群組一同建立的節點總數，其為主要節點及僅供讀取複本數的總和。  
若您啟用異地同步備份 (`AutomaticFailoverEnabled=true`)，`NumCacheClusters` 的值必須至少為 2。

**CacheNodeType**  
複寫群組中每個節點的節點類型。  
ElastiCache 支援以下節點類型。一般而言，最新一代的節點類型跟前一代相同的節點類型比較起來，能夠以較低的成本提供更多記憶體和運算能力。  
如需深入了解每個節點類型的效能詳細資訊，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)。

**– data-tiering-enabled**  
如果您使用的是 r6gd 節點類型，應設定此參數。如果您不想要資料分層，應設為 `--no-data-tiering-enabled`。如需詳細資訊，請參閱[ElastiCache 中的資料分層](data-tiering.md)。

**CacheParameterGroup**  
指定對應到您引擎版本的參數群組。如果您執行 Redis OSS 3.2.4 或更新版本，請指定 `default.redis3.2` 參數群組或衍生自 的參數群組`default.redis3.2`，以建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組。如需詳細資訊，請參閱[Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)。

**--網路類型**  
`ipv4`、`ipv` 或 `dual-stack`。若您選擇雙堆疊，則必須將 `--IpDiscovery` 參數設定為 `ipv4` 或 `ipv6`。

**引擎**  
redis

**EngineVersion**  
6.0

節點的名稱會透過在複寫群組名稱後方加上 `-00`*\$1* 來衍生取得。例如，若使用複寫群組名稱 `myReplGroup`，則主要節點的名稱就會是 `myReplGroup-001`，僅供讀取複本的名稱則為 `myReplGroup-002` 到 `myReplGroup-006`。

若您希望在此複寫群組上啟用傳輸中及待用加密，請新增 `TransitEncryptionEnabled=true` 或 `AtRestEncryptionEnabled=true` 參數或同時新增兩者，並符合以下條件。
+ 您的複寫群組必須執行 Redis OSS 3.2.6 或 4.0.10 版。
+ 複寫群組必須在 Amazon VPC 中建立。
+ 您也必須包含 `CacheSubnetGroup` 參數。
+ 您也必須包含 `AuthToken` 參數，其中包含在此複寫群組上執行操作時所需要 AUTH 字符 (密碼) 的客戶指定字串值。

下列操作會建立`myReplGroup`具有三個節點的 Valkey 或 Redis OSS （停用叢集模式） 複寫群組：主要節點和兩個複本。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=CreateReplicationGroup 
   &CacheNodeType=cache.m4.large
   &CacheParameterGroup=default.redis6.x
   &Engine=redis
   &EngineVersion=6.0
   &NumCacheClusters=3
   &ReplicationGroupDescription=test%20group
   &ReplicationGroupId=myReplGroup
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

如需其他資訊及您可能需使用的參數，請參閱 ElastiCache API 主題：[CreateReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html)。

# 從頭開始在 Valkey 或 Redis OSS （啟用叢集模式） 中建立複寫群組
<a name="Replication.CreatingReplGroup.NoExistingCluster.Cluster"></a>

您可以使用 ElastiCache 主控台 AWS CLI、 或 ElastiCache API 建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集 (API/CLI：*複寫群組*)。Valkey 或 Redis OSS （啟用叢集模式） 複寫群組具有 1 到 500 個碎片 (API/CLI：節點群組）、每個碎片中的主要節點，以及每個碎片中最多 5 個僅供讀取複本。您可以建立具有較高數量碎片和較低數量複本的叢集，每一叢集最高總計為 90 個節點。此叢集組態的範圍可以從 90 個碎片和 0 個複本到 15 個碎片和 5 個複本，這是允許的複本最大數量。

如果 Valkey 或 Redis OSS 引擎版本為 5.0.6 或更高版本，節點或碎片限制可以提高到每個叢集最多 500 個。例如，您可以選擇設定具有 500 個節點的叢集，並容許碎片在 83 個（每個碎片一個主要版本和 5 個複本）到 500 個（單一主要版本並且沒有複本）之間變化。請確保有足夠的可用 IP 地址來容納增加的數量。常見的缺陷包括子網路群組中的子網路的 CIDR 範圍太小，或是子網路被共用並被其他叢集大量使用。如需詳細資訊，請參閱[建立子網路群組](SubnetGroups.Creating.md)。

 對於 5.0.6 以下的版本，每個叢集的限制為 250 個。

若要請求提高配額，請參閱 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)，並選擇配額類型 **Nodes per cluster per instance type (每執行個體類型每叢集的節點數)**。

**Topics**
+ [使用 ElastiCache 主控台](#Replication.CreatingReplGroup.NoExistingCluster.Cluster.CON)
+ [從頭開始建立 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組 (AWS CLI)](#Replication.CreatingReplGroup.NoExistingCluster.Cluster.CLI)
+ [從頭開始在 Valkey 或 Redis OSS （啟用叢集模式） 中建立複寫群組 (ElastiCache API)](#Replication.CreatingReplGroup.NoExistingCluster.Cluster.API)

## 建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集 （主控台）
<a name="Replication.CreatingReplGroup.NoExistingCluster.Cluster.CON"></a>

若要建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集，請參閱 [建立 Valkey 或 Redis OSS （啟用叢集模式） 叢集 （主控台）](Clusters.Create.md#Clusters.Create.CON.RedisCluster)。請務必啟用叢集模式 (**Cluster Mode enabled (Scale Out) (啟用叢集模式 (向外擴展))**)，並在其中指定至少兩個碎片及一個複本節點。

## 從頭開始建立 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組 (AWS CLI)
<a name="Replication.CreatingReplGroup.NoExistingCluster.Cluster.CLI"></a>

下列程序會使用 建立 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組 AWS CLI。

當您從頭開始建立 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組時，您可以透過對 AWS CLI `create-replication-group` 命令的單一呼叫來建立複寫群組及其所有節點。包含以下參數。

**--replication-group-id**  
您要建立的複寫群組名稱。  
Valkey 或 Redis OSS （啟用叢集模式） 複寫群組命名限制如下：  
+ 必須包含 1-40 個英數字元或連字號。
+ 必須以字母開頭。
+ 不能連續包含兩個連字號。
+ 結尾不能是連字號。

**--replication-group-description**  
複寫群組的說明。

**--cache-node-type**  
複寫群組中每個節點的節點類型。  
ElastiCache 支援以下節點類型。一般而言，最新一代的節點類型跟前一代相同的節點類型比較起來，能夠以較低的成本提供更多記憶體和運算能力。  
如需深入了解每個節點類型的效能詳細資訊，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)。

**– data-tiering-enabled**  
如果您使用的是 r6gd 節點類型，應設定此參數。如果您不想要資料分層，應設為 `--no-data-tiering-enabled`。如需詳細資訊，請參閱[ElastiCache 中的資料分層](data-tiering.md)。

**--cache-parameter-group**  
指定 `default.redis6.x.cluster.on` 參數群組或衍生自 的參數群組`default.redis6.x.cluster.on`，以建立 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。如需詳細資訊，請參閱[Redis OSS 6.x 參數變更](ParameterGroups.Engine.md#ParameterGroups.Redis.6-x)。

**--engine**  
redis

**--engine-version**  
3.2.4

**--num-node-groups**  
此複寫群組中節點群組的數量。有效值為 1 到 500。  
節點/碎片的限制可增加至每一叢集 500 個。若要請求增加限制，請參閱 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)，並選取限制類型「每一執行個體類型每一叢集的節點數」。

**--replicas-per-node-group**  
每個節點群組中複本節點的數量。有效值為 0 到 5。

**--網路類型**  
`ipv4`、`ipv` 或 `dual-stack`。若您選擇雙堆疊，則必須將 `--IpDiscovery` 參數設定為 `ipv4` 或 `ipv6`。

若您希望在此複寫群組上啟用傳輸中及待用加密，請新增 `--transit-encryption-enabled` 或 `--at-rest-encryption-enabled` 參數或同時新增兩者，並符合以下條件。
+ 您的複寫群組必須執行 Redis OSS 3.2.6 或 4.0.10 版。
+ 複寫群組必須在 Amazon VPC 中建立。
+ 您也必須包含 `--cache-subnet-group` 參數。
+ 您也必須包含 `--auth-token` 參數，其中包含在此複寫群組上執行操作時所需要 AUTH 字符 (密碼) 的客戶指定字串值。

下列操作會建立`sample-repl-group`具有三個節點群組/碎片 (--num-node-groups) 的 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組，每個群組都有三個節點，一個主要節點和兩個僅供讀取複本 (--replicas-per-node-group)。

若為 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
   --replication-group-id sample-repl-group \
   --replication-group-description "Demo cluster with replicas" \
   --num-node-groups 3 \
   --replicas-per-node-group 2 \
   --cache-node-type cache.m4.large \ 
   --engine redis \   
   --security-group-ids SECURITY_GROUP_ID \    
   --cache-subnet-group-name SUBNET_GROUP_NAME>
```

針對 Windows：

```
aws elasticache create-replication-group ^
   --replication-group-id sample-repl-group ^
   --replication-group-description "Demo cluster with replicas" ^
   --num-node-groups 3 ^
   --replicas-per-node-group 2 ^
   --cache-node-type cache.m4.large ^ 
   --engine redis ^   
   --security-group-ids SECURITY_GROUP_ID ^      
   --cache-subnet-group-name SUBNET_GROUP_NAME>
```

上述命令會產生以下輸出。

```
{
    "ReplicationGroup": {
        "Status": "creating", 
        "Description": "Demo cluster with replicas", 
        "ReplicationGroupId": "sample-repl-group", 
        "SnapshotRetentionLimit": 0, 
        "AutomaticFailover": "enabled", 
        "SnapshotWindow": "05:30-06:30", 
        "MemberClusters": [
            "sample-repl-group-0001-001", 
            "sample-repl-group-0001-002", 
            "sample-repl-group-0001-003", 
            "sample-repl-group-0002-001", 
            "sample-repl-group-0002-002", 
            "sample-repl-group-0002-003", 
            "sample-repl-group-0003-001", 
            "sample-repl-group-0003-002", 
            "sample-repl-group-0003-003"
        ], 
        "PendingModifiedValues": {}
    }
}
```

當您從頭開始建立 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組時，您可以使用 `--node-group-configuration` 參數來設定叢集中的每個碎片，如下列設定兩個節點群組 （主控台：碎片） 的範例所示。第一個碎片有兩個節點：一個主要節點及一個僅供讀取複本。第二個碎片有三個節點：一個主要節點及兩個僅供讀取複本。

**--node-group-configuration**  
每個節點群組的組態。`--node-group-configuration` 參數由以下欄位組成。  
+ `PrimaryAvailabilityZone` - 此節點群組主節點所在的可用區域。如果省略此參數，ElastiCache 會為主節點選擇可用區域。

  **範例：**us-west-2a。
+ `ReplicaAvailabilityZones` - 僅供讀取複本所在可用區域的逗點分隔清單。此清單中的可用區域數量必須等於 `ReplicaCount` 的值。如果省略此參數，ElastiCache 會為複本節點選擇可用區域。

  **範例：**"us-west-2a,us-west-2b,us-west-2c"
+ `ReplicaCount` - 此節點群組中複本節點的數量。
+ `Slots` - 指定節點群組 Keyspace 的字串。此字串格式為 `startKey-endKey`。如果省略此參數，ElastiCache 會在節點群組間配置相同的索引鍵。

  **範例：**"0-4999"

   

下列操作會建立`new-group`具有兩個節點群組/碎片 () 的 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組`--num-node-groups`。與上述範例不同，每個節點群組的設定都會與其他節點群組不同 (`--node-group-configuration`)。

若為 Linux、macOS 或 Unix：

```
aws elasticache create-replication-group \
  --replication-group-id new-group \
  --replication-group-description "Sharded replication group" \
  --engine redis \    
  --snapshot-retention-limit 8 \
  --cache-node-type cache.m4.medium \
  --num-node-groups 2 \
  --node-group-configuration \
      "ReplicaCount=1,Slots=0-8999,PrimaryAvailabilityZone='us-east-1c',ReplicaAvailabilityZones='us-east-1b'" \
      "ReplicaCount=2,Slots=9000-16383,PrimaryAvailabilityZone='us-east-1a',ReplicaAvailabilityZones='us-east-1a','us-east-1c'"
```

針對 Windows：

```
aws elasticache create-replication-group ^
  --replication-group-id new-group ^
  --replication-group-description "Sharded replication group" ^
  --engine redis ^    
  --snapshot-retention-limit 8 ^
  --cache-node-type cache.m4.medium ^
  --num-node-groups 2 ^
  --node-group-configuration \
      "ReplicaCount=1,Slots=0-8999,PrimaryAvailabilityZone='us-east-1c',ReplicaAvailabilityZones='us-east-1b'" \
      "ReplicaCount=2,Slots=9000-16383,PrimaryAvailabilityZone='us-east-1a',ReplicaAvailabilityZones='us-east-1a','us-east-1c'"
```

上述操作會產生以下輸出。

```
{
    "ReplicationGroup": {
        "Status": "creating", 
        "Description": "Sharded replication group", 
        "ReplicationGroupId": "rc-rg", 
        "SnapshotRetentionLimit": 8, 
        "AutomaticFailover": "enabled", 
        "SnapshotWindow": "10:00-11:00", 
        "MemberClusters": [
            "rc-rg-0001-001", 
            "rc-rg-0001-002", 
            "rc-rg-0002-001", 
            "rc-rg-0002-002", 
            "rc-rg-0002-003"
        ], 
        "PendingModifiedValues": {}
    }
}
```

如需您可能想要使用的其他資訊和參數，請參閱 AWS CLI 主題 [create-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-replication-group.html)。

## 從頭開始在 Valkey 或 Redis OSS （啟用叢集模式） 中建立複寫群組 (ElastiCache API)
<a name="Replication.CreatingReplGroup.NoExistingCluster.Cluster.API"></a>

下列程序會使用 ElastiCache API 建立 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。

當您從頭開始建立 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組時，您可以透過對 ElastiCache API `CreateReplicationGroup`操作的單一呼叫來建立複寫群組及其所有節點。包含以下參數。

**ReplicationGroupId**  
您要建立的複寫群組名稱。  
Valkey 或 Redis OSS （啟用叢集模式） 複寫群組命名限制如下：  
+ 必須包含 1-40 個英數字元或連字號。
+ 必須以字母開頭。
+ 不能連續包含兩個連字號。
+ 結尾不能是連字號。

**ReplicationGroupDescription**  
複寫群組的說明。

**NumNodeGroups**  
您希望和此複寫群組一同建立的節點群組數量。有效值為 1 到 500。

**ReplicasPerNodeGroup**  
每個節點群組中複本節點的數量。有效值為 1 到 5。

**NodeGroupConfiguration**  
每個節點群組的組態。`NodeGroupConfiguration` 參數由以下欄位組成。  
+ `PrimaryAvailabilityZone` - 此節點群組主節點所在的可用區域。如果省略此參數，ElastiCache 會為主節點選擇可用區域。

  **範例：**us-west-2a。
+ `ReplicaAvailabilityZones` - 僅供讀取複本所在可用區域的清單。此清單中的可用區域數量必須等於 `ReplicaCount` 的值。如果省略此參數，ElastiCache 會為複本節點選擇可用區域。
+ `ReplicaCount` - 此節點群組中複本節點的數量。
+ `Slots` - 指定節點群組 Keyspace 的字串。此字串格式為 `startKey-endKey`。如果省略此參數，ElastiCache 會在節點群組間配置相同的索引鍵。

  **範例：**"0-4999"

   

**CacheNodeType**  
複寫群組中每個節點的節點類型。  
ElastiCache 支援以下節點類型。一般而言，最新一代的節點類型跟前一代相同的節點類型比較起來，能夠以較低的成本提供更多記憶體和運算能力。  
如需深入了解每個節點類型的效能詳細資訊，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)。

**– data-tiering-enabled**  
如果您使用的是 r6gd 節點類型，應設定此參數。如果您不想要資料分層，應設為 `--no-data-tiering-enabled`。如需詳細資訊，請參閱[ElastiCache 中的資料分層](data-tiering.md)。

**CacheParameterGroup**  
指定 `default.redis6.x.cluster.on` 參數群組或衍生自 的參數群組`default.redis6.x.cluster.on`，以建立 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。如需詳細資訊，請參閱[Redis OSS 6.x 參數變更](ParameterGroups.Engine.md#ParameterGroups.Redis.6-x)。

**--網路類型**  
`ipv4`、`ipv` 或 `dual-stack`。若您選擇雙堆疊，則必須將 `--IpDiscovery` 參數設定為 `ipv4` 或 `ipv6`。

**引擎**  
redis

**EngineVersion**  
6.0

若您希望在此複寫群組上啟用傳輸中及待用加密，請新增 `TransitEncryptionEnabled=true` 或 `AtRestEncryptionEnabled=true` 參數或同時新增兩者，並符合以下條件。
+ 您的複寫群組必須執行 Redis OSS 3.2.6 或 4.0.10 版。
+ 複寫群組必須在 Amazon VPC 中建立。
+ 您也必須包含 `CacheSubnetGroup` 參數。
+ 您也必須包含 `AuthToken` 參數，其中包含在此複寫群組上執行操作時所需要 AUTH 字符 (密碼) 的客戶指定字串值。

加上分行符號的用意是便於閱讀。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=CreateReplicationGroup 
   &CacheNodeType=cache.m4.large
   &CacheParemeterGroup=default.redis6.xcluster.on
   &Engine=redis
   &EngineVersion=6.0
   &NumNodeGroups=3
   &ReplicasPerNodeGroup=2
   &ReplicationGroupDescription=test%20group
   &ReplicationGroupId=myReplGroup
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

如需其他資訊及您可能需使用的參數，請參閱 ElastiCache API 主題：[CreateReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateReplicationGroup.html)。

# 檢視複寫群組詳細資訊
<a name="Replication.ViewDetails"></a>

有時候，您可能會想要檢視複寫群組的詳細資訊。您可以使用 ElastiCache 主控台、 AWS CLI 適用於 ElastiCache 的 或 ElastiCache API。Valkey 或 Redis OSS （停用叢集模式） 和 Valkey 或 Redis OSS （啟用叢集模式） 的主控台程序不同。

**Contents**
+ [使用複本檢視 Valkey 或 Redis OSS （停用叢集模式）](Replication.ViewDetails.Redis.md)
  + [使用 ElastiCache 主控台](Replication.ViewDetails.Redis.md#Replication.ViewDetails.Redis.CON)
  + [使用 AWS CLI](Replication.ViewDetails.Redis.md#Replication.ViewDetails.Redis.CLI)
  + [使用 ElastiCache API](Replication.ViewDetails.Redis.md#Replication.ViewDetails.Redis.API)
+ [檢視複寫群組：Valkey 或 Redis OSS （啟用叢集模式）](Replication.ViewDetails.RedisCluster.md)
  + [使用 ElastiCache 主控台](Replication.ViewDetails.RedisCluster.md#Replication.ViewDetails.RedisCluster.CON)
  + [使用 AWS CLI](Replication.ViewDetails.RedisCluster.md#Replication.ViewDetails.RedisCluster.CLI)
  + [使用 ElastiCache API](Replication.ViewDetails.RedisCluster.md#Replication.ViewDetails.RedisCluster.API)
+ [檢視複寫群組詳細資訊 (AWS CLI)](Replication.ViewDetails.CLI.md)
+ [檢視複寫群組詳細資訊 (ElastiCache API)](Replication.ViewDetails.API.md)

# 使用複本檢視 Valkey 或 Redis OSS （停用叢集模式）
<a name="Replication.ViewDetails.Redis"></a>

您可以使用 ElastiCache 主控台、 AWS CLI for ElastiCache 或 ElastiCache API，檢視具有複本 (API/CLI： *複寫群組*) 的 Valkey 或 Redis OSS （停用叢集模式） 叢集的詳細資訊。

**Contents**
+ [使用 ElastiCache 主控台](#Replication.ViewDetails.Redis.CON)
+ [使用 AWS CLI](#Replication.ViewDetails.Redis.CLI)
+ [使用 ElastiCache API](#Replication.ViewDetails.Redis.API)

## 檢視 Valkey 或 Redis OSS （停用叢集模式） 複寫群組 （主控台）
<a name="Replication.ViewDetails.Redis.CON"></a>

若要使用 ElastiCache 主控台檢視具有複本的 Valkey 或 Redis OSS （停用叢集模式） 叢集的詳細資訊，請參閱主題 [檢視 Valkey 或 Redis OSS （停用叢集模式） 詳細資訊 （主控台）](Clusters.ViewDetails.md#Clusters.ViewDetails.CON.Redis)。

## 檢視 Valkey 或 Redis OSS （停用叢集模式） 複寫群組 (AWS CLI)
<a name="Replication.ViewDetails.Redis.CLI"></a>

如需顯示 Valkey 或 Redis OSS （停用叢集模式） 複寫群組詳細資訊 AWS CLI 的範例，請參閱 [檢視複寫群組詳細資訊 (AWS CLI)](Replication.ViewDetails.CLI.md)。

## 檢視 Valkey 或 Redis OSS （停用叢集模式） 複寫群組 (ElastiCache API)
<a name="Replication.ViewDetails.Redis.API"></a>

如需顯示 Valkey 或 Redis OSS （停用叢集模式） 複寫群組詳細資訊的 ElastiCache API 範例，請參閱 [檢視複寫群組詳細資訊 (ElastiCache API)](Replication.ViewDetails.API.md)。

# 檢視複寫群組：Valkey 或 Redis OSS （啟用叢集模式）
<a name="Replication.ViewDetails.RedisCluster"></a>

## 檢視 Valkey 或 Redis OSS （啟用叢集模式） 叢集 （主控台）
<a name="Replication.ViewDetails.RedisCluster.CON"></a>

若要使用 ElastiCache 主控台檢視 Valkey 或 Redis OSS （啟用叢集模式） 叢集的詳細資訊，請參閱 [檢視 Valkey 或 Redis OSS （啟用叢集模式） 叢集 （主控台） 的詳細資訊](Clusters.ViewDetails.md#Clusters.ViewDetails.CON.RedisCluster)。

## 檢視 Valkey 或 Redis OSS （啟用叢集模式） 叢集 (AWS CLI)
<a name="Replication.ViewDetails.RedisCluster.CLI"></a>

如需顯示 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組詳細資訊的 ElastiCache CLI 範例，請參閱 [檢視複寫群組詳細資訊 (AWS CLI)](Replication.ViewDetails.CLI.md)。

## 檢視 Valkey 或 Redis OSS （啟用叢集模式） 叢集 (ElastiCache API)
<a name="Replication.ViewDetails.RedisCluster.API"></a>

如需顯示 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組詳細資訊的 ElastiCache API 範例，請參閱 [檢視複寫群組詳細資訊 (ElastiCache API)](Replication.ViewDetails.API.md)。

# 檢視複寫群組詳細資訊 (AWS CLI)
<a name="Replication.ViewDetails.CLI"></a>

您可以使用 命令檢視複寫群組 AWS CLI `describe-replication-groups`的詳細資訊。使用以下選用參數來縮小清單的搜尋範圍。忽略參數會傳回最多 100 個複寫群組的詳細資訊。

**選用的參數**
+ `--replication-group-id` - 使用此參數來列出特定複寫群組的詳細資訊。若指定複寫群組擁有超過一個節點群組，結果會以節點群組做為群組傳回。
+ `--max-items` - 使用此參數來限制列出的複寫群組數量。`--max-items` 的值不可小於 20 或大於 100。

**Example**  
以下程式碼清單會列出最多 100 個複寫群組的詳細資訊。  

```
aws elasticache describe-replication-groups
```
以下程式碼會列出 `sample-repl-group` 的詳細資訊。  

```
aws elasticache describe-replication-groups --replication-group-id sample-repl-group
```
以下程式碼會列出 `sample-repl-group` 的詳細資訊。  

```
aws elasticache describe-replication-groups --replication-group-id sample-repl-group
```
以下程式碼清單會列出最多 25 個複寫群組的詳細資訊。  

```
aws elasticache describe-replication-groups --max-items 25
```
此操作的輸出看起來應會與以下內容相似 (JSON 格式)。  

```
{
   "ReplicationGroups": [
     {
       "Status": "available", 
       "Description": "test", 
       "NodeGroups": [
         {
            "Status": "available", 
               "NodeGroupMembers": [
                  {
                     "CurrentRole": "primary", 
                     "PreferredAvailabilityZone": "us-west-2a", 
                     "CacheNodeId": "0001", 
                     "ReadEndpoint": {
                        "Port": 6379, 
                        "Address": "rg-name-001.1abc4d.0001.usw2.cache.amazonaws.com"
                     }, 
                     "CacheClusterId": "rg-name-001"
                  }, 
                  {
                     "CurrentRole": "replica", 
                     "PreferredAvailabilityZone": "us-west-2b", 
                     "CacheNodeId": "0001", 
                     "ReadEndpoint": {
                        "Port": 6379, 
                        "Address": "rg-name-002.1abc4d.0001.usw2.cache.amazonaws.com"
                     }, 
                     "CacheClusterId": "rg-name-002"
                  }, 
                  {
                     "CurrentRole": "replica", 
                     "PreferredAvailabilityZone": "us-west-2c", 
                     "CacheNodeId": "0001", 
                     "ReadEndpoint": {
                        "Port": 6379, 
                        "Address": "rg-name-003.1abc4d.0001.usw2.cache.amazonaws.com"
                     }, 
                     "CacheClusterId": "rg-name-003"
                  }
               ], 
               "NodeGroupId": "0001", 
               "PrimaryEndpoint": {
                  "Port": 6379, 
                  "Address": "rg-name.1abc4d.ng.0001.usw2.cache.amazonaws.com"
               }
            }
         ], 
         "ReplicationGroupId": "rg-name", 
         "AutomaticFailover": "enabled", 
         "SnapshottingClusterId": "rg-name-002", 
         "MemberClusters": [
            "rg-name-001", 
            "rg-name-002", 
            "rg-name-003"
         ], 
         "PendingModifiedValues": {}
      }, 
      {
      ... some output omitted for brevity
      }
   ]
}
```

如需詳細資訊，請參閱適用於 ElastiCache AWS CLI 的 主題[describe-replication-groups](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-replication-groups.html)。

# 檢視複寫群組詳細資訊 (ElastiCache API)
<a name="Replication.ViewDetails.API"></a>

您可以使用 操作檢視複寫 AWS CLI `DescribeReplicationGroups`的詳細資訊。使用以下選用參數來縮小清單的搜尋範圍。忽略參數會傳回最多 100 個複寫群組的詳細資訊。

**選用的參數**
+ `ReplicationGroupId` - 使用此參數來列出特定複寫群組的詳細資訊。若指定複寫群組擁有超過一個節點群組，結果會以節點群組做為群組傳回。
+ `MaxRecords` - 使用此參數來限制列出的複寫群組數量。`MaxRecords` 的值不可小於 20 或大於 100。預設為 100。

**Example**  
以下程式碼清單會列出最多 100 個複寫群組的詳細資訊。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeReplicationGroups
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```
以下程式碼會列出 `myReplGroup` 的詳細資訊。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeReplicationGroups
   &ReplicationGroupId=myReplGroup
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```
以下程式碼清單會列出最多 25 個叢集的詳細資訊。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeReplicationGroups
   &MaxRecords=25
   &Version=2015-02-02
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

如需詳細資訊，請參閱 ElastiCache API 參考主題 [DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html)。

# 尋找複寫群組端點
<a name="Replication.Endpoints"></a>

只要複寫群組提供節點的 DNS 端點和連接埠號碼，應用程式即可連線到複寫群組中的任何節點。視您執行的是 Valkey 或 Redis OSS （停用叢集模式） 或 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組而定，您會對不同的端點感興趣。

**Valkey 或 Redis OSS （停用叢集模式）**  
具有複本的 Valkey 或 Redis OSS （停用叢集模式） 叢集有三種端點類型：*主要端點*、*讀取器端點*和*節點端點*。主要端點是一種一律會解析至叢集中主要節點的 DNS 名稱。主要端點不會受到您叢集變更的影響 (例如將僅供讀取複本提升至主要角色)。針對寫入活動，我們建議您的應用程式連線到主要端點。

讀取器端點會在 ElastiCache 叢集中的所有僅供讀取複本之間平均分割端點的傳入連線。其他因素 (例如應用程式建立連線或應用程式如何 (重新) 使用連線) 將決定流量分佈。隨著複本的新增或移除，讀取器端點會跟著叢集的變更即時保持在最新狀態。您可以將 ElastiCache for Redis OSS 叢集的多個僅供讀取複本放在不同的 AWS 可用區域 (AZ)，以確保讀取器端點的高可用性。

**注意**  
讀取者端點並非負載平衡器。它是一筆 DNS 記錄，會以循環配置方式解析為其中一個複本節點的 IP 地址。

針對讀取活動，應用程式也可連線到叢集中的任何節點。與主要端點不同，節點端點會解析至特定端點。若您在叢集中進行變更 (例如新增或刪除複本)，您必須更新您應用程式中的節點端點。

**Valkey 或 Redis OSS （啟用叢集模式）**  
具有複本的 Valkey 或 Redis OSS （啟用叢集模式） 叢集，因為它們具有多個碎片 (API/CLI：節點群組），這表示它們也具有多個主節點，與 Valkey 或 Redis OSS （停用叢集模式） 叢集具有不同的端點結構。Valkey 或 Redis OSS （啟用叢集模式） 具有*組態端點*，它「知道」叢集中的所有主要和節點端點。您的應用程式會連線到組態端點。每當您的應用程式從叢集的組態端點、Valkey 和 Redis OSS 寫入或讀取時，請在幕後判斷金鑰所屬的碎片，以及該碎片中要使用的端點。這對您的應用程式來說都相當透明。

您可以使用 ElastiCache 主控台 AWS CLI、 或 ElastiCache API 尋找叢集的端點。

**尋找複寫群組端點**

若要尋找您複寫群組的端點，請參閱以下其中一個主題：
+ [尋找 Valkey 或 Redis OSS （停用叢集模式） 叢集的端點 （主控台）](Endpoints.md#Endpoints.Find.Redis)
+ [尋找 Valkey 或 Redis OSS （啟用叢集模式） 叢集的端點 （主控台）](Endpoints.md#Endpoints.Find.RedisCluster)
+ [尋找 Valkey 或 Redis OSS 複寫群組的端點 (AWS CLI)](Endpoints.md#Endpoints.Find.CLI.ReplGroups)
+ [尋找 Valkey 或 Redis OSS 複寫群組的端點 (ElastiCache API)](Endpoints.md#Endpoints.Find.API.ReplGroups)

# 修改複寫群組
<a name="Replication.Modify"></a>

**重要限制**  
目前，ElastiCache 支援對 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組進行有限的修改，例如使用 API 操作 `ModifyReplicationGroup`(CLI：) 變更引擎版本`modify-replication-group`。您可以使用 API 操作 (CLI：) 修改 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的碎片 [https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroupShardConfiguration.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroupShardConfiguration.html)（節點群組） 數目[https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group-shard-configuration.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group-shard-configuration.html)。如需詳細資訊，請參閱[擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)。  
對 Valkey 或 Redis OSS （啟用叢集模式） 叢集進行的其他修改需要您使用整合變更的新叢集來建立叢集。
您可以將 Valkey 或 Redis OSS （停用叢集模式） 和 Valkey 或 Redis OSS （啟用叢集模式） 叢集和複寫群組升級至較新的引擎版本。不過，您無法降級至舊版引擎，除非您刪除現有的叢集或複寫群組，並重新建立叢集。如需詳細資訊，請參閱[ElastiCache 的版本管理](VersionManagement.md)。
您可以使用主控台、[ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html) API 或 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html) CLI 命令，升級使用停用叢集模式的現有 ElastiCache for Valkey 或 Redis OSS 叢集，如下所示。或者，您也可以依照[修改叢集模式](modify-cluster-mode.md)中的步驟執行。

您可以使用 ElastiCache 主控台 AWS CLI、 或 ElastiCache API 修改 Valkey 或 Redis OSS （停用叢集模式） 叢集的設定。目前，ElastiCache 支援對 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組進行有限數量的修改。其他修改需要您建立目前複寫群組的備份，然後使用該備份植入新的 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。

**Topics**
+ [使用 AWS 管理主控台](#Replication.Modify.CON)
+ [使用 AWS CLI](#Replication.Modify.CLI)
+ [使用 ElastiCache API](#Replication.Modify.API)

## 使用 AWS 管理主控台
<a name="Replication.Modify.CON"></a>

若要修改 Valkey 或 Redis OSS （停用叢集模式） 叢集，請參閱 [修改 ElastiCache 叢集](Clusters.Modify.md)。

## 使用 AWS CLI
<a name="Replication.Modify.CLI"></a>

以下是 `modify-replication-group`命令 AWS CLI 的範例。您可以使用相同命令對複寫群組進行其他修改。

**在現有的 Valkey 或 Redis OSS 複寫群組上啟用異地同步備份：**

針對 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
   --replication-group-id myReplGroup \
   --multi-az-enabled = true
```

針對 Windows：

```
aws elasticache modify-replication-group ^
   --replication-group-id myReplGroup ^
   --multi-az-enabled
```

**將叢集模式從停用修改為啟用：**

若要將叢集模式從*停用*修改為*啟用*，您必須先將叢集模式設定為*相容*。相容模式可讓 Valkey 或 Redis OSS 用戶端使用已啟用的叢集模式和已停用的叢集模式進行連線。遷移所有 Valkey 或 Redis OSS 用戶端以使用啟用的叢集模式後，您就可以完成叢集模式組態，並將叢集模式設定為*啟用*。

針對 Linux、macOS 或 Unix：

將叢集模式設為*相容*。

```
aws elasticache modify-replication-group \
   --replication-group-id myReplGroup \
   --cache-parameter-group-name myParameterGroupName \
   --cluster-mode compatible
```

將叢集模式設為*啟用*。

```
aws elasticache modify-replication-group \
   --replication-group-id myReplGroup \
   --cluster-mode enabled
```

針對 Windows：

將叢集模式設為*相容*。

```
aws elasticache modify-replication-group ^
   --replication-group-id myReplGroup ^
   --cache-parameter-group-name myParameterGroupName ^
   --cluster-mode compatible
```

將叢集模式設為*啟用*。

```
aws elasticache modify-replication-group ^
   --replication-group-id myReplGroup ^
   --cluster-mode enabled
```

如需 AWS CLI `modify-replication-group`命令的詳細資訊，請參閱《ElastiCache for Redis OSS [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html) 使用者指南》中的[或修改叢集模式]()。 *ElastiCache *

## 使用 ElastiCache API
<a name="Replication.Modify.API"></a>

下列 ElastiCache API 操作會在現有的 Valkey 或 Redis OSS 複寫群組上啟用異地同步備份。您可以使用相同操作對複寫群組進行其他修改。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=ModifyReplicationGroup
   &AutomaticFailoverEnabled=true  
   &Mutli-AZEnabled=true  
   &ReplicationGroupId=myReplGroup
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20141201T220302Z
   &Version=2014-12-01
   &X-Amz-Algorithm=&AWS;4-HMAC-SHA256
   &X-Amz-Date=20141201T220302Z
   &X-Amz-SignedHeaders=Host
   &X-Amz-Expires=20141201T220302Z
   &X-Amz-Credential=<credential>
   &X-Amz-Signature=<signature>
```

如需 ElastiCache API `ModifyReplicationGroup` 作業的詳細資訊，請參閱「[ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)」。

# 刪除複寫群組
<a name="Replication.DeletingRepGroup"></a>

若您不再需要您其中一個包含複本的叢集 (在 API/CLI 中稱為「複寫群組」**)，您可以刪除它。刪除複寫群組時，ElastiCache 也會刪除該群組中的所有節點。

此作業開始後便無法中斷或取消。

**警告**  
當您刪除 ElastiCache for Redis OSS 叢集時，會保留您的手動快照。您還可以選擇在刪除叢集之前建立最終快照。自動快取快照則不會保留。
`CreateSnapshot` 需要 許可才能建立最終快照。如果沒有此許可，API 呼叫將會失敗，但有`Access Denied`例外狀況。

## 刪除複寫群組 (主控台)
<a name="Replication.DeletingRepGroup.CON"></a>

若要刪除具有複本的叢集，請參閱[在 ElastiCache 中刪除叢集](Clusters.Delete.md)。

## 刪除複寫群組 (AWS CLI)
<a name="Replication.DeletingRepGroup.CLI"></a>

使用命令 [delete-replication-group](https://docs.aws.amazon.com/AmazonElastiCache/latest/CommandLineReference/CLIReference-cmd-DeleteReplicationGroup.html) 來刪除複寫群組。

```
aws elasticache delete-replication-group --replication-group-id my-repgroup 
```

隨即出現提示，請您確認該項決定。輸入 *y* (是) 來立即啟動操作。在程序啟動後，便無法復原。

```
						
   After you begin deleting this replication group, all of its nodes will be deleted as well.
   Are you sure you want to delete this replication group? [Ny]y

REPLICATIONGROUP  my-repgroup  My replication group  deleting
```

## 刪除複寫群組 (ElastiCache API)
<a name="Replication.DeletingRepGroup.API"></a>

使用 `ReplicationGroup` 參數呼叫 [DeleteReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DeleteReplicationGroup.html)。

**Example**  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DeleteReplicationGroup
   &ReplicationGroupId=my-repgroup
   &Version=2014-12-01
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20141201T220302Z
   &X-Amz-Algorithm=&AWS;4-HMAC-SHA256
   &X-Amz-Date=20141201T220302Z
   &X-Amz-SignedHeaders=Host
   &X-Amz-Expires=20141201T220302Z
   &X-Amz-Credential=<credential>
   &X-Amz-Signature=<signature>
```

**注意**  
若您將 `RetainPrimaryCluster` 參數設為 `true`，便會刪除所有僅供讀取複本，但仍會保留主要叢集。

# 變更複本的數量
<a name="increase-decrease-replica-count"></a>

您可以使用 AWS 管理主控台 AWS CLI、 或 ElastiCache API，動態增加或減少 Valkey 或 Redis OSS 複寫群組中的僅供讀取複本數量。如果您的複寫群組是 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組，您可以選擇要增加或減少複本數量的碎片 （節點群組）。

若要動態變更複寫群組中的複本數量，請從下表選擇符合您情況的操作。


| 執行此作業 | 針對 Valkey 或 Redis OSS （啟用叢集模式） | 針對 Valkey 或 Redis OSS （停用叢集模式） | 
| --- | --- | --- | 
|  新增複本  |  [增加碎片中的複本數量](increase-replica-count.md)  |  [增加碎片中的複本數量](increase-replica-count.md) [新增 Valkey 或 Redis OSS 的僅供讀取複本 （停用叢集模式）](Replication.AddReadReplica.md)  | 
|  刪除複本  |  [減少碎片中的複本數量](decrease-replica-count.md)  |  [減少碎片中的複本數量](decrease-replica-count.md) [刪除 Valkey 或 Redis OSS 的僅供讀取複本 （停用叢集模式）](Replication.RemoveReadReplica.md)  | 

# 增加碎片中的複本數量
<a name="increase-replica-count"></a>

您可以將 Valkey 或 Redis OSS （啟用叢集模式） 碎片、Valkey 或 Redis OSS （停用叢集模式） 複寫群組中的複本數量增加最多五個。您可以使用 AWS 管理主控台、 AWS CLI或 ElastiCache API 來執行此操作。

**Topics**
+ [使用 AWS 管理主控台](#increase-replica-count-con)
+ [使用 AWS CLI](#increase-replica-count-cli)
+ [使用 ElastiCache API](#increase-replica-count-api)

## 使用 AWS 管理主控台
<a name="increase-replica-count-con"></a>

下列程序使用 主控台來增加 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組中的複本數量。

**若要增加碎片中的複本數量**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**，然後選擇您要新增複本的複寫群組名稱。

1. ​選擇每個您欲新增複本碎片的方塊。

1. 選擇 **Add replicas (新增複本)**。

1. 完成 **Add Replicas to Shards (新增複本至碎片)** 頁面：
   + 針對 **New number of replicas/shard (新的複本/碎片數)**，輸入您希望所選取碎片擁有的複本數。此值必須大於等於 **Current Number of Replicas per shard (目前每個碎片的複本數)**，並小於等於五。我們建議您包含至少兩個複本，做為運作的最低需求。
   + 針對 **Availability Zones (可用區域)**，選擇 **No preference (無偏好設定)** 讓 ElastiCache 為每個新複本選擇可用區域，或 **Specify Availability Zones (指定可用區域)** 來選擇每個新複本的可用區域。

     如果您選擇 **Specify Availability Zones (指定可用區域)**，請使用清單指定每個複本的可用區域。

1. 選擇 **Add (新增)** 以新增複本，或選擇 **Cancel (取消)** 以取消操作。

## 使用 AWS CLI
<a name="increase-replica-count-cli"></a>

若要增加 Valkey 或 Redis OSS 碎片中的複本數量，請使用 `increase-replica-count`命令搭配下列參數：
+ `--replication-group-id` - 必要項目。識別您希望增加複本數的複寫群組。
+ `--apply-immediately` 或 `--no-apply-immediately` - 必要項目。指定是否要立即增加複本計數 (`--apply-immediately`)，或是在下一次維護時間時進行 (`--no-apply-immediately`)。目前不支援 `--no-apply-immediately`。
+ `--new-replica-count` - 選用。指定您希望完成時擁有的複本節點數，最多五個。針對只有一個節點群組或 Valkey 或 Redis OSS （啟用叢集模式） 群組，或您希望所有節點群組擁有相同數量複本的複寫群組，使用此參數。若此值不大於目前節點群組中的複本數，則呼叫會失敗並附帶異常。
+ `--replica-configuration` - 選用。允許您為每個節點群組分別設定複本數及可用區域。針對您要獨立設定每個節點群組的 Valkey 或 Redis OSS （啟用叢集模式） 群組，使用此參數。

  `--replica-configuration` 有三個選用成員：
  + `NodeGroupId` - 待設定節點群組的四位數 ID。對於 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，碎片 ID 一律為 `0001`。若要尋找 Valkey 或 Redis OSS （啟用叢集模式） 節點群組的 （碎片） ID，請參閱 [尋找碎片的 ID](Shards.md#shard-find-id)。
  + `NewReplicaCount` - 此作業結束後，您希望此節點群組中擁有的複本數。其值必須大於目前的複本數，最多五個。若此值不大於目前節點群組中的複本數，則呼叫會失敗並附帶異常。
  + `PreferredAvailabilityZones` - `PreferredAvailabilityZone` 字串的清單，指定複寫群組節點所在的可用區域。`PreferredAvailabilityZone` 值的數量必須等於 `NewReplicaCount` \$1 1 的值，以包含主要節點。如果省略 `--replica-configuration`的此成員，ElastiCache for Redis OSS 會為每個新複本選擇可用區域。

**重要**  
您必須在呼叫中包含 `--new-replica-count` 或 `--replica-configuration` 參數，但不可同時包含兩者。

**Example**  
以下範例會將複寫群組 `sample-repl-group` 中的複本數增加到三。範例完成時，每個節點群組中都會有三個複本。無論是具有單一節點群組的 Valkey 或 Redis OSS （停用叢集模式） 群組，還是具有多個節點群組的 Valkey 或 Redis OSS （啟用叢集模式） 群組，此數字都適用。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache increase-replica-count \
    --replication-group-id sample-repl-group \
    --new-replica-count 3 \
    --apply-immediately
```
針對 Windows：  

```
aws elasticache increase-replica-count ^
    --replication-group-id sample-repl-group ^
    --new-replica-count 3 ^
    --apply-immediately
```
以下範例會將複寫群組 `sample-repl-group` 中的複本數增加到為兩個指定節點群組指定的值。假設有多個節點群組，這是 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。當指定選用的 `PreferredAvailabilityZones` 時，所列出的可用區域數量必須等於 `NewReplicaCount` \$1 1 的值。此方法可涵蓋由 `NodeGroupId` 識別群組的主要節點。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache increase-replica-count \
    --replication-group-id sample-repl-group \
    --replica-configuration \
        NodeGroupId=0001,NewReplicaCount=2,PreferredAvailabilityZones=us-east-1a,us-east-1c,us-east-1b \
        NodeGroupId=0003,NewReplicaCount=3,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c,us-east-1c \
    --apply-immediately
```
針對 Windows：  

```
aws elasticache increase-replica-count ^
    --replication-group-id sample-repl-group ^
    --replica-configuration ^
        NodeGroupId=0001,NewReplicaCount=2,PreferredAvailabilityZones=us-east-1a,us-east-1c,us-east-1b ^
        NodeGroupId=0003,NewReplicaCount=3,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c,us-east-1c \
    --apply-immediately
```

如需使用 CLI 增加複本數量的詳細資訊，請參閱 *Amazon ElastiCache 命令列參考*中的 [increase-replica-count](https://docs.aws.amazon.com/cli/latest/reference/elasticache/increase-replica-count.html)。

## 使用 ElastiCache API
<a name="increase-replica-count-api"></a>

若要增加 Valkey 或 Redis OSS 碎片中的複本數量，請使用 `IncreaseReplicaCount`動作搭配下列參數：
+ `ReplicationGroupId` - 必要項目。識別您希望增加複本數的複寫群組。
+ `ApplyImmediately` - 必要項目。指定是否要立即增加複本計數 (`ApplyImmediately=True`)，或是在下一次維護時間時進行 (`ApplyImmediately=False`)。目前不支援 `ApplyImmediately=False`。
+ `NewReplicaCount` - 選用。指定您希望完成時擁有的複本節點數，最多五個。將此參數用於只有一個節點群組的 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，或您想要所有節點群組擁有相同數量複本的 Valkey 或 Redis OSS （啟用叢集模式） 群組。若此值不大於目前節點群組中的複本數，則呼叫會失敗並附帶異常。
+ `ReplicaConfiguration` - 選用。允許您為每個節點群組分別設定複本數及可用區域。針對您要獨立設定每個節點群組的 Valkey 或 Redis OSS （啟用叢集模式） 群組，使用此參數。

  `ReplicaConfiguraion` 有三個選用成員：
  + `NodeGroupId` - 待設定節點群組的四位數 ID。對於 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，節點群組 （碎片） ID 一律為 `0001`。若要尋找 Valkey 或 Redis OSS （啟用叢集模式） 節點群組的 （碎片） ID，請參閱 [尋找碎片的 ID](Shards.md#shard-find-id)。
  + `NewReplicaCount` - 此作業結束後，您希望此節點群組中擁有的複本數。其值必須大於目前的複本數，並且最多五個。若此值不大於目前節點群組中的複本數，則呼叫會失敗並附帶異常。
  + `PreferredAvailabilityZones` - `PreferredAvailabilityZone` 字串的清單，指定複寫群組節點所在的可用區域。`PreferredAvailabilityZone` 值的數量必須等於 `NewReplicaCount` \$1 1 的值，以包含主要節點。如果省略 `ReplicaConfiguration` 的此成員，ElastiCache for Redis OSS 會為每個新複本選擇可用區域。

**重要**  
您必須在呼叫中包含 `NewReplicaCount` 或 `ReplicaConfiguration` 參數，但不可同時包含兩者。

**Example**  
以下範例會將複寫群組 `sample-repl-group` 中的複本數增加到三。範例完成時，每個節點群組中都會有三個複本。無論是具有單一節點群組的 Valkey 或 Redis OSS （停用叢集模式） 群組，還是具有多個節點群組的 Valkey 或 Redis OSS （啟用叢集模式） 群組，此數字都適用。  

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=IncreaseReplicaCount
      &ApplyImmediately=True
      &NewReplicaCount=3
      &ReplicationGroupId=sample-repl-group
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```
以下範例會將複寫群組 `sample-repl-group` 中的複本數增加到為兩個指定節點群組指定的值。假設有多個節點群組，這是 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。當指定選用的 `PreferredAvailabilityZones` 時，所列出的可用區域數量必須等於 `NewReplicaCount` \$1 1 的值。此方法可涵蓋由 `NodeGroupId` 識別群組的主要節點。  

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=IncreaseReplicaCount
      &ApplyImmediately=True
      &ReplicaConfiguration.ConfigureShard.1.NodeGroupId=0001
      &ReplicaConfiguration.ConfigureShard.1.NewReplicaCount=2
      &ReplicaConfiguration.ConfigureShard.1.PreferredAvailabilityZones.PreferredAvailabilityZone.1=us-east-1a
      &ReplicaConfiguration.ConfigureShard.1.PreferredAvailabilityZones.PreferredAvailabilityZone.2=us-east-1c
      &ReplicaConfiguration.ConfigureShard.1.PreferredAvailabilityZones.PreferredAvailabilityZone.3=us-east-1b
      &ReplicaConfiguration.ConfigureShard.2.NodeGroupId=0003
      &ReplicaConfiguration.ConfigureShard.2.NewReplicaCount=3
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.1=us-east-1a
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.2=us-east-1b
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.3=us-east-1c
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.4=us-east-1c
      &ReplicationGroupId=sample-repl-group
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```

如需使用 API 增加複本數量的詳細資訊，請參閱 *Amazon ElastiCache 命令列參考*中的 [IncreaseReplicaCount](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_IncreaseReplicaCount.html)。

# 減少碎片中的複本數量
<a name="decrease-replica-count"></a>

您可以減少 Valkey 或 Redis OSS （啟用叢集模式） 碎片中的複本數量，或 Valkey 或 Redis OSS （停用叢集模式） 的複寫群組中的複本數量：
+ 對於 Valkey 或 Redis OSS （停用叢集模式），如果啟用異地同步備份，您可以將複本數量減少為一個，如果未啟用，則可以減少為零。
+ 對於 Valkey 或 Redis OSS （啟用叢集模式），您可以將複本數量減少為零。但是，若主要節點失敗，您將無法容錯移轉至複本。

您可以使用 AWS 管理主控台、 AWS CLI 或 ElastiCache API 來減少節點群組 （碎片） 或複寫群組中的複本數量。

**Topics**
+ [使用 AWS 管理主控台](#decrease-replica-count-con)
+ [使用 AWS CLI](#decrease-replica-count-cli)
+ [使用 ElastiCache API](#decrease-replica-count-api)

## 使用 AWS 管理主控台
<a name="decrease-replica-count-con"></a>

下列程序使用 主控台來減少 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組中的複本數量。

**減少 Valkey 或 Redis OSS 碎片中的複本數量**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 在導覽窗格中，選擇 **Valkey** 或 **Redis OSS**，然後選擇您要刪除複本的複寫群組名稱。

1. ​選擇每個您欲從其中移除複本節點的碎片方塊。

1. 選擇 **Delete replicas (刪除複本)**。

1. 完成 **Delete Replicas from Shards (從碎片刪除複本)** 頁面：

   1. 針對 **New number of replicas/shard (新的複本/碎片數)**，輸入您希望所選取碎片擁有的複本數。該數字必須等於或大於 1。我們建議您為每個碎片設定至少兩個複本，做為運作的最低需求。

   1. 選擇 **Delete (刪除)** 以刪除複本，或選擇 **Cancel (取消)** 以取消操作。

**重要**  
如果您未指定要刪除的複本節點，ElastiCache for Redis OSS 會自動選取要刪除的複本節點。執行此作業時，ElastiCache for Redis OSS 會嘗試保留複寫群組的異地同步備份架構，接著保留具有主要叢集最低複寫延遲的複本。
您無法刪除複寫群組中的主節點。若您指定刪除主要節點，操作會失敗並出現錯誤，指出已選取主要節點進行刪除。

## 使用 AWS CLI
<a name="decrease-replica-count-cli"></a>

若要減少 Valkey 或 Redis OSS 碎片中的複本數量，請使用 `decrease-replica-count`命令搭配下列參數：
+ `--replication-group-id` - 必要項目。識別您希望減少複本數的複寫群組。
+ `--apply-immediately` 或 `--no-apply-immediately` - 必要項目。指定是否要立即減少複本計數 (`--apply-immediately`)，或是在下一次維護時間時進行 (`--no-apply-immediately`)。目前不支援 `--no-apply-immediately`。
+ `--new-replica-count` - 選用。指定您希望的複本節點數量。`--new-replica-count` 的值必須為有效值，小於節點群組中目前的數量。如需了解最低允許值，請參閱[減少碎片中的複本數量](#decrease-replica-count)。若 `--new-replica-count` 的值不符合此需求，呼叫便會失敗。
+ `--replicas-to-remove` - 選用。包含節點 ID 清單，指定要移除的複本節點。
+ `--replica-configuration` - 選用。允許您為每個節點群組分別設定複本數及可用區域。針對您要獨立設定每個節點群組的 Valkey 或 Redis OSS （啟用叢集模式） 群組，使用此參數。

  `--replica-configuration` 有三個選用成員：
  + `NodeGroupId` - 待設定節點群組的四位數 ID。對於 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，碎片 ID 一律為 `0001`。若要尋找 Valkey 或 Redis OSS （啟用叢集模式） 節點群組的 （碎片） ID，請參閱 [尋找碎片的 ID](Shards.md#shard-find-id)。
  + `NewReplicaCount` - 選用參數，指定您希望的複本節點數。`NewReplicaCount` 的值必須為有效值，小於節點群組中目前的數量。如需了解最低允許值，請參閱[減少碎片中的複本數量](#decrease-replica-count)。若 `NewReplicaCount` 的值不符合此需求，呼叫便會失敗。
  + `PreferredAvailabilityZones` - `PreferredAvailabilityZone` 字串的清單，指定複寫群組節點所在的可用區域。`PreferredAvailabilityZone` 值的數量必須等於 `NewReplicaCount` \$1 1 的值，以包含主要節點。如果省略 `--replica-configuration`的此成員，ElastiCache for Redis OSS 會為每個新複本選擇可用區域。

**重要**  
您必須包含一個 (並且只能一個) `--new-replica-count`、`--replicas-to-remove` 或 `--replica-configuration` 參數。

**Example**  
以下範例會使用 `--new-replica-count` 將複寫群組 `sample-repl-group` 中的複本數減少至一。範例完成時，每個節點群組中都會有一個複本。無論是具有單一節點群組的 Valkey 或 Redis OSS （停用叢集模式） 群組，還是具有多個節點群組的 Valkey 或 Redis OSS （啟用叢集模式） 群組，此數字都適用。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache decrease-replica-count
    --replication-group-id sample-repl-group \
    --new-replica-count 1 \
    --apply-immediately
```
針對 Windows：  

```
aws elasticache decrease-replica-count ^
    --replication-group-id sample-repl-group ^
    --new-replica-count 1 ^
    --apply-immediately
```
以下範例透過從節點群組移除兩個指定複本 (`0001` 與 `0003`)，來減少複寫群組 `sample-repl-group` 中的複本數。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache decrease-replica-count \
    --replication-group-id sample-repl-group \
    --replicas-to-remove 0001,0003 \
    --apply-immediately
```
針對 Windows：  

```
aws elasticache decrease-replica-count ^
    --replication-group-id sample-repl-group ^
    --replicas-to-remove 0001,0003 \
    --apply-immediately
```
以下範例會使用 `--replica-configuration` 將複寫群組 `sample-repl-group` 中的複本數減少到為兩個指定節點群組指定的值。假設有多個節點群組，這是 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。當指定選用的 `PreferredAvailabilityZones` 時，所列出的可用區域數量必須等於 `NewReplicaCount` \$1 1 的值。此方法可涵蓋由 `NodeGroupId` 識別群組的主要節點。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache decrease-replica-count \
    --replication-group-id sample-repl-group \
    --replica-configuration \
        NodeGroupId=0001,NewReplicaCount=1,PreferredAvailabilityZones=us-east-1a,us-east-1c \
        NodeGroupId=0003,NewReplicaCount=2,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c \
    --apply-immediately
```
針對 Windows：  

```
aws elasticache decrease-replica-count ^
    --replication-group-id sample-repl-group ^
    --replica-configuration ^
        NodeGroupId=0001,NewReplicaCount=2,PreferredAvailabilityZones=us-east-1a,us-east-1c ^
        NodeGroupId=0003,NewReplicaCount=3,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c \
    --apply-immediately
```

如需使用 CLI 減少複本數量的詳細資訊，請參閱 *Amazon ElastiCache 命令列參考*中的 [decrease-replica-count](https://docs.aws.amazon.com/cli/latest/reference/elasticache/decrease-replica-count.html)。

## 使用 ElastiCache API
<a name="decrease-replica-count-api"></a>

若要減少 Valkey 或 Redis OSS 碎片中的複本數量，請使用 `DecreaseReplicaCount`動作搭配下列參數：
+ `ReplicationGroupId` - 必要項目。識別您希望減少複本數的複寫群組。
+ `ApplyImmediately` - 必要項目。指定是否要立即減少複本計數 (`ApplyImmediately=True`)，或是在下一次維護時間時進行 (`ApplyImmediately=False`)。目前不支援 `ApplyImmediately=False`。
+ `NewReplicaCount` - 選用。指定您希望的複本節點數量。`NewReplicaCount` 的值必須為有效值，小於節點群組中目前的數量。如需了解最低允許值，請參閱[減少碎片中的複本數量](#decrease-replica-count)。若 `--new-replica-count` 的值不符合此需求，呼叫便會失敗。
+ `ReplicasToRemove` - 選用。包含節點 ID 清單，指定要移除的複本節點。
+ `ReplicaConfiguration` - 選用。包含節點群組清單，允許您為每個節點群組分別設定複本數及可用區域。針對您要獨立設定每個節點群組的 Valkey 或 Redis OSS （啟用叢集模式） 群組，使用此參數。

  `ReplicaConfiguraion` 有三個選用成員：
  + `NodeGroupId` - 待設定節點群組的四位數 ID。對於 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，節點群組 ID 一律為 `0001`。若要尋找 Valkey 或 Redis OSS （啟用叢集模式） 節點群組的 （碎片） ID，請參閱 [尋找碎片的 ID](Shards.md#shard-find-id)。
  + `NewReplicaCount` - 此作業結束後，您希望此節點群組中擁有的複本數。若已啟用多個可用區，該值必須小於目前的複本數，且其最小值為 1；若未啟用具備自動容錯移轉的多個可用區，則最小值為 0。若此值不小於目前節點群組中的複本數，則呼叫會失敗並附帶異常。
  + `PreferredAvailabilityZones` - `PreferredAvailabilityZone` 字串的清單，指定複寫群組節點所在的可用區域。`PreferredAvailabilityZone` 值的數量必須等於 `NewReplicaCount` \$1 1 的值，以包含主要節點。如果省略 `ReplicaConfiguration` 的此成員，ElastiCache for Redis OSS 會為每個新複本選擇可用區域。

**重要**  
您必須包含一個 (並且只能一個) `NewReplicaCount`、`ReplicasToRemove` 或 `ReplicaConfiguration` 參數。

**Example**  
以下範例會使用 `NewReplicaCount` 將複寫群組 `sample-repl-group` 中的複本數減少至一。範例完成時，每個節點群組中都會有一個複本。無論是具有單一節點群組的 Valkey 或 Redis OSS （停用叢集模式） 群組，還是具有多個節點群組的 Valkey 或 Redis OSS （啟用叢集模式） 群組，此數字都適用。  

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=DecreaseReplicaCount
      &ApplyImmediately=True
      &NewReplicaCount=1
      &ReplicationGroupId=sample-repl-group
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```
以下範例透過從節點群組移除兩個指定複本 (`0001` 與 `0003`)，來減少複寫群組 `sample-repl-group` 中的複本數。  

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=DecreaseReplicaCount
      &ApplyImmediately=True
      &ReplicasToRemove.ReplicaToRemove.1=0001
      &ReplicasToRemove.ReplicaToRemove.2=0003
      &ReplicationGroupId=sample-repl-group
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```
以下範例會使用 `ReplicaConfiguration` 將複寫群組 `sample-repl-group` 中的複本數減少到為兩個指定節點群組指定的值。假設有多個節點群組，這是 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。當指定選用的 `PreferredAvailabilityZones` 時，所列出的可用區域數量必須等於 `NewReplicaCount` \$1 1 的值。此方法可涵蓋由 `NodeGroupId` 識別群組的主要節點。  

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=DecreaseReplicaCount
      &ApplyImmediately=True
      &ReplicaConfiguration.ConfigureShard.1.NodeGroupId=0001
      &ReplicaConfiguration.ConfigureShard.1.NewReplicaCount=1
      &ReplicaConfiguration.ConfigureShard.1.PreferredAvailabilityZones.PreferredAvailabilityZone.1=us-east-1a
      &ReplicaConfiguration.ConfigureShard.1.PreferredAvailabilityZones.PreferredAvailabilityZone.2=us-east-1c
      &ReplicaConfiguration.ConfigureShard.2.NodeGroupId=0003
      &ReplicaConfiguration.ConfigureShard.2.NewReplicaCount=2
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.1=us-east-1a
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.2=us-east-1b
      &ReplicaConfiguration.ConfigureShard.2.PreferredAvailabilityZones.PreferredAvailabilityZone.4=us-east-1c
      &ReplicationGroupId=sample-repl-group
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```

如需使用 API 減少複本數量的詳細資訊，請參閱 *Amazon ElastiCache 命令列參考*中的 [DecreaseReplicaCount](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DecreaseReplicaCount.html)。

# 新增 Valkey 或 Redis OSS 的僅供讀取複本 （停用叢集模式）
<a name="Replication.AddReadReplica"></a>

下列主題中的資訊僅適用於 Valkey 或 Redis OSS （停用叢集模式） 複寫群組。

隨著您的流量增加，您可能會希望將讀取擴張到更多節點，減少任何一個節點上的讀取壓力。在本主題中，您可以了解如何將僅供讀取複本新增至 Valkey 或 Redis OSS （停用叢集模式） 叢集。

Valkey 或 Redis OSS （停用叢集模式） 複寫群組最多可有五個僅供讀取複本。若您嘗試將僅供讀取複本新增到已有五個僅供讀取複本的複寫群組，操作便會失敗。

如需將複本新增至 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組的詳細資訊，請參閱下列內容：
+ [擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)
+ [增加碎片中的複本數量](increase-replica-count.md)

您可以使用 ElastiCache 主控台 AWS CLI、 或 ElastiCache API，將僅供讀取複本新增至 Valkey 或 Redis OSS （停用叢集模式） 叢集。

**相關主題**
+ [將節點新增至 ElastiCache 叢集](Clusters.AddNode.md)
+ [將僅供讀取複本新增到複寫群組 (AWS CLI)](#Replication.AddReadReplica.CLI)
+ [使用 API 將僅供讀取複本新增到複寫群組](#Replication.AddReadReplica.API)

## 將僅供讀取複本新增到複寫群組 (AWS CLI)
<a name="Replication.AddReadReplica.CLI"></a>

若要將僅供讀取複本新增至 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，請使用 AWS CLI `create-cache-cluster`命令搭配 參數`--replication-group-id`來指定要新增叢集 （節點） 的複寫群組。

以下範例會建立 `my-read replica` 叢集，並將它新增到 `my-replication-group` 複寫群組。僅供讀取複本的節點類型、參數群組、安全群組、維護時間及其他設定都與 `my-replication-group` 中的其他節點相同。

若為 Linux、macOS 或 Unix：

```
aws elasticache create-cache-cluster \
      --cache-cluster-id my-read-replica \
      --replication-group-id my-replication-group
```

針對 Windows：

```
aws elasticache create-cache-cluster ^
      --cache-cluster-id my-read-replica ^
      --replication-group-id my-replication-group
```

如需使用 CLI 新增僅供讀取複本的詳細資訊，請參閱 *Amazon ElastiCache 命令列參考*中的 [create-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-cache-cluster.html)。

## 使用 API 將僅供讀取複本新增到複寫群組
<a name="Replication.AddReadReplica.API"></a>

若要將僅供讀取複本新增至 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，請使用 ElastiCache `CreateCacheCluster`操作搭配 參數`ReplicationGroupId`來指定要新增叢集 （節點） 的複寫群組。

以下範例會建立 `myReadReplica` 叢集，並將它新增到 `myReplicationGroup` 複寫群組。僅供讀取複本的節點類型、參數群組、安全群組、維護時間及其他設定都與 `myReplicationGroup` 中的其他節點相同。

```
https://elasticache.us-west-2.amazonaws.com/
      ?Action=CreateCacheCluster
      &CacheClusterId=myReadReplica
      &ReplicationGroupId=myReplicationGroup
      &Version=2015-02-02
      &SignatureVersion=4
      &SignatureMethod=HmacSHA256
      &Timestamp=20150202T192317Z
      &X-Amz-Credential=<credential>
```

如需使用 API 新增僅供讀取複本的詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的 [CreateCacheCluster](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateCacheCluster.html)。

# 刪除 Valkey 或 Redis OSS 的僅供讀取複本 （停用叢集模式）
<a name="Replication.RemoveReadReplica"></a>

下列主題中的資訊僅適用於 Valkey 或 Redis OSS （停用叢集模式） 複寫群組。

隨著 Valkey 或 Redis OSS 複寫群組上的讀取流量變更，您可能想要新增或移除僅供讀取複本。從 複寫群組移除節點與刪除叢集相同，雖然有以下限制：
+ 您無法從複寫群組移除主要節點。若您要刪除主要節點，請執行以下作業：

  1. 將僅供讀取複本提升為主要節點。如需將僅供讀取複本提升為主要節點的詳細資訊，請參閱[針對 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，將僅供讀取複本提升為主要複本](Replication.PromoteReplica.md)。

  1. 刪除舊的主要節點。如需了解此方法的限制，請參閱下一點。
+ 若在複寫群組上啟用異地同步備份，您便無法從複寫群組移除最後一個僅供讀取複本。在此情況下，請執行下列操作：

  1. 透過停用異地同步備份來修改複寫群組 如需詳細資訊，請參閱[修改複寫群組](Replication.Modify.md)。

  1. 刪除僅供讀取複本。

您可以使用 ElastiCache 主控台、 AWS CLI 適用於 ElastiCache 的 或 ElastiCache API，從 Valkey 或 Redis OSS （停用叢集模式） 複寫群組移除僅供讀取複本。

如需從 Valkey 或 Redis OSS 複寫群組刪除叢集的指示，請參閱下列各項：
+ [使用AWS 管理主控台](Clusters.Delete.md#Clusters.Delete.CON)
+ [使用AWS CLI刪除 ElastiCache 叢集](Clusters.Delete.md#Clusters.Delete.CLI)
+ [使用 ElastiCache API](Clusters.Delete.md#Clusters.Delete.API)
+ [擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)
+ [減少碎片中的複本數量](decrease-replica-count.md)

# 針對 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，將僅供讀取複本提升為主要複本
<a name="Replication.PromoteReplica"></a>

下列主題中的資訊僅適用於 Valkey 或 Redis OSS （停用叢集模式） 複寫群組。

您可以使用 AWS CLI、 或 ElastiCache API AWS 管理主控台，將 Valkey 或 Redis OSS （停用叢集模式） 僅供讀取複本提升為主要複本。您無法在 複寫群組上啟用具備自動容錯移轉的異地同步備份時，將僅供讀取複本提升為主要節點。若要將啟用異地同步備份的複寫群組上的 Valkey 或 Redis OSS （停用叢集模式） 複本提升為主要複本，請執行下列動作：

1. 修改複寫群組以停用異地同步備份 (您所有的叢集不需要位於相同可用區域，也能執行此作業)。如需詳細資訊，請參閱[修改複寫群組](Replication.Modify.md)。

1. 將僅供讀取複本提升為主要節點。

1. 修改複寫群組來重新啟用異地同步備份。

多個可用區不適用於執行 Redis OSS 2.6.13 或更早版本的複寫群組。

## 使用 AWS 管理主控台
<a name="Replication.PromoteReplica.CON"></a>

以下程序會使用主控台將複本節點提升為主要節點。

**將僅供讀取複本提升為主節點 (主控台)**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 如果您想要提升的複本是啟用異地同步備份的 Valkey 或 Redis OSS （停用叢集模式） 複寫群組的成員，請在繼續之前修改複寫群組以停用異地同步備份。如需詳細資訊，請參閱[修改複寫群組](Replication.Modify.md)。

1. 選擇 **Valkey** 或 **Redis OSS**，然後從叢集清單中選擇您要修改的複寫群組。此複寫群組必須執行「Redis」引擎而非「Clustered Redis」引擎，並且必須至少擁有兩個以上的節點。

1. 從節點清單中，選擇您希望提升為主要節點的複本節點，然後針對 **Actions (動作)**，選擇 **Promote (提升)**。

1. 在 **Promote Read Replica (提升僅供讀取複本)** 對話方塊中，執行下列作業：

   1. 針對**立即套用**，選擇 **Yes (是)** 來立即提升僅供讀取複本，或是 **No (否)** 來在下一次叢集的維修時間內提升。

   1. 選擇 **Promote (提升)** 以提升僅供讀取複本，或選擇 **Cancel (取消)** 以取消操作。

1. 若在您開始提升程序前該叢集已啟用異地同步備份，請等到複寫群組的狀態成為 **available (可用)** 時再修改叢集以重新啟用異地同步備份。如需詳細資訊，請參閱[修改複寫群組](Replication.Modify.md)。

## 使用 AWS CLI
<a name="Replication.PromoteReplica.CLI"></a>

若複寫群組已啟用異地同步備份，您便無法將僅供讀取複本提升為主要節點。在某些情況下，您要提升的複本可能是已啟用異地同步備份的複寫群組的成員。在這些情況下，您必須先修改複寫群組來停用異地同步備份，之後才能繼續。您所有的叢集不需要位於相同可用區域，也能執行此作業。如需修改複寫群組的詳細資訊，請參閱[修改複寫群組](Replication.Modify.md)。

下列 AWS CLI 命令會修改複寫群組 `sample-repl-group`，使僅供讀取複本`my-replica-1`成為複寫群組中的主要複本。

若為 Linux、macOS 或 Unix：

```
aws elasticache modify-replication-group \
   --replication-group-id sample-repl-group \
   --primary-cluster-id my-replica-1
```

針對 Windows：

```
aws elasticache modify-replication-group ^
   --replication-group-id sample-repl-group ^
   --primary-cluster-id my-replica-1
```

如需修改複寫群組的詳細資訊，請參閱 *Amazon ElastiCache 命令列參考*中的 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)。

## 使用 ElastiCache API
<a name="Replication.PromoteReplica.API"></a>

若複寫群組已啟用異地同步備份，您便無法將僅供讀取複本提升為主要節點。在某些情況下，您要提升的複本可能是已啟用異地同步備份的複寫群組的成員。在這些情況下，您必須先修改複寫群組來停用異地同步備份，之後才能繼續。您所有的叢集不需要位於相同可用區域，也能執行此作業。如需修改複寫群組的詳細資訊，請參閱[修改複寫群組](Replication.Modify.md)。

以下 ElastiCache API 動作會修改 `myReplGroup` 複寫群組，使僅供讀取複本 `myReplica-1` 成為複寫群組中的主節點。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=ModifyReplicationGroup
   &ReplicationGroupId=myReplGroup
   &PrimaryClusterId=myReplica-1  
   &Version=2014-12-01
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20141201T220302Z
   &X-Amz-Algorithm=&AWS;4-HMAC-SHA256
   &X-Amz-Date=20141201T220302Z
   &X-Amz-SignedHeaders=Host
   &X-Amz-Expires=20141201T220302Z
   &X-Amz-Credential=<credential>
   &X-Amz-Signature=<signature>
```

如需修改複寫群組的詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的 [ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)。

# 管理 ElastiCache 叢集維護
<a name="maintenance-window"></a>

每個叢集都有每週一次的維護時段，會在此期間套用任何系統變更。透過 Valkey 和 Redis OSS，複寫群組具有相同的每週維護時段。若您在建立或修改叢集或複寫群組時沒有指定偏好的維護時段，ElastiCache 會隨機選取一週中某一天，在您區域的維護時段內指派 60 分鐘的維護時段。

60 分鐘的維護時段隨機選自每個區域的 8 小時時段。以下資料表列出每個區域的時段，預設維護時段會從此時段中指派。您可以選擇區域維護時段以外的偏好維護時段。


| 區域代碼 | 區域名稱 | 區域維護時段 | 
| --- | --- | --- | 
| ap-northeast-1 | 亞太 (東京) 區域 | 13:00–21:00 UTC | 
| ap-northeast-2 | 亞太 (首爾) 區域 | 12:00–20:00 UTC | 
| ap-northeast-3 | 亞太 (大阪) 區域 | 12:00–20:00 UTC | 
| ap-southeast-3 | 亞太區域 (雅加達) | 14:00–22:00 UTC | 
| ap-south-1 | 亞太 (孟買) 區域 | 17:30-1:30 (UTC) | 
| ap-southeast-1 | 亞太 (新加坡) 區域 | 14:00–22:00 UTC | 
| cn-north-1 | 中國 (北京) 區域 | 下午 2 時至 10 時 (UTC) | 
| cn-northwest-1 | 中國 (寧夏) 區域 | 14:00–22:00 UTC | 
| ap-east-1 | 亞太區域 (香港) 區域 | 13:00–21:00 UTC | 
| ap-southeast-2 | 亞太 (雪梨) 區域 | 12:00–20:00 UTC | 
| eu-west-3 | 歐洲 (巴黎) 區域 | 下午 11 時 59 分至上午 7 時 29 分 (UTC) | 
| af-south-1 | 非洲 (開普敦) 區域 | 13:00–21:00 UTC | 
| eu-central-1 | 歐洲 (法蘭克福) 區域 | 23:00–07:00 UTC | 
| eu-west-1 | 歐洲 (愛爾蘭) 區域 | 下午 10 時至次日上午 6 時 (UTC) | 
| eu-west-2 | 歐洲 (倫敦) 區域 | 23:00–07:00 UTC | 
| me-south-1 | Middle East (Bahrain) Region | 13:00–21:00 UTC | 
| me-central-1 | 中東 (阿拉伯聯合大公國) 區域 | 13:00–21:00 UTC | 
| eu-south-1 | Europe (Milan) Region | 21:00–05:00 UTC | 
| sa-east-1 | 南美洲 (聖保羅) 區域 | 01:00-09:00 (UTC) | 
| us-east-1 | 美國東部 (維吉尼亞北部) 區域 | 上午 3 時至上午 11 時 (UTC) | 
| us-east-2 | 美國東部 (俄亥俄) 區域 | 04:00-12:00 (UTC) | 
| us-gov-west-1 | AWS GovCloud (US) 區域 | 06:00–14:00 UTC | 
| us-west-1 | 美國西部 (加利佛尼亞北部) 區域 | 06:00–14:00 UTC | 
| us-west-2 | 美國西部 (奧勒岡) 區域 | 06:00–14:00 UTC | 

**變更叢集或複寫群組的維護時段**  
維護時段應落在使用量最低的時段，因此可能需要不時進行調整。您可以修改叢集或複寫群組來指定時間範圍，最多 24 小時，您已請求的所有維護活動都會在此期間進行。在此期間會進行所有您請求的延遲或待處理叢集修改。

**注意**  
如果您想要使用 AWS 管理主控台 選取**立即套用**方塊，立即套用節點類型修改和/或引擎升級。否則，這些修改將在您排程的下一次維護時段套用。若要使用 API，請參閱 [modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)或 [modify-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-cache-cluster.html)。

**其他資訊**  
如需維護時段和節點取代的資訊，請參閱下列內容：
+ [ElastiCache 維護](https://aws.amazon.com/elasticache/elasticache-maintenance/) - 維護和節點更換的常見問答集
+ [取代節點 (Memcached)](CacheNodes.NodeReplacement-mc.md)—管理 Memcached 的節點替換
+ [修改 ElastiCache 叢集](Clusters.Modify.md) - 變更叢集的維護時段
+ [取代節點 (Valkey 和 Redis OSS)](CacheNodes.NodeReplacement.md) - 管理節點更換
+ [修改複寫群組](Replication.Modify.md) - 變更複寫群組的維護時段

# 使用 ElastiCache 參數群組設定引擎參數
<a name="ParameterGroups"></a>

Amazon ElastiCache 使用參數控制您節點與叢集的執行時間屬性。一般而言，更新的引擎版本會包含額外參數，可支援更新的功能。如需 Memcached 參數的資料表，請參閱 [Memcached 專用參數](ParameterGroups.Engine.md#ParameterGroups.Memcached)。如需 Valkey 和 Redis OSS 參數的資料表，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)。

如您所預期的，有些參數值 (例如 `maxmemory`) 會由引擎與節點類型決定。如需依節點類型列出這些 Memcached 參數值的資料表，請參閱 [Memcached 節點類型專用參數](ParameterGroups.Engine.md#ParameterGroups.Memcached.NodeSpecific)。如需這些依節點類型的 Valkey 和 Redis OSS 參數值的資料表，請參閱 [Redis OSS 節點類型特定參數](ParameterGroups.Engine.md#ParameterGroups.Redis.NodeSpecific)。

**注意**  
如需 Memcached 限定參數，請參閱 [Memcached 限定參數](ParameterGroups.Engine.md#ParameterGroups.Memcached)。

**Topics**
+ [ElastiCache 中的參數管理](ParameterGroups.Management.md)
+ [ElastiCache 中的快取參數群組層](ParameterGroups.Tiers.md)
+ [建立 ElastiCache 參數群組](ParameterGroups.Creating.md)
+ [依名稱列出 ElastiCache 參數群組](ParameterGroups.ListingGroups.md)
+ [列出 ElastiCache 參數群組的值](ParameterGroups.ListingValues.md)
+ [修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)
+ [刪除 ElastiCache 參數群組](ParameterGroups.Deleting.md)
+ [引擎特定參數](ParameterGroups.Engine.md)

# ElastiCache 中的參數管理
<a name="ParameterGroups.Management"></a>

ElastiCache 參數會分組為具名參數群組，以便於管理參數。參數群組代表在啟動期間傳遞給引擎軟體的參數特定值組合。這些值會決定每個節點上的引擎程序在執行時間的行為。特定參數群組上的參數值會套用到所有與群組相關聯的節點，無論節點所屬的叢集為何。

若要調整您叢集的效能，您可以修改一部分的參數值，或是變更叢集的參數群組。
+ 您無法修改或刪除預設參數群組。若您需要自訂參數值，您必須建立自訂參數群組。
+ 對於 Memcached，參數群組系列和您要指派給它的叢集必須相容。例如，若您的叢集執行 Memcached 1.4.8 版，您只能使用來自 Memcached 1.4 系列的參數群組 (預設或自訂)。

  對於 Redis OSS，參數群組系列和您要指派給它的叢集必須相容。例如，如果您的叢集執行 Redis OSS 3.2.10 版，您只能使用 Redis OSS 3.2 系列的預設或自訂參數群組。
+ 若您變更叢集的參數群組，任何可條件式修改的參數值在目前及新的參數群組中都必須相同。
+ 對於 Memcached，當您變更叢集的參數時，變更會立即套用至叢集。無論是變更叢集的參數群組本身或是叢集的參數群組內的參數值，均適用此情況。若要判斷特定參數變更何時套用，請參閱 [Memcached 專用參數](ParameterGroups.Engine.md#ParameterGroups.Memcached) 資料表中的**變更生效**。如需重新啟動叢集節點的相關資訊，請參閱[重新啟動叢集](Clusters.html#Rebooting)。
+ 對於 Redis OSS，當您變更叢集的參數時，變更會立即套用到叢集，或在叢集節點重新啟動後套用到叢集，但例外狀況如下。無論是變更叢集的參數群組本身或是叢集的參數群組內的參數值，均適用此情況。若要判斷特定參數變更何時套用，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis) 資料表中的**變更生效**。

  如需重新啟動 Valkey 或 Redis OSS 節點的詳細資訊，請參閱 [重新啟動節點](nodes.rebooting.md)。
**Valkey 或 Redis OSS （啟用叢集模式） 參數變更**  
如果您在 Valkey 或 Redis OSS （啟用叢集模式） 叢集上變更下列參數，請遵循後續步驟。  
activerehashing
databases
建立叢集的手動備份。請參閱 [取得手動備份](backups-manual.md)。
刪除叢集。請參閱[刪除叢集](Clusters.html#Delete)。
使用更改的參數群組和備份來植入新的叢集，以還原叢集。請參閱 [從備份還原到新的快取](backups-restoring.md)。
對其他參數進行變更不需要這樣做。
+ 您可以將參數群組與 Valkey 和 Redis OSS 全域資料存放區建立關聯。*全域資料存放區*是跨 AWS 區域的一或多個叢集集合。在此情況下，組成全域資料存放區的所有叢集都會共用參數群組。對主要叢集參數群組進行的任何修改都會複寫到全域資料存放區中的所有其餘叢集。如需詳細資訊，請參閱[使用全域資料存放區跨AWS區域複寫](Redis-Global-Datastore.md)。

  您可以查看下列位置來檢查參數群組是否屬於全域資料存放區的一部分：
  + ElastiCache 主控台的 **Parameter Groups (參數群組)** 頁面上的 yes/no **Global (全域) 屬性** 
  + [CacheParameterGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CacheParameterGroup.html) API 作業的 yes/no `IsGlobal` 屬性

# ElastiCache 中的快取參數群組層
<a name="ParameterGroups.Tiers"></a>

Amazon ElastiCache 有三層快取參數群組，如下所示。

![\[圖片：Amazon ElastiCache 參數群組層\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCache-ParameterGroups-Tiers.png)


*Amazon ElastiCache 參數群組層*

**全域預設**

區域內所有 Amazon ElastiCache 客戶的最上層根參數群組。

全域預設快取參數群組：
+ 會為 ElastiCache 保留，客戶無法使用。

**客戶預設**

全域預設快取參數群組的複本，其建立的目的是供客戶使用。

客戶預設快取參數群組：
+ 由 ElastiCache 建立和擁有。
+ 可供客戶用來做為任何執行此快取參數群組所支援引擎版本叢集的快取參數群組使用。
+ 客戶無法對其進行編輯。

**客戶自有**

客戶預設快取參數群組的複本。客戶自有快取參數群組會在客戶建立快取參數群組時建立。

客戶自有快取參數群組：
+ 由客戶建立及擁有。
+ 可指派給任何客戶的相容叢集。
+ 客戶可對其進行修改，建立自訂快取參數群組。

  並非所有參數值皆可修改。如需 Memcached 值的詳細資訊，請參閱 [Memcached 專用參數](ParameterGroups.Engine.md#ParameterGroups.Memcached)。如需 Valkey 和 Redis OSS 值的詳細資訊，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)。

# 建立 ElastiCache 參數群組
<a name="ParameterGroups.Creating"></a>

若您希望修改不同於預設值的一或多個參數值，便需要建立新的參數群組。您可以使用 ElastiCache 主控台、 AWS CLI或 ElastiCache API 建立參數群組。

## 建立 ElastiCache 參數群組 （主控台）
<a name="ParameterGroups.Creating.CON"></a>

下列程序說明如何使用 ElastiCache 主控台建立參數群組。

**使用 ElastiCache 主控台建立參數群組**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 若要查看所有可用參數群組的清單，請從左側的導覽窗格中，選擇 **Parameter Groups (參數群組)**。

1. 若要建立新的參數群組，請選擇 **Create Parameter Group (建立參數群組)**。

   **Create Parameter Group (建立參數群組)** 畫面隨即出現。

1. 從 **Family (系列)** 清單，選擇做為您參數群組範本的參數群組系列。

   參數群組系列，例如 *memcached1.4* 或 *redis3.2，會*定義參數群組中的實際參數及其初始值。參數群組系列必須與叢集的引擎和版本一致。

1. 在 **Name (名稱)** 方塊中，輸入此參數群組的唯一名稱。

   建立叢集或修改叢集的參數群組時，您便會根據其名稱選擇參數群組。因此，我們建議選擇附帶資訊且能以某種方式識別參數群組系列的名稱。

   參數群組命名限制條件如下：
   + 必須以 ASCII 字母開頭。
   + 它只能包含 ASCII 字母、數字和連字符號。
   + 長度必須介於 1 至 255 個字元之間。
   + 不能連續包含兩個連字號。
   + 結尾不能是連字號。

1. 在 **Description (描述)** 方塊中，輸入參數群組的描述。

1. 若要建立參數群組，請選擇 **Create (建立)**。

   若要終止程序而不建立參數群組，請選擇 **Cancel (取消)**。

1. 建立參數群組時，它會擁有系列的預設值。若要變更預設值，您必須修改參數群組。如需詳細資訊，請參閱[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。

## 建立 ElastiCache 參數群組 (AWS CLI)
<a name="ParameterGroups.Creating.CLI"></a>

若要使用 建立參數群組 AWS CLI，請使用 命令`create-cache-parameter-group`搭配這些參數。
+ `--cache-parameter-group-name` - 參數群組的名稱。

  參數群組命名限制條件如下：
  + 必須以 ASCII 字母開頭。
  + 它只能包含 ASCII 字母、數字和連字符號。
  + 長度必須介於 1 至 255 個字元之間。
  + 不能連續包含兩個連字號。
  + 結尾不能是連字號。
+ `--cache-parameter-group-family` - 參數群組的引擎和版本系列。
+ `--description` - 使用者提供的參數群組說明。

**Example**  
以下範例會建立名為 *myMem14* 的參數群組，並使用 memcached1.4 系列做為範本。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache create-cache-parameter-group \
    --cache-parameter-group-name myMem14  \
    --cache-parameter-group-family memcached1.4 \
    --description "My first parameter group"
```
針對 Windows：  

```
aws elasticache create-cache-parameter-group ^
    --cache-parameter-group-name myMem14  ^
    --cache-parameter-group-family memcached1.4 ^
    --description "My first parameter group"
```
此命令的輸出看起來會與以下內容相似。  

```
{
    "CacheParameterGroup": {
        "CacheParameterGroupName": "myMem14", 
        "CacheParameterGroupFamily": "memcached1.4", 
        "Description": "My first  parameter group"
    }
}
```

**Example**  
以下範例會建立名為 *myRed28* 的參數群組，並使用 redis2.8 系列做為範本。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache create-cache-parameter-group \
    --cache-parameter-group-name myRed28  \
    --cache-parameter-group-family redis2.8 \
    --description "My first parameter group"
```
針對 Windows：  

```
aws elasticache create-cache-parameter-group ^
    --cache-parameter-group-name myRed28  ^
    --cache-parameter-group-family redis2.8 ^
    --description "My first parameter group"
```
此命令的輸出看起來會與以下內容相似。  

```
{
    "CacheParameterGroup": {
        "CacheParameterGroupName": "myRed28", 
        "CacheParameterGroupFamily": "redis2.8", 
        "Description": "My first parameter group"
    }
}
```

建立參數群組時，它會擁有系列的預設值。若要變更預設值，您必須修改參數群組。如需詳細資訊，請參閱[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。

如需詳細資訊，請參閱[https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-cache-parameter-group.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-cache-parameter-group.html)。

## 建立 ElastiCache 參數群組 (ElastiCache API)
<a name="ParameterGroups.Creating.API"></a>

若要使用 ElastiCache API 建立參數群組，請搭配這些參數使用 `CreateCacheParameterGroup` 動作。
+ `ParameterGroupName` - 參數群組的名稱。

  參數群組命名限制條件如下：
  + 必須以 ASCII 字母開頭。
  + 它只能包含 ASCII 字母、數字和連字符號。
  + 長度必須介於 1 至 255 個字元之間。
  + 不能連續包含兩個連字號。
  + 結尾不能是連字號。
+ `CacheParameterGroupFamily` - 參數群組的引擎和版本系列。例如 `memcached1.4`。
+ `CacheParameterGroupFamily` - 參數群組的引擎和版本系列。例如 `redis2.8`。
+ `Description` - 使用者提供的參數群組說明。

**Example**  
以下範例會建立名為 *myMem14* 的參數群組，並使用 memcached1.4 系列做為範本。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=CreateCacheParameterGroup
   &CacheParameterGroupFamily=memcached1.4
   &CacheParameterGroupName=myMem14
   &Description=My%20first%20parameter%20group
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
此動作的回應看起來會與以下內容相似。  

```
<CreateCacheParameterGroupResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <CreateCacheParameterGroupResult>
    <CacheParameterGroup>
      <CacheParameterGroupName>myMem14</CacheParameterGroupName>
      <CacheParameterGroupFamily>memcached1.4</CacheParameterGroupFamily>
      <Description>My first  parameter group</Description>
    </CacheParameterGroup>
  </CreateCacheParameterGroupResult>
  <ResponseMetadata>
    <RequestId>d8465952-af48-11e0-8d36-859edca6f4b8</RequestId>
  </ResponseMetadata>
</CreateCacheParameterGroupResponse>
```

**Example**  
以下範例會建立名為 *myRed28* 的參數群組，並使用 redis2.8 系列做為範本。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=CreateCacheParameterGroup
   &CacheParameterGroupFamily=redis2.8
   &CacheParameterGroupName=myRed28
   &Description=My%20first%20parameter%20group
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
此動作的回應看起來會與以下內容相似。  

```
<CreateCacheParameterGroupResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <CreateCacheParameterGroupResult>
    <CacheParameterGroup>
      <CacheParameterGroupName>myRed28</CacheParameterGroupName>
      <CacheParameterGroupFamily>redis2.8</CacheParameterGroupFamily>
      <Description>My first parameter group</Description>
    </CacheParameterGroup>
  </CreateCacheParameterGroupResult>
  <ResponseMetadata>
    <RequestId>d8465952-af48-11e0-8d36-859edca6f4b8</RequestId>
  </ResponseMetadata>
</CreateCacheParameterGroupResponse>
```

建立參數群組時，它會擁有系列的預設值。若要變更預設值，您必須修改參數群組。如需詳細資訊，請參閱[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。

如需詳細資訊，請參閱[https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateCacheParameterGroup.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CreateCacheParameterGroup.html)。

# 依名稱列出 ElastiCache 參數群組
<a name="ParameterGroups.ListingGroups"></a>

您可以使用 ElastiCache 主控台、 AWS CLI或 ElastiCache API 列出參數群組。

## 依名稱列出參數群組 (主控台)
<a name="ParameterGroups.ListingGroups.CON"></a>

下列程序說明如何使用 ElastiCache 主控台檢視參數群組清單。

**使用 ElastiCache 主控台列出參數群組**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 若要查看所有可用參數群組的清單，請從左側的導覽窗格中，選擇 **Parameter Groups (參數群組)**。

## 依名稱列出 ElastiCache 參數群組 (AWS CLI)
<a name="ParameterGroups.ListingGroups.CLI"></a>

若要使用 產生參數群組清單 AWS CLI，請使用 命令 `describe-cache-parameter-groups`。若您提供參數群組的名稱，便只會列出該參數群組。若您沒有提供參數群組的名稱，最多會列出 `--max-records` 個參數群組。在任一種情況下，都會列出參數群組的名稱、系列和描述。

**Example**  
以下範本程式碼會列出 *myMem14* 參數群組。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache describe-cache-parameter-groups \
    --cache-parameter-group-name myMem14
```
針對 Windows：  

```
aws elasticache describe-cache-parameter-groups ^
    --cache-parameter-group-name myMem14
```
此命令的輸出看起來會與以下內容相似，列出參數群組的名稱、系列和描述。  

```
{
    "CacheParameterGroups": [
	    {
	        "CacheParameterGroupName": "myMem14", 
	        "CacheParameterGroupFamily": "memcached1.4", 
	        "Description": "My first parameter group"
	    }
    ]
}
```

**Example**  
以下範本程式碼會列出 *myRed28* 參數群組。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache describe-cache-parameter-groups \
    --cache-parameter-group-name myRed28
```
針對 Windows：  

```
aws elasticache describe-cache-parameter-groups ^
    --cache-parameter-group-name myRed28
```
此命令的輸出看起來會與以下內容相似，列出參數群組的名稱、系列和描述。  

```
{
    "CacheParameterGroups": [
	    {
	        "CacheParameterGroupName": "myRed28", 
	        "CacheParameterGroupFamily": "redis2.8", 
	        "Description": "My first parameter group"
	    }
    ]
}
```

**Example**  
下列範例程式碼列出在 Redis OSS 引擎版本 *myRed56*56。如果參數組是 [使用全域資料存放區跨AWS區域複寫](Redis-Global-Datastore.md) 的一部分，則在輸出中傳回的 `IsGlobal` 屬性值將是 `Yes`。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache describe-cache-parameter-groups \
    --cache-parameter-group-name myRed56
```
針對 Windows：  

```
aws elasticache describe-cache-parameter-groups ^
    --cache-parameter-group-name myRed56
```
此命令的輸出看起來會與以下內容相似，列出參數群組的名稱、系列、isGlobal 和描述。  

```
{
    "CacheParameterGroups": [
	    {
	        "CacheParameterGroupName": "myRed56", 
	        "CacheParameterGroupFamily": "redis5.0", 	        
	        "Description": "My first parameter group",
	        "IsGlobal": "yes"	        
	    }
    ]
}
```

**Example**  
以下範本程式碼會列出最多 10 個參數群組。  

```
aws elasticache describe-cache-parameter-groups --max-records 10
```
此命令的 JSON 輸出看起來像這樣：列出每個參數群組的名稱、系列、描述，以及在使用 redis5.6 的情況下，參數群組是否為全域資料存放區 (isGlobal) 的一部分。  

```
{
    "CacheParameterGroups": [
        {
            "CacheParameterGroupName": "custom-redis32", 
            "CacheParameterGroupFamily": "redis3.2", 
            "Description": "custom parameter group with reserved-memory > 0"
        }, 
        {
            "CacheParameterGroupName": "default.memcached1.4", 
            "CacheParameterGroupFamily": "memcached1.4", 
            "Description": "Default parameter group for memcached1.4"
        }, 
        {
            "CacheParameterGroupName": "default.redis2.6", 
            "CacheParameterGroupFamily": "redis2.6", 
            "Description": "Default parameter group for redis2.6"
        }, 
        {
            "CacheParameterGroupName": "default.redis2.8", 
            "CacheParameterGroupFamily": "redis2.8", 
            "Description": "Default parameter group for redis2.8"
        }, 
        {
            "CacheParameterGroupName": "default.redis3.2", 
            "CacheParameterGroupFamily": "redis3.2", 
            "Description": "Default parameter group for redis3.2"
        }, 
        {
            "CacheParameterGroupName": "default.redis3.2.cluster.on", 
            "CacheParameterGroupFamily": "redis3.2", 
            "Description": "Customized default parameter group for redis3.2 with cluster mode on"
        },
        {
            "CacheParameterGroupName": "default.redis5.6.cluster.on", 
            "CacheParameterGroupFamily": "redis5.0", 
            "Description": "Customized default parameter group for redis5.6 with cluster mode on",
            "isGlobal": "yes"
        },
    ]
}
```

如需詳細資訊，請參閱[https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-cache-parameter-groups.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-cache-parameter-groups.html)。

## 依名稱列出 ElastiCache 參數群組 (ElastiCache API)
<a name="ParameterGroups.ListingGroups.API"></a>

若要使用 ElastiCache API 產生參數群組清單，請使用 `DescribeCacheParameterGroups` 動作。若您提供參數群組的名稱，便只會列出該參數群組。若您沒有提供參數群組的名稱，最多會列出 `MaxRecords` 個參數群組。在任一種情況下，都會列出參數群組的名稱、系列和描述。

**Example**  
以下範本程式碼會列出 *myMem14* 參數群組。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameterGroups
   &CacheParameterGroupName=myMem14
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
此動作的回應看起來會與以下內容相似，列出每個參數群組的名稱、系列和描述。  

```
<DescribeCacheParameterGroupsResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParameterGroupsResult>
    <CacheParameterGroups>
      <CacheParameterGroup>
        <CacheParameterGroupName>myMem14</CacheParameterGroupName>
        <CacheParameterGroupFamily>memcached1.4</CacheParameterGroupFamily>
        <Description>My custom Memcached 1.4 parameter group</Description>
      </CacheParameterGroup>
    </CacheParameterGroups>
  </DescribeCacheParameterGroupsResult>
  <ResponseMetadata>
    <RequestId>3540cc3d-af48-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParameterGroupsResponse>
```

**Example**  
以下範本程式碼會列出最多 10 個參數群組。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameterGroups
   &MaxRecords=10
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
此動作的回應看起來像這樣：列出每個參數群組的名稱、系列、描述，以及在使用 redis5.6 的情況下，參數群組是否屬於全域資料存放區 (isGlobal)。  

```
<DescribeCacheParameterGroupsResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParameterGroupsResult>
    <CacheParameterGroups>
      <CacheParameterGroup>
        <CacheParameterGroupName>myRedis28</CacheParameterGroupName>
        <CacheParameterGroupFamily>redis2.8</CacheParameterGroupFamily>
        <Description>My custom Redis 2.8 parameter group</Description>
      </CacheParameterGroup>
      <CacheParameterGroup>
        <CacheParameterGroupName>myMem14</CacheParameterGroupName>
        <CacheParameterGroupFamily>memcached1.4</CacheParameterGroupFamily>
        <Description>My custom Memcached 1.4 parameter group</Description>
      </CacheParameterGroup>
       <CacheParameterGroup>
        <CacheParameterGroupName>myRedis56</CacheParameterGroupName>
        <CacheParameterGroupFamily>redis5.0</CacheParameterGroupFamily>
        <Description>My custom redis 5.6 parameter group</Description>
        <isGlobal>yes</isGlobal>
      </CacheParameterGroup>
    </CacheParameterGroups>
  </DescribeCacheParameterGroupsResult>
  <ResponseMetadata>
    <RequestId>3540cc3d-af48-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParameterGroupsResponse>
```

**Example**  
以下範本程式碼會列出 *myRed28* 參數群組。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameterGroups
   &CacheParameterGroupName=myRed28
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
此動作的回應看起來會與以下內容相似，列出名稱、系列和描述。  

```
<DescribeCacheParameterGroupsResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParameterGroupsResult>
    <CacheParameterGroups>
      <CacheParameterGroup>
        <CacheParameterGroupName>myRed28</CacheParameterGroupName>
        <CacheParameterGroupFamily>redis2.8</CacheParameterGroupFamily>
        <Description>My custom Redis 2.8 parameter group</Description>
      </CacheParameterGroup>
    </CacheParameterGroups>
  </DescribeCacheParameterGroupsResult>
  <ResponseMetadata>
    <RequestId>3540cc3d-af48-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParameterGroupsResponse>
```

**Example**  
以下範本程式碼會列出 *myRed56* 參數群組。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameterGroups
   &CacheParameterGroupName=myRed56
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
此動作的回應看起來像這樣：列出名稱、系列、描述以及參數群組是否為全域資料存放區 (isGlobal) 的一部分。  

```
<DescribeCacheParameterGroupsResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParameterGroupsResult>
    <CacheParameterGroups>
      <CacheParameterGroup>
        <CacheParameterGroupName>myRed56</CacheParameterGroupName>
        <CacheParameterGroupFamily>redis5.0</CacheParameterGroupFamily>
        <Description>My custom Redis 5.6 parameter group</Description>
        <isGlobal>yes</isGlobal>
      </CacheParameterGroup>
    </CacheParameterGroups>
  </DescribeCacheParameterGroupsResult>
  <ResponseMetadata>
    <RequestId>3540cc3d-af48-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParameterGroupsResponse>
```

如需詳細資訊，請參閱[https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeCacheParameterGroups.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeCacheParameterGroups.html)。

# 列出 ElastiCache 參數群組的值
<a name="ParameterGroups.ListingValues"></a>

您可以使用 ElastiCache 主控台、 AWS CLI或 ElastiCache API 列出參數群組的參數及其值。

## 列出 ElastiCache 參數群組的值 （主控台）
<a name="ParameterGroups.ListingValues.CON"></a>

下列程序說明如何使用 ElastiCache 主控台列出參數群組的參數及其值。

**使用 ElastiCache 主控台列出參數群組的參數及其值**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 若要查看所有可用參數群組的清單，請從左側的導覽窗格中，選擇 **Parameter Groups (參數群組)**。

1. 透過選擇參數群組名稱左側的方塊，選擇您希望列出其參數及值的參數群組。

   參數及其值會在畫面底部列出。根據參數的數量，您可能需要向上或向下捲動來尋找您想要的參數。

## 列出參數群組的值 (AWS CLI)
<a name="ParameterGroups.ListingValues.CLI"></a>

若要使用 列出參數群組的參數及其值 AWS CLI，請使用 命令 `describe-cache-parameters`。

**Example**  
下列範例程式碼會列出參數群組 *myMem14* 的所有 Memcached 參數及其值。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache describe-cache-parameters \
    --cache-parameter-group-name myMem14
```
針對 Windows：  

```
aws elasticache describe-cache-parameters ^
    --cache-parameter-group-name myMem14
```

**Example**  
以下範本程式碼會列出 *myRedis28* 參數群組的所有參數及其值。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache describe-cache-parameters \
    --cache-parameter-group-name myRedis28
```
針對 Windows：  

```
aws elasticache describe-cache-parameters ^
    --cache-parameter-group-name myRed28
```

如需詳細資訊，請參閱[https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-cache-parameters.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-cache-parameters.html)。

## 列出參數群組的值 (ElastiCache API)
<a name="ParameterGroups.ListingValues.API"></a>

若要使用 ElastiCache API 列出參數群組的參數及其值，請使用 `DescribeCacheParameters` 動作。

**Example**  
下列範例程式碼會列出參數群組 *myMem14* 的所有 Memcached 參數。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameters
   &CacheParameterGroupName=myMem14
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
此動作的回應看起來會與以下內容相似。此回應已進行截斷。  

```
<DescribeCacheParametersResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParametersResult>
    <CacheClusterClassSpecificParameters>
      <CacheNodeTypeSpecificParameter>
        <DataType>integer</DataType>
        <Source>system</Source>
        <IsModifiable>false</IsModifiable>
        <Description>The maximum configurable amount of memory to use to store items, in megabytes.</Description>
        <CacheNodeTypeSpecificValues>
          <CacheNodeTypeSpecificValue>
            <Value>1000</Value>
            <CacheClusterClass>cache.c1.medium</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>6000</Value>
            <CacheClusterClass>cache.c1.xlarge</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>7100</Value>
            <CacheClusterClass>cache.m1.large</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>1300</Value>
            <CacheClusterClass>cache.m1.small</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          
...output omitted...

    </CacheClusterClassSpecificParameters>
  </DescribeCacheParametersResult>
  <ResponseMetadata>
    <RequestId>6d355589-af49-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParametersResponse>
```

**Example**  
以下範本程式碼會列出 *myRed28* 參數群組的所有參數。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DescribeCacheParameters
   &CacheParameterGroupName=myRed28
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```
此動作的回應看起來會與以下內容相似。此回應已進行截斷。  

```
<DescribeCacheParametersResponse xmlns="http://elasticache.amazonaws.com/doc/2013-06-15/">
  <DescribeCacheParametersResult>
    <CacheClusterClassSpecificParameters>
      <CacheNodeTypeSpecificParameter>
        <DataType>integer</DataType>
        <Source>system</Source>
        <IsModifiable>false</IsModifiable>
        <Description>The maximum configurable amount of memory to use to store items, in megabytes.</Description>
        <CacheNodeTypeSpecificValues>
          <CacheNodeTypeSpecificValue>
            <Value>1000</Value>
            <CacheClusterClass>cache.c1.medium</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>6000</Value>
            <CacheClusterClass>cache.c1.xlarge</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>7100</Value>
            <CacheClusterClass>cache.m1.large</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          <CacheNodeTypeSpecificValue>
            <Value>1300</Value>
            <CacheClusterClass>cache.m1.small</CacheClusterClass>
          </CacheNodeTypeSpecificValue>
          
...output omitted...

    </CacheClusterClassSpecificParameters>
  </DescribeCacheParametersResult>
  <ResponseMetadata>
    <RequestId>6d355589-af49-11e0-97f9-279771c4477e</RequestId>
  </ResponseMetadata>
</DescribeCacheParametersResponse>
```

如需詳細資訊，請參閱[https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeCacheParameters.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeCacheParameters.html)。

# 修改 ElastiCache 參數群組
<a name="ParameterGroups.Modifying"></a>

**重要**  
您無法修改任何預設參數群組。

您可以修改參數群組中的某些參數值。這些參數值都會套用到與參數群組相關聯的叢集。如需何時將參數值變更套用至參數群組的詳細資訊，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)和 [Memcached 專用參數](ParameterGroups.Engine.md#ParameterGroups.Memcached)。

## 修改參數群組 (主控台)
<a name="ParameterGroups.Modifying.CON"></a>

下列程序說明如何使用 ElastiCache 主控台變更 `cluster-enabled` 參數的值。您會使用相同的程序來變更任何參數的值。

**使用 ElastiCache 主控台變更參數值**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 若要查看所有可用參數群組的清單，請從左側的導覽窗格中，選擇 **Parameter Groups (參數群組)**。

1. 透過選擇參數群組名稱左側的方塊，選擇您希望修改的參數群組。

   參數群組的參數會在畫面底部列出。您可能需要查看各頁才能看到所有參數。

1. 若要修改一或多個參數，請選擇 **Edit Parameters (編輯參數)**。

1. 在 **Edit Parameter Group: (編輯參數群組：)** 畫面中，使用向左和向右箭頭捲動，直到找到 `binding_protocol` 參數，然後在 **Value (數值)** 欄中輸入 `ascii`。

1. 選擇 **Save Changes** (儲存變更)。

1. 對於 Memcached，若要尋找您變更的參數名稱，請參閱 [Memcached 專用參數](ParameterGroups.Engine.md#ParameterGroups.Memcached)。若變更是在「重新啟動之後」**才套用到參數，請重新開機每個使用此參數群組的叢集。如需詳細資訊，請參閱[重新啟動叢集](Clusters.html#Rebooting)。

1. 使用 Valkey 和 Redis OSS，若要尋找您變更的參數名稱，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)。如果您有 Valkey 或 Redis OSS （停用叢集模式） 叢集，並變更下列參數，則必須重新啟動叢集中的節點：
   + activerehashing
   + databases

    如需詳細資訊，請參閱[重新啟動節點](nodes.rebooting.md)。
**Valkey 或 Redis OSS （啟用叢集模式） 參數變更**  
如果您在 Valkey 或 Redis OSS （啟用叢集模式） 叢集上變更下列參數，請遵循後續步驟。  
activerehashing
databases
使用 Redis OSS，您可以重新建立叢集的手動備份。請參閱 [取得手動備份](backups-manual.md)。
刪除叢集。請參閱[刪除叢集](Clusters.html#Delete)。
您可以使用更改的參數群組和備份來植入新的叢集，以還原叢集。請參閱 [從備份還原到新的快取](backups-restoring.md)。
對其他參數進行變更不需要這樣做。



## 修改參數群組 (AWS CLI)
<a name="ParameterGroups.Modifying.CLI"></a>

若要使用 變更參數的值 AWS CLI，請使用命令 `modify-cache-parameter-group`。

**Example**  
使用 Memcached，若要尋找您要變更之參數的名稱和允許值，請參閱 [Memcached 專用參數](ParameterGroups.Engine.md#ParameterGroups.Memcached)  
下列範本程式碼會為 `myMem14` 參數群組上的兩個參數 (*chunk\$1size* 和 *chunk\$1size\$1growth\$1fact*) 設定值。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache modify-cache-parameter-group \
    --cache-parameter-group-name myMem14 \
    --parameter-name-values \
        ParameterName=chunk_size,ParameterValue=96 \
        ParameterName=chunk_size_growth_fact,ParameterValue=1.5
```
針對 Windows：  

```
aws elasticache modify-cache-parameter-group ^
    --cache-parameter-group-name myMem14 ^
    --parameter-name-values ^
        ParameterName=chunk_size,ParameterValue=96 ^
        ParameterName=chunk_size_growth_fact,ParameterValue=1.5
```
此命令的輸出看起來會與以下內容相似。  

```
{
    "CacheParameterGroupName": "myMem14"
}
```

**Example**  
使用 Valkey 和 Redis OSS，若要尋找您要變更之參數的名稱和允許值，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)  
下列範本程式碼會為 `myredis32-on-30` 參數群組上的兩個參數 (*reserved-memory-percent* 和 *cluster-enabled*) 設定值。我們將 *reserved-memory-percent* 設定為 `30`(30%) *並啟用叢集*，`yes`以便參數群組可與 Valkey 或 Redis OSS （啟用叢集模式） 叢集 （複寫群組） 搭配使用。  
若為 Linux、macOS 或 Unix：  

```
aws elasticache modify-cache-parameter-group \
    --cache-parameter-group-name myredis32-on-30 \
    --parameter-name-values \
        ParameterName=reserved-memory-percent,ParameterValue=30 \
        ParameterName=cluster-enabled,ParameterValue=yes
```
針對 Windows：  

```
aws elasticache modify-cache-parameter-group ^
    --cache-parameter-group-name myredis32-on-30 ^
    --parameter-name-values ^
        ParameterName=reserved-memory-percent,ParameterValue=30 ^
        ParameterName=cluster-enabled,ParameterValue=yes
```
此命令的輸出看起來會與以下內容相似。  

```
{
    "CacheParameterGroupName": "my-redis32-on-30"
}
```

如需詳細資訊，請參閱[https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-cache-parameter-group.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-cache-parameter-group.html)。

若要尋找您變更的參數名稱，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)。

 如果您有 Valkey 或 Redis OSS （停用叢集模式） 叢集，並變更下列參數，則必須重新啟動叢集中的節點：
+ activerehashing
+ databases

 如需詳細資訊，請參閱[重新啟動節點](nodes.rebooting.md)。

**Valkey 或 Redis OSS （啟用叢集模式） 參數變更**  
如果您在 Valkey 或 Redis OSS （啟用叢集模式） 叢集上變更下列參數，請遵循後續步驟。  
activerehashing
databases
建立叢集的手動備份。請參閱 [取得手動備份](backups-manual.md)。
刪除叢集。請參閱[刪除叢集](Clusters.html#Delete)。
您可以使用更改的參數群組和備份來植入新的叢集，以還原叢集。請參閱 [從備份還原到新的快取](backups-restoring.md)。
對其他參數進行變更不需要這樣做。

## 修改參數群組 (ElastiCache API)
<a name="ParameterGroups.Modifying.API"></a>

若要使用 ElastiCache API 變更參數群組的參數值，請使用 `ModifyCacheParameterGroup` 動作。

**Example**  
使用 Memcached，若要尋找您要變更之參數的名稱和允許值，請參閱 [Memcached 專用參數](ParameterGroups.Engine.md#ParameterGroups.Memcached)  
下列範本程式碼會為 `myMem14` 參數群組上的兩個參數 (*chunk\$1size* 和 *chunk\$1size\$1growth\$1fact*) 設定值。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=ModifyCacheParameterGroup
   &CacheParameterGroupName=myMem14
   &ParameterNameValues.member.1.ParameterName=chunk_size
   &ParameterNameValues.member.1.ParameterValue=96
   &ParameterNameValues.member.2.ParameterName=chunk_size_growth_fact
   &ParameterNameValues.member.2.ParameterValue=1.5
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```

**Example**  
使用 Valkey 和 Redis OSS，若要尋找您要變更之參數的名稱和允許值，請參閱 [Valkey 和 Redis OSS 參數](ParameterGroups.Engine.md#ParameterGroups.Redis)  
下列範本程式碼會為 `myredis32-on-30` 參數群組上的兩個參數 (*reserved-memory-percent* 和 *cluster-enabled*) 設定值。我們將 *reserved-memory-percent* 設定為 `30`(30%) *並啟用叢集*，`yes`以便參數群組可與 Valkey 或 Redis OSS （啟用叢集模式） 叢集 （複寫群組） 搭配使用。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=ModifyCacheParameterGroup
   &CacheParameterGroupName=myredis32-on-30
   &ParameterNameValues.member.1.ParameterName=reserved-memory-percent
   &ParameterNameValues.member.1.ParameterValue=30
   &ParameterNameValues.member.2.ParameterName=cluster-enabled
   &ParameterNameValues.member.2.ParameterValue=yes
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```

如需詳細資訊，請參閱[https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyCacheParameterGroup.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyCacheParameterGroup.html)。

如果您有 Valkey 或 Redis OSS （停用叢集模式） 叢集，並變更下列參數，則必須重新啟動叢集中的節點：
+ activerehashing
+ databases

 如需詳細資訊，請參閱[重新啟動節點](nodes.rebooting.md)。

**Valkey 或 Redis OSS （啟用叢集模式） 參數變更**  
如果您在 Valkey 或 Redis OSS （啟用叢集模式） 叢集上變更下列參數，請遵循後續步驟。  
activerehashing
databases
建立叢集的手動備份。請參閱 [取得手動備份](backups-manual.md)。
刪除叢集。請參閱「[在 ElastiCache 中刪除叢集](Clusters.Delete.md)」。
您可以使用更改的參數群組和備份來植入新的叢集，以還原叢集。請參閱 [從備份還原到新的快取](backups-restoring.md)。
對其他參數進行變更不需要這樣做。

# 刪除 ElastiCache 參數群組
<a name="ParameterGroups.Deleting"></a>

您可以使用 ElastiCache 主控台 AWS CLI、 或 ElastiCache API 刪除自訂參數群組。

若參數群組已和任何叢集相關聯，您便無法刪除參數群組。您也無法刪除任何預設參數群組。

## 刪除參數群組 (主控台)
<a name="ParameterGroups.Deleting.CON"></a>

下列程序說明如何使用 ElastiCache 主控台刪除參數群組。

**使用 ElastiCache 主控台刪除參數群組**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 若要查看所有可用參數群組的清單，請從左側的導覽窗格中，選擇 **Parameter Groups (參數群組)**。

1. 透過選擇參數群組名稱左側的方塊，選擇您希望刪除的參數群組。

   **Delete (刪除)** 按鈕即變成作用中。

1. 選擇 **刪除**。

   **Delete Parameter Group (刪除參數群組)** 確認畫面隨即出現。

1. 若要刪除參數群組，請在 **Delete Parameter Groups (刪除參數群組)** 確認畫面上，選擇 **Delete (刪除)**。

   若要保留參數群組，請選擇 **Cancel (取消)**。

## 刪除參數群組 (AWS CLI)
<a name="ParameterGroups.Deleting.CLI"></a>

若要使用 刪除參數群組 AWS CLI，請使用命令 `delete-cache-parameter-group`。針對要刪除的參數群組，以 `--cache-parameter-group-name` 指定的參數群組不能有任何與其相關聯的叢集，也不能是預設參數群組。

以下範本程式碼會刪除 *myMem14* 參數群組。

**Example**  
若為 Linux、macOS 或 Unix：  

```
aws elasticache delete-cache-parameter-group \
    --cache-parameter-group-name myRed28
```
針對 Windows：  

```
aws elasticache delete-cache-parameter-group ^
    --cache-parameter-group-name myRed28
```

如需詳細資訊，請參閱[https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-cache-parameter-group.html](https://docs.aws.amazon.com/cli/latest/reference/elasticache/delete-cache-parameter-group.html)。

## 刪除參數群組 (ElastiCache API)
<a name="ParameterGroups.Deleting.API"></a>

若要使用 ElastiCache API 刪除參數群組，請使用 `DeleteCacheParameterGroup` 動作。針對要刪除的參數群組，以 `CacheParameterGroupName` 指定的參數群組不能有任何與其相關聯的叢集，也不能是預設參數群組。

**Example**  
使用 Memcached 時，下列範例程式碼會刪除 *myMem14* 參數群組。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DeleteCacheParameterGroup
   &CacheParameterGroupName=myMem14
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```

**Example**  
以下範本程式碼會刪除 *myRed28* 參數群組。  

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=DeleteCacheParameterGroup
   &CacheParameterGroupName=myRed28
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Timestamp=20150202T192317Z
   &Version=2015-02-02
   &X-Amz-Credential=<credential>
```

如需詳細資訊，請參閱[https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DeleteCacheParameterGroup.html](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DeleteCacheParameterGroup.html)。

# 引擎特定參數
<a name="ParameterGroups.Engine"></a>

**Valkey 和 Redis OSS**

大多數 Valkey 8 參數都與 Redis OSS 7.1 參數相容。Valkey 7.2 參數與 Redis OSS 7 參數相同。

如果您未指定 Valkey 或 Redis OSS 叢集的參數群組，則會使用適合您引擎版本的預設參數群組。您無法變更預設參數群組中任何參數的值。但是，只要可條件式修改參數的值在兩個參數群組中都是相同的，您便可以建立自訂參數群組並隨時將其指派給您的叢集。如需詳細資訊，請參閱[建立 ElastiCache 參數群組](ParameterGroups.Creating.md)。

**Topics**
+ [Valkey 和 Redis OSS 參數](#ParameterGroups.Redis)
+ [Memcached 專用參數](#ParameterGroups.Memcached)

## Valkey 和 Redis OSS 參數
<a name="ParameterGroups.Redis"></a>

**Topics**
+ [Valkey 8.2 參數變更](#ParameterGroups.Valkey.8.2)
+ [Valkey 8.1 參數變更](#ParameterGroups.Valkey.8.1)
+ [Valkey 8.0 參數變更](#ParameterGroups.Valkey.8)
+ [Valkey 7.2 和 Redis OSS 7 參數變更](#ParameterGroups.Redis.7)
+ [Redis OSS 6.x 參數變更](#ParameterGroups.Redis.6-x)
+ [Redis OSS 5.0.3 參數變更](#ParameterGroups.Redis.5-0-3)
+ [Redis OSS 5.0.0 參數變更](#ParameterGroups.Redis.5.0)
+ [Redis OSS 4.0.10 參數變更](#ParameterGroups.Redis.4-0-10)
+ [Redis OSS 3.2.10 參數變更](#ParameterGroups.Redis.3-2-10)
+ [Redis OSS 3.2.6 參數變更](#ParameterGroups.Redis.3-2-6)
+ [Redis OSS 3.2.4 參數變更](#ParameterGroups.Redis.3-2-4)
+ [Redis OSS 2.8.24 （增強版） 新增參數](#ParameterGroups.Redis.2-8-24)
+ [Redis OSS 2.8.23 （增強版） 新增參數](#ParameterGroups.Redis.2-8-23)
+ [Redis OSS 2.8.22 （增強版） 新增參數](#ParameterGroups.Redis.2-8-22)
+ [Redis OSS 2.8.21 新增參數](#ParameterGroups.Redis.2-8-21)
+ [Redis OSS 2.8.19 新增參數](#ParameterGroups.Redis.2-8-19)
+ [Redis OSS 2.8.6 新增參數](#ParameterGroups.Redis.2-8-6)
+ [Redis OSS 2.6.13 參數](#ParameterGroups.Redis.2-6-13)
+ [Redis OSS 節點類型特定參數](#ParameterGroups.Redis.NodeSpecific)

### Valkey 8.2 參數變更
<a name="ParameterGroups.Valkey.8.2"></a>

**參數群組系列：**valkey8

**注意**  
Valkey 8.2 參數變更不適用於 Valkey 8.1
Valkey 8.0 及更高版本參數群組與 Redis OSS 7.2.4 不相容。
在 Valkey 8.2 中，下列命令不適用於無伺服器快取：`commandlog`、`commandlog get`、`commandlog len`、 `commandlog help`和 `commandlog reset.` 


**Valkey 8.2 中的新參數群組**  

| Name | 詳細資訊 | Description | 
| --- | --- | --- | 
| search-fanout-target-mode （在 8.2 中新增） | 預設：用戶端 類型：字串 可修改：是 變更生效：立即 |   search-fanout-target-mode 組態參數可控制搜尋查詢在 Valkey 叢集環境中跨節點分佈的方式。此設定接受兩個值：「輸送量」，其透過隨機在所有叢集節點間分配搜尋查詢來最佳化最大輸送量，無論用戶端類型或 READONLY 狀態為何，以及「用戶端」，其透過僅將非 REDONLY 用戶端路由至主要節點、僅將複本連線上的 READONLY 用戶端路由至複本節點，以及在所有節點間隨機轉接主要連線上的 READONLY 用戶端。 預設行為是「用戶端」模式，表示系統會遵守用戶端連線類型和 READONLY 狀態，以進行查詢路由決策。將輸送量模式用於需要最大叢集資源使用率的大量搜尋工作負載，以及您想要維持讀取/寫入分離和遵守應用程式層級 READONLY 連線模式的用戶端模式。 | 
| search-default-timeout-ms |  預設：50000 允許的值：1 到 60000 類型：整數 可修改：是 變更生效：立即 | 預設的 Valkey 搜尋查詢逾時 （以毫秒為單位）。 | 
| search-enable-partial-results | 預設：是 允許的值：是、否 類型：布林值 可修改：是 變更生效：立即 | 設定 Valkey 搜尋的查詢失敗行為。啟用時，如果一個或多個碎片發生逾時，搜尋查詢將傳回部分結果。停用時，任何碎片逾時都會導致整個搜尋查詢失敗並傳回錯誤。 | 

### Valkey 8.1 參數變更
<a name="ParameterGroups.Valkey.8.1"></a>

**參數群組系列：**valkey8

**注意**  
Valkey 8.1 參數變更不適用於 Valkey 8.0
Valkey 8.0 及更高版本參數群組與 Redis OSS 7.2.4 不相容。
在 Valkey 8.1 中，下列命令不適用於無伺服器快取：`commandlog`、`commandlog get`、`commandlog help`、 `commandlog len`和 `commandlog reset.` 


**Valkey 8.1 中的新參數群組**  

| Name | 詳細資訊 | Description | 
| --- | --- | --- | 
|  commandlog-large-request-max-len （在 8.1 中新增）  |  預設：1048576 類型：整數 可修改：是 變更生效：立即  |  要由 Valkey 命令日誌功能記錄之請求的大小上限，以位元組為單位。  | 
|  commandlog-large-request-max-len （在 8.1 中新增）  |  預設：128 允許的值：0-1024 類型：整數 可修改：是 變更生效：立即  |  請求的 Valkey 命令日誌長度上限。  | 
|  commandlog-reply-larger-than （在 8.1 中新增）  |  預設：1048576 類型：整數 可修改：是 變更生效：立即  |  由 Valkey 命令日誌功能記錄回應的大小上限，以位元組為單位。  | 
|  commandlog-large-reply-max-len （在 8.1 中新增）  |  預設：128 允許的值：0-1024 類型：整數 可修改：是 變更生效：立即  |  回應的 Valkey 命令日誌長度上限。  | 

### Valkey 8.0 參數變更
<a name="ParameterGroups.Valkey.8"></a>

**參數群組系列：**valkey8

**注意**  
Redis OSS 7.2.4 與 Valkey 8 及更高版本參數群組不相容。


**Valkey 8.0 中的特定參數變更**  

| Name | 詳細資訊 | Description | 
| --- | --- | --- | 
|  repl-backlog-size  |  預設：10485760 類型：整數 可修改：是 變更生效：立即  |  主要節點待處理項目緩衝區的大小 (位元組)。待處理項目會用於記錄主要節點資料的更新。當僅供讀取複本連線至主要節點時，它會嘗試執行部分同步 (psync)，其中會套用來自待處理項目的資料來跟上主要節點的進度。如果 psync 失敗，則需要完整同步。 此參數的最小值為 16384。 注意：從 Redis OSS 2.8.22 開始，此參數適用於主要叢集和僅供讀取複本。  | 
|  maxmemory-samples  |  預設：3 允許的值：1 到 64 類型：整數 可修改：是 變更生效：立即  |  針對使用時間最遠 (least-recently-used, LRU) 及存活時間 (TTL) 計算，此參數表示要檢查鍵的樣本大小。根據預設，Redis OSS 會選擇 3 個金鑰，並使用最近最少使用的金鑰。  | 


**Valkey 8.0 中的新參數群組**  

| Name | 詳細資訊 | Description | 
| --- | --- | --- | 
|  extended-redis-compatibility  |  允許的值：是、否 預設：是 類型：布林值 可修改：是 變更生效：立即生效  |  延伸 Redis OSS 相容性模式可讓 Valkey 假名成為 Redis OSS 7.2。只有在工具或用戶端發生問題時，才啟用此選項。 面向客戶的影響： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html)  | 


**已移除 Valkey 8.0 中的參數群組**  

| Name | 詳細資訊 | Description | 
| --- | --- | --- | 
|  lazyfree-lazy-eviction  |  允許的值：是、否 預設：否 類型：布林值 可修改：是 變更生效：立即生效  |  在移出時執行非同步刪除。  | 
|  lazyfree-lazy-expire  |  允許的值：是、否 預設：否 類型：布林值 可修改：是 變更生效：立即生效  |  在過期鍵上執行非同步刪除。  | 
|  lazyfree-lazy-server-del  |  允許的值：是、否 預設：否 類型：布林值 可修改：是 變更生效：立即生效  |  針對更新數值的命令執行非同步刪除。  | 
|  lazyfree-lazy-user-del  |  預設：否 類型：字串 可修改：是 變更生效：直接套用至叢集中所有節點。  |   當值設定為是時，DEL 命令的作用與 UNLINK 相同。  | 
|  replica-lazy-flush  |  預設：是 類型：布林值 可修改：否 先前的名稱：slave-lazy-flush  |  在複本同步期間執行非同步 flushDB。  | 

### Valkey 7.2 和 Redis OSS 7 參數變更
<a name="ParameterGroups.Redis.7"></a>

**參數群組系列：**valkey7

Valkey 7.2 預設參數群組如下所示：
+ `default.valkey7` – 針對 Valkey （停用叢集模式） 叢集和複寫群組，使用此參數群組或衍生的參數群組。
+ `default.valkey7.cluster.on` – 針對 Valkey （啟用叢集模式） 叢集和複寫群組，使用此參數群組或衍生的參數群組。

**參數群組系列：**redis7

Redis OSS 7 預設參數群組如下所示：
+ `default.redis7` – 針對 Redis OSS （停用叢集模式） 叢集和複寫群組，使用此參數群組或衍生的參數群組。
+ `default.redis7.cluster.on` – 針對 Redis OSS （啟用叢集模式） 叢集和複寫群組，使用此參數群組或衍生的參數群組。

**特定參數變更**

在 Redis OSS 7 中新增的參數如下所示。Valkey 7.2 也支援這些參數。


|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| cluster-allow-pubsubshard-when-down |  允許的值：`yes`、`no` 預設：`yes` 類型：字串 可修改：是 變更生效：直接套用至叢集中所有節點。 | 當預設值為 yes 時，只要叢集認定自身擁有槽，就會允許節點在叢集處於停用狀態時提供 pubsub 碎片流量。  | 
| cluster-preferred-endpoint-type |  允許的值：`ip`、`tls-dynamic` 預設：`tls-dynamic` 類型：字串 可修改：是 變更生效：直接套用至叢集中所有節點。 | 此值可控制針對 MOVED/ASHING 要求傳回的端點，以及 `CLUSTER SLOTS` 和 `CLUSTER SHARDS` 的端點欄位。當該值設定為 ip 時，節點會公告其 IP 地址。當值設定為 tls-dynamic 時，節點會在啟用傳輸中加密時公告主機名稱或 IP 地址。  | 
| latency-tracking |  允許的值：`yes`、`no` 預設：`no` 類型：字串 可修改：是 變更生效：直接套用至叢集中所有節點。 | 設定為 yes 時，會追蹤每個命令的延遲情況，並可透過 `INFO` 延遲統計資料命令匯出百分位數分佈，同時透過 `LATENCY` 命令匯出累積延遲分佈 (長條圖)。  | 
| hash-max-listpack-entries |  允許的值：`0+` 預設：`512` 類型：整數 可修改：是 變更生效：直接套用至叢集中所有節點。 | 要壓縮資料集的雜湊項目數目上限。  | 
| hash-max-listpack-value |  允許的值：`0+` 預設：`64` 類型：整數 可修改：是 變更生效：直接套用至叢集中所有節點。 | 最大雜湊項目的臨界值，以便壓縮資料集。  | 
| zset-max-listpack-entries |  允許的值：`0+` 預設：`128` 類型：整數 可修改：是 變更生效：直接套用至叢集中所有節點。 | 要壓縮資料集的雜湊有序集項目數目上限。  | 
| zset-max-listpack-value |  允許的值：`0+` 預設：`64` 類型：整數 可修改：是 變更生效：直接套用至叢集中所有節點。 | 要壓縮資料集的雜湊有序集項目數目上限。  | 

Redis OSS 7 中變更的參數如下所示。


|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| activerehashing |  可修改：`no`。在 Redis OSS 7 中，預設會隱藏並啟用此參數。為了將其停用，您需要建立一個[支援案例](https://console.aws.amazon.com/support/home)。  | 「可修改」先前為「是」。  | 

在 Redis OSS 7 中移除的參數如下所示。


|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| hash-max-ziplist-entries |  允許的值：`0+` 預設：`512` 類型：整數 可修改：是 變更生效：直接套用至叢集中所有節點。 | 使用 `listpack` 而非 `ziplist` 來表示小雜湊編碼  | 
| hash-max-ziplist-value |  允許的值：`0+` 預設：`64` 類型：整數 可修改：是 變更生效：直接套用至叢集中所有節點。 | 使用 `listpack` 而非 `ziplist` 來表示小雜湊編碼  | 
| zset-max-ziplist-entries |  允許的值：`0+` 預設：`128` 類型：整數 可修改：是 變更生效：直接套用至叢集中所有節點。 | 使用 `listpack` 而非 `ziplist` 來表示小雜湊編碼。  | 
| zset-max-ziplist-value |  允許的值：`0+` 預設：`64` 類型：整數 可修改：是 變更生效：直接套用至叢集中所有節點。 | 使用 `listpack` 而非 `ziplist` 來表示小雜湊編碼。  | 
| list-max-ziplist-size |  允許的值： 預設：`-2` 類型：整數 可修改：是 變更生效：直接套用至叢集中所有節點。 | 每個內部清單節點允許的項目數量。  | 

### Redis OSS 6.x 參數變更
<a name="ParameterGroups.Redis.6-x"></a>

**參數群組系列：**redis6.x

Redis OSS 6.x 預設參數群組如下所示：
+ `default.redis6.x` – 將此參數群組或從中衍生的群組用於 Valkey 或 Redis OSS （停用叢集模式） 叢集和複寫群組。
+ `default.redis6.x.cluster.on` – 將此參數群組或從中衍生的群組用於 Valkey 或 Redis OSS （啟用叢集模式） 叢集和複寫群組。

**注意**  
 在 Redis OSS 引擎 6.2 版中，當引進 r6gd 節點系列以與 搭配使用時[ElastiCache 中的資料分層](data-tiering.md)，r6gd 節點類型僅支援 *noeviction*、*volatile-lru* 和 *allkeys-lru* max-memory 政策。

如需詳細資訊，請參閱[適用於 Redis OSS 的 ElastiCache 6.2 版 （增強版）](engine-versions.md#redis-version-6.2)及[適用於 Redis OSS 的 ElastiCache 6.0 版 （增強版）](engine-versions.md#redis-version-6.0)。

在 Redis OSS 6.x 中新增的參數如下所示。


|  詳細資訊 |  Description  | 
| --- | --- | 
| acl-pubsub-default (added in 6.2) |  允許的值：`resetchannels`、`allchannels` 預設：`allchannels` 類型：字串 可修改：是 變更生效：與叢集相關聯的現有 Redis OSS 使用者將繼續擁有現有的許可。更新使用者或重新啟動叢集以更新現有的 Redis OSS 使用者。 | 部署到此叢集的 ACL 使用者的預設發佈訂閱頻道許可。  | 
| cluster-allow-reads-when-down (added in 6.0) |  預設：否 類型：字串 可修改：是 變更生效：直接套用至叢集中所有節點。 | 設定為是時，即使節點無法達到基本人數，Redis OSS （啟用叢集模式） 複寫群組仍會繼續處理讀取命令。 當設定為預設值 no 時，複寫群組會拒絕所有命令。如果您使用的叢集少於三個節點群組，或者您的應用程式可以安全處理過時的讀取作業，建議您將此值設定為 yes。  | 
| tracking-table-max-keys (added in 6.0) |  預設值：1,000,000 類型：數字 可修改：是 變更生效：直接套用至叢集中所有節點。 | 為了協助用戶端快取，Redis OSS 支援追蹤哪些用戶端已存取哪些金鑰。 追蹤的索引鍵有所修改時，會傳送失效訊息給所有用戶端，通知他們快取的值不再有效。此值可讓您指定此資料表的上限。超過此參數值之後，會隨機傳送失效訊息給用戶端。系統應調校此值以限制記憶體使用量，同時仍會追蹤足夠的索引鍵。索引鍵也會在記憶體不足的情況下失效。  | 
| acllog-max-len (added in 6.0) |  預設：128 類型：數字 可修改：是 變更生效：直接套用至叢集中所有節點。 | 此值對應至 ACL 日誌中的項目數上限。  | 
| active-expire-effort (added in 6.0) |  預設：1 類型：數字 可修改：是 變更生效：直接套用至叢集中所有節點。 | Redis OSS 會刪除超過兩個機制存活時間的金鑰。一種機制是系統會存取一個索引鍵，並發現其過期。另一種機制則是定期任務對索引鍵進行取樣，而導致超過存留時間的索引鍵過期。此參數定義 Redis OSS 用來使定期任務中的項目過期的工作量。 預設值 1 會嘗試避免有超過 10% 的過期索引鍵仍存在於記憶體中。也會嘗試避免佔用總記憶體的 25% 以上以及為系統增加延遲。您最多可以將此值增加 10，以增加使索引鍵過期花費的工作量。缺點是 CPU 會較高，且延遲也可能更高。除非您發現記憶體使用量很高，且可以容忍 CPU 使用率的增加，否則建議您使用值 1。  | 
| lazyfree-lazy-user-del (added in 6.0) |  預設：否 類型：字串 可修改：是 變更生效：直接套用至叢集中所有節點。 | 將值設定為 yes 時，`DEL` 命令的作用與 `UNLINK` 相同。  | 

在 Redis OSS 6.x 中移除的參數如下所示。


|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| lua-replicate-commands |  允許值：是/否 預設：是 類型：布林值 可修改：是 變更生效：立即生效 | 是否一律在 Lua 指令碼中啟用 Lua 效果複寫  | 

### Redis OSS 5.0.3 參數變更
<a name="ParameterGroups.Redis.5-0-3"></a>

**參數群組系列：**redis5.0

Redis OSS 5.0 預設參數群組
+ `default.redis5.0` – 針對 Valkey 或 Redis OSS （停用叢集模式） 叢集和複寫群組，使用此參數群組或衍生的參數群組。
+ `default.redis5.0.cluster.on` – 將此參數群組或衍生的參數群組用於 Valkey 或 Redis OSS （啟用叢集模式） 叢集和複寫群組。


**在 Redis OSS 5.0.3 中新增的參數**  

|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| rename-commands |  預設：none 類型：字串 可修改：是 變更生效：直接套用至叢集中所有節點。 | 重新命名 Redis OSS 命令的空間分隔清單。下列限制命令清單可供重新命名使用： `APPEND AUTH BITCOUNT BITFIELD BITOP BITPOS BLPOP BRPOP BRPOPLPUSH BZPOPMIN BZPOPMAX CLIENT CLUSTER COMMAND DBSIZE DECR DECRBY DEL DISCARD DUMP ECHO EVAL EVALSHA EXEC EXISTS EXPIRE EXPIREAT FLUSHALL FLUSHDB GEOADD GEOHASH GEOPOS GEODIST GEORADIUS GEORADIUSBYMEMBER GET GETBIT GETRANGE GETSET HDEL HEXISTS HGET HGETALL HINCRBY HINCRBYFLOAT HKEYS HLEN HMGET HMSET HSET HSETNX HSTRLEN HVALS INCR INCRBY INCRBYFLOAT INFO KEYS LASTSAVE LINDEX LINSERT LLEN LPOP LPUSH LPUSHX LRANGE LREM LSET LTRIM MEMORY MGET MONITOR MOVE MSET MSETNX MULTI OBJECT PERSIST PEXPIRE PEXPIREAT PFADD PFCOUNT PFMERGE PING PSETEX PSUBSCRIBE PUBSUB PTTL PUBLISH PUNSUBSCRIBE RANDOMKEY READONLY READWRITE RENAME RENAMENX RESTORE ROLE RPOP RPOPLPUSH RPUSH RPUSHX SADD SCARD SCRIPT SDIFF SDIFFSTORE SELECT SET SETBIT SETEX SETNX SETRANGE SINTER SINTERSTORE SISMEMBER SLOWLOG SMEMBERS SMOVE SORT SPOP SRANDMEMBER SREM STRLEN SUBSCRIBE SUNION SUNIONSTORE SWAPDB TIME TOUCH TTL TYPE UNSUBSCRIBE UNLINK UNWATCH WAIT WATCH ZADD ZCARD ZCOUNT ZINCRBY ZINTERSTORE ZLEXCOUNT ZPOPMAX ZPOPMIN ZRANGE ZRANGEBYLEX ZREVRANGEBYLEX ZRANGEBYSCORE ZRANK ZREM ZREMRANGEBYLEX ZREMRANGEBYRANK ZREMRANGEBYSCORE ZREVRANGE ZREVRANGEBYSCORE ZREVRANK ZSCORE ZUNIONSTORE SCAN SSCAN HSCAN ZSCAN XINFO XADD XTRIM XDEL XRANGE XREVRANGE XLEN XREAD XGROUP XREADGROUP XACK XCLAIM XPENDING GEORADIUS_RO GEORADIUSBYMEMBER_RO LOLWUT XSETID SUBSTR`  | 

如需詳細資訊，請參閱[適用於 Redis OSS 的 ElastiCache 5.0.6 版 （增強版）](engine-versions.md#redis-version-5-0.6)。

### Redis OSS 5.0.0 參數變更
<a name="ParameterGroups.Redis.5.0"></a>

**參數群組系列：**redis5.0

Redis OSS 5.0 預設參數群組
+ `default.redis5.0` – 針對 Valkey 或 Redis OSS （停用叢集模式） 叢集和複寫群組，使用此參數群組或衍生的參數群組。
+ `default.redis5.0.cluster.on` – 將此參數群組或衍生的參數群組用於 Valkey 或 Redis OSS （啟用叢集模式） 叢集和複寫群組。


**在 Redis OSS 5.0 中新增的參數**  

|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| stream-node-max-bytes |  允許的值：0\$1 預設：4096 類型：整數 可修改：是 變更生效：立即生效 | 串流資料結構是節點基數樹狀結構，它會在內部編碼多個項目。使用這個組態可指定基數樹狀結構中單一節點的最大大小 (以位元組為單位)。如果設為 0，則節點的大小沒有限制。 | 
| stream-node-max-entries |  允許的值：0\$1 預設：100 類型：整數 可修改：是 變更生效：立即生效 | 串流資料結構是節點基數樹狀結構，它會在內部編碼多個項目。使用此組態來指定在附加新串流項目時，切換至新節點之前，單一節點可包含的最大項目數。如果設為 0，則樹狀結構節點中的項目數沒有限制  | 
| active-defrag-max-scan-fields |  允許值：1 到 1000000 預設：1000 類型：整數 可修改：是 變更生效：立即生效 | 將從主字典掃描處理的 set/hash/zset/list 欄位的最大數量  | 
| lua-replicate-commands |  允許值：是/否 預設：是 類型：布林值 可修改：是 變更生效：立即生效 | 是否一律在 Lua 指令碼中啟用 Lua 效果複寫  | 
| replica-ignore-maxmemory |  預設：是 類型：布林值 可修改：否  | 不從主要複本獨立移出項目，決定複本是否要忽略 maxmemory 設定  | 

Redis OSS 已重新命名引擎 5.0 版中的多個參數，以回應社群意見回饋。如需詳細資訊，請參閱 [Redis OSS 5 中的最新消息？](https://aws.amazon.com/redis/Whats_New_Redis5/)。下表列出新名稱以及它們與舊版的對應方式。


**在 Redis OSS 5.0 中重新命名的參數**  

|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| replica-lazy-flush |  預設：是 類型：布林值 可修改：否 先前的名稱：slave-lazy-flush  | 在複本同步期間執行非同步 flushDB。 | 
| client-output-buffer-limit-replica-hard-limit | 預設：如需數值，請參閱 [Redis OSS 節點類型特定參數](#ParameterGroups.Redis.NodeSpecific) 類型：整數 可修改：否 先前的名稱：client-output-buffer-limit-slave-hard-limit | 對於 Redis OSS 僅供讀取複本：如果用戶端的輸出緩衝區達到指定的位元組數，用戶端將會中斷連線。 | 
| client-output-buffer-limit-replica-soft-limit | 預設：如需數值，請參閱 [Redis OSS 節點類型特定參數](#ParameterGroups.Redis.NodeSpecific) 類型：整數 可修改：否 先前的名稱：client-output-buffer-limit-slave-soft-limit | 對於 Redis OSS 僅供讀取複本：如果用戶端的輸出緩衝區達到指定的位元組數，用戶端將會中斷連線，但前提是此條件仍適用於 client-output-buffer-limit-replica-soft-seconds。 | 
| client-output-buffer-limit-replica-soft-seconds | 預設：60 類型：整數 可修改：否 先前的名稱：client-output-buffer-limit-slave-soft-seconds  | 對於 Redis OSS 僅供讀取複本：如果用戶端的輸出緩衝區停留在client-output-buffer-limit-replica-soft-limit位元組超過此秒數，用戶端將會中斷連線。 | 
| replica-allow-chaining | 預設：否 類型：字串 可修改：否 先前的名稱：slave-allow-chaining | 決定 Redis OSS 中的僅供讀取複本是否可以擁有自己的僅供讀取複本。 | 
| min-replicas-to-write | 預設：0 類型：整數 可修改：是 先前的名稱：min-slaves-to-write 變更生效：立即 | 為了讓主要節點接受來自用戶端的寫入，所需要的最低可用僅供讀取複本數量。若可用複本數低於此數字，屆時主要節點便會不再接受寫入請求。 若此參數或 min-replicas-max-lag 為 0，則即使沒有任何可用複本，主要節點也一律會接受寫入請求。 | 
| min-replicas-max-lag  | 預設：10 類型：整數 可修改：是 先前的名稱：min-slaves-max-lag 變更生效：立即 | 秒數，在此期間主要節點必須從僅供讀取複本接收 ping 請求。若經過此秒數而主要節點仍未接收到 ping，便會將複本視為無法使用。若可用複本數低於 min-replicas-to-write，屆時主要節點便會停止接受寫入。 若此參數或 min-replicas-to-write 為 0，則即使沒有任何可用複本，主要節點也一律會接受寫入請求。 | 
| close-on-replica-write  | 預設：是 類型：布林值 可修改：是 先前的名稱：close-on-slave-write 變更生效：立即 | 若啟用，則會中斷嘗試寫入僅供讀取複本的用戶端連線。 | 


**在 Redis OSS 5.0 中移除的參數**  

|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| repl-timeout |  預設：60 可修改：否  | 此參數在此版本中無法使用。 | 

### Redis OSS 4.0.10 參數變更
<a name="ParameterGroups.Redis.4-0-10"></a>

**參數群組系列：**redis4.0

Redis OSS 4.0.x 預設參數群組
+ `default.redis4.0` – 針對 Valkey 或 Redis OSS （停用叢集模式） 叢集和複寫群組，使用此參數群組或衍生的參數群組。
+ `default.redis4.0.cluster.on` – 針對 Valkey 或 Redis OSS （啟用叢集模式） 叢集和複寫群組，使用此參數群組或衍生的參數群組。


**在 Redis OSS 4.0.10 中變更的參數**  

|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| maxmemory-policy |  允許值：`allkeys-lru`、`volatile-lru`、**allkeys-lfu**、**volatile-lfu**、`allkeys-random`、`volatile-random`、`volatile-ttl` 及 `noeviction` 預設：volatile-lru 類型：字串 可修改：是 變更生效：立即生效 | 2.6.13 版中新增了 maxmemory-policy。在版本 4.0.10 中，新增了兩個新的允許值：allkeys-lfu 會使用近似的 LFU 移出任何鍵，而 volatile-lfu 會在具有過期集的鍵中使用近似的 LFU 來移出。在 6.2 版本中，當導入 r6gd 節點系列以與資料分層搭配使用時，r6gd 節點類型僅支援 noeviction、volatile-lru 和 allkeys-lru 最大記憶體政策。 | 


**Redis OSS 4.0.10 中新增的參數**  

|  Name  |  詳細資訊 |  Description  | 
| --- |--- |--- |
| **非同步刪除參數** | 
| --- |
| lazyfree-lazy-eviction |  允許值：是/否 預設：否 類型：布林值 可修改：是 變更生效：立即生效 | Performs an asynchronous delete on evictions. | 
| lazyfree-lazy-expire |  允許值：是/否 預設：否 類型：布林值 可修改：是 變更生效：立即生效 | Performs an asynchronous delete on expired keys. | 
| lazyfree-lazy-server-del |  允許值：是/否 預設：否 類型：布林值 可修改：是 變更生效：立即生效 | Performs an asynchronous delete for commands which update values. | 
| slave-lazy-flush |  允許值：N/A 預設：否 類型：布林值 可修改：否 Changes take place: N/A | Performs an asynchronous flushDB during slave sync. | 
| **LFU 參數** | 
| --- |
| lfu-log-factor |  允許值：任何 > 0 的整數 預設：10 類型：整數 可修改：是 變更生效：立即生效 | Set the log factor, which determines the number of key hits to saturate the key counter. | 
| lfu-decay-time |  允許值：任何整數 預設：1 類型：整數 可修改：是 變更生效：立即生效 | The amount of time in minutes to decrement the key counter. | 
| **作用中磁碟重組參數** | 
| --- |
| activedefrag |  允許值：是/否 預設：否 類型：布林值 可修改：是 變更生效：立即生效 | 啟用主動重組。 在 Valkey 和 Redis OSS 7.0 版及更高版本中，無論此設定為何，AWS可能會在操作上有需要時自動執行重組。  | 
| active-defrag-ignore-bytes |  允許值：10485760-104857600 預設：104857600 類型：整數 可修改：是 變更生效：立即生效 | Minimum amount of fragmentation waste to start active defrag. | 
| active-defrag-threshold-lower |  允許值：1 到 100 預設：10 類型：整數 可修改：是 變更生效：立即生效 | Minimum percentage of fragmentation to start active defrag. | 
| active-defrag-threshold-upper |  允許值：1 到 100 預設：100 類型：整數 可修改：是 變更生效：立即生效 | Maximum percentage of fragmentation at which we use maximum effort. | 
| active-defrag-cycle-min |  允許值：1 到 75 預設：25 類型：整數 可修改：是 變更生效：立即生效 | Minimal effort for defrag in CPU percentage. | 
| active-defrag-cycle-max |  允許值：1 到 75 預設：75 類型：整數 可修改：是 變更生效：立即生效 | Maximal effort for defrag in CPU percentage. | 
| **用戶端輸出緩衝區參數** | 
| --- |
| client-query-buffer-limit |  允許值：1048576-1073741824 預設：1073741824 類型：整數 可修改：是 變更生效：立即生效 | Max size of a single client query buffer. | 
| proto-max-bulk-len |  允許值：1048576-536870912 預設：536870912 類型：整數 可修改：是 變更生效：立即生效 | Max size of a single element request. | 

### Redis OSS 3.2.10 參數變更
<a name="ParameterGroups.Redis.3-2-10"></a>

**參數群組系列：**redis3.2

ElastiCache for Redis OSS 3.2.10 不支援其他參數。

### Redis OSS 3.2.6 參數變更
<a name="ParameterGroups.Redis.3-2-6"></a>

**參數群組系列：**redis3.2

對於 Redis OSS 3.2.6，不支援其他參數。

### Redis OSS 3.2.4 參數變更
<a name="ParameterGroups.Redis.3-2-4"></a>

**參數群組系列：**redis3.2

從 Redis OSS 3.2.4 開始，有兩個預設參數群組。
+ `default.redis3.2` – 執行 Redis OSS 3.2.4 時，如果您想要建立 Valkey 或 Redis OSS （停用叢集模式） 複寫群組，但仍使用 Redis OSS 3.2.4 的其他功能，請指定此參數群組或衍生的參數群組。
+ `default.redis3.2.cluster.on` – 當您想要建立 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組時，請指定此參數群組或從中衍生的參數群組。

**Topics**
+ [Redis OSS 3.2.4 的新參數](#ParameterGroups.Redis.3-2-4.New)
+ [Redis OSS 3.2.4 中變更的參數 （增強版）](#ParameterGroups.Redis.3-2-4.Changed)

#### Redis OSS 3.2.4 的新參數
<a name="ParameterGroups.Redis.3-2-4.New"></a>

**參數群組系列：**redis3.2

對於 Redis OSS 3.2.4，支援下列其他參數。


****  

|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| list-max-ziplist-size | 預設值：-2 類型：整數 可修改：否  | 清單會以特別的方式進行編碼以節省空間。每個內部清單節點允許的項目數量可透過固定的大小上限或元素數量上限來指定。針對固定的大小上限，請使用 -5 到 -1，表示：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html) | 
| list-compress-depth | 預設：0 類型：整數 可修改：是 變更生效：立即 | 清單也可以進行壓縮。壓縮深度是來自清單每一端的快速清單 (quicklist) 壓縮清單 (ziplist) 節點數量，這些節點會從壓縮中排除。清單的前端和尾端一律不會進行壓縮，以進行快速的推送及彈出操作。設定如下：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html) | 
| cluster-enabled |  預設：否/是 \$1 類型：字串 可修改：否 | 指出這是叢集模式 （是） 中的 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組，還是非叢集模式 （否） 中的 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組。叢集模式中的 Valkey 或 Redis OSS （啟用叢集模式） 複寫群組可以將資料分割至最多 500 個節點群組。 \$1 Redis OSS 3.2.*x* 有兩個預設參數群組。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html). | 
| cluster-require-full-coverage | 預設：否 類型：布林值 可修改：是 變更生效：立即 |  設為 時`yes`，如果叢集模式中的 Valkey 或 Redis OSS （啟用叢集模式） 節點偵測到至少有一個未覆蓋的雜湊槽 （沒有可用的節點提供服務），則會停止接受查詢。這會在叢集部分關閉時導致叢集無法使用。它會在所有位置再次受到涵蓋時重新恢復可用狀態。 但是，有時候您可能會希望一部分正常運作的叢集針對仍然涵蓋的 keyspace 部分繼續接受查詢。若要這麼做，只需將 `cluster-require-full-coverage` 選項設為 `no` 即可。 | 
| hll-sparse-max-bytes | 預設：3000 類型：整數 可修改：是 變更生效：立即 | HyperLogLog 疏鬆表示位元組限制。限制包含 16 位元組的標頭。當使用疏鬆表示的 HyperLogLog 超過此限制時，便會轉換成密集表示。 不建議使用大於 16000 的值，因為屆時密集表示可以更有效率的使用記憶體。 我們建議使用約 3000 的值，來在有效率的使用空間進行編碼的同時不會導致 PFADD 的速度降低太多 (使用疏鬆編碼時)。若 CPU 不在考量範圍內，但空間為考量的項目之一，且資料集是由許多基數介於 0 到 15000 範圍間的 HyperLogLog 組成時，則可以將此值提升到約 10000。 | 
| reserved-memory-percent | 預設：25 類型：整數 可修改：是 變更生效：立即 |  為非資料用途預留的節點記憶體百分比。根據預設，Redis OSS 資料使用量會持續增加，直到用完節點的所有記憶體為止。若發生此情況，則節點效能很可能會因過度進行記憶體分頁而降低。透過保留記憶體，您可以將一些可用的記憶體留給非 Redis OSS 用途，以協助減少分頁數量。 此參數專屬於 ElastiCache，不屬於標準 Redis OSS 分佈。 如需詳細資訊，請參閱`reserved-memory`及[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。 | 

#### Redis OSS 3.2.4 中變更的參數 （增強版）
<a name="ParameterGroups.Redis.3-2-4.Changed"></a>

**參數群組系列：**redis3.2

針對 Redis OSS 3.2.4，已變更下列參數。


****  

|  Name  |  詳細資訊 |  變更  | 
| --- | --- | --- | 
| activerehashing | 可修改：如果參數群組未與任何叢集相關聯，則為是。否則為否。 | 「可修改」先前為「否」。 | 
| databases | 可修改：如果參數群組未與任何叢集相關聯，則為是。否則為否。 | 「可修改」先前為「否」。 | 
| appendonly | 預設：關閉 可修改：否 | 如果您想要從較早的 Redis OSS 版本升級，您必須先`appendonly`關閉 。 | 
| appendfsync | 預設：關閉 可修改：否 | 如果您想要從較早的 Redis OSS 版本升級，您必須先`appendfsync`關閉 。 | 
| repl-timeout | 預設：60 可修改：否 | 現已變更為無法修改，且其預設為 60。 | 
| tcp-keepalive | 預設：300 | 先前預設為 0。 | 
| list-max-ziplist-entries |  | 參數已無法使用。 | 
| list-max-ziplist-value |  | 參數已無法使用。 | 

### Redis OSS 2.8.24 （增強版） 新增參數
<a name="ParameterGroups.Redis.2-8-24"></a>

**參數群組系列：**redis2.8

對於 Redis OSS 2.8.24，不支援其他參數。

### Redis OSS 2.8.23 （增強版） 新增參數
<a name="ParameterGroups.Redis.2-8-23"></a>

**參數群組系列：**redis2.8

對於 Redis OSS 2.8.23，支援以下額外參數。


****  

|  Name  |  詳細資訊 |  Description  | 
| --- | --- | --- | 
| close-on-slave-write  | 預設：是 類型：字串 (是/否) 可修改：是 變更生效：立即 | 若啟用，則會中斷嘗試寫入僅供讀取複本的用戶端連線。 | 

#### close-on-slave-write 的運作方式
<a name="w2aac24c16c30c49c15c39b9"></a>

Amazon ElastiCache 引進了 `close-on-slave-write` 參數，在將僅供讀取複本提升為主節點，導致主節點和僅供讀取複本節點交換角色時，可讓您進一步控制叢集回應的方式。

![\[圖片：close-on-replica-write，一切都運作正常\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCache-close-on-slave-write-01.png)


若僅供讀取複本叢集因啟用異地同步備份的複寫群組容錯移轉之外的任何原因提升為主要節點，則用戶端會繼續嘗試寫入端點 A。因為端點 A 已成為僅供讀取複本的端點，因此寫入會失敗。這是 ElastiCache 引入之前 Redis OSS 的行為，`close-on-replica-write`以及停用 時的行為`close-on-replica-write`。

![\[圖片：close-on-slave-write，寫入失敗\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCache-close-on-slave-write-02.png)


啟用 `close-on-replica-write` 時，每一次當用戶端嘗試寫入僅供讀取複本時，便會關閉用戶端對叢集的連線。您的應用程式邏輯應偵測中斷連線、檢查 DNS 表，並重新連線至主要端點 (此時已是端點 B)。

![\[圖片：close-on-slave-write，寫入新的主要叢集\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ElastiCache-close-on-slave-write-03.png)


#### 可能需停用 close-on-replica-write 的情況
<a name="w2aac24c16c30c49c15c39c11"></a>

若停用 `close-on-replica-write` 對導致寫入失敗的叢集，為什麼還要停用 `close-on-replica-write`？

如先前所提及，啟用 `close-on-replica-write` 時，每一次當用戶端嘗試寫入僅供讀取複本時，便會關閉用戶端對叢集的連線。建立與節點的新連線需要時間。因此，寫入複本請求所導致的中斷連線及重新連線也會影響透過相同連線處理的讀取請求延遲。此效果會持續存在，直到建立新連線為止。若您的應用程式特別需要進行大量讀取或是對延遲非常敏感，您可能會偏好將用戶端保持連線，以避免降低讀取效能。

### Redis OSS 2.8.22 （增強版） 新增參數
<a name="ParameterGroups.Redis.2-8-22"></a>

**參數群組系列：**redis2.8

對於 Redis OSS 2.8.22，不支援其他參數。

**重要**  
從 Redis OSS 2.8.22 版開始， `repl-backlog-size`適用於主要叢集和複本叢集。
從 Redis OSS 2.8.22 版開始，不支援 `repl-timeout` 參數。若發生變更，ElastiCache 會使用預設值 (60 秒) 覆寫，如同我們對 `appendonly` 執行的作業。

以下參數已不再受到支援。
+ *appendonly*
+ *appendfsync*
+ *repl-timeout*

### Redis OSS 2.8.21 新增參數
<a name="ParameterGroups.Redis.2-8-21"></a>

**參數群組系列：**redis2.8

對於 Redis OSS 2.8.21，不支援其他參數。

### Redis OSS 2.8.19 新增參數
<a name="ParameterGroups.Redis.2-8-19"></a>

**參數群組系列：**redis2.8

對於 Redis OSS 2.8.19，不支援其他參數。

### Redis OSS 2.8.6 新增參數
<a name="ParameterGroups.Redis.2-8-6"></a>

**參數群組系列：**redis2.8

對於 Redis OSS 2.8.6，支援下列其他參數。


****  

|  Name  |  詳細資訊  |  Description  | 
| --- | --- | --- | 
| min-slaves-max-lag  | 預設：10 類型：整數 可修改：是 變更生效：立即 | 秒數，在此期間主要節點必須從僅供讀取複本接收 ping 請求。若經過此秒數而主要節點仍未接收到 ping，便會將複本視為無法使用。若可用複本數低於 min-slaves-to-write，屆時主要節點便會停止接受寫入。 若此參數或 min-slaves-to-write 為 0，則即使沒有任何可用複本，主要節點也一律會接受寫入請求。 | 
| min-slaves-to-write | 預設：0 類型：整數 可修改：是 變更生效：立即 | 為了讓主要節點接受來自用戶端的寫入，所需要的最低可用僅供讀取複本數量。若可用複本數低於此數字，屆時主要節點便會不再接受寫入請求。 若此參數或 min-slaves-max-lag 為 0，則即使沒有任何可用複本，主要節點也一律會接受寫入請求。 | 
| notify-keyspace-events | 預設：(空字串) 類型：字串 可修改：是 變更生效：立即 | Redis OSS 可通知用戶端的金鑰空間事件類型。每個事件類型都是以單一字母表示： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html) 您可以任意組合這些事件類型。例如，*AKE* 表示 Redis OSS 可以發佈所有事件類型的通知。 請不要使用任何以上列出字元以外的字元。嘗試執行此作業會導致錯誤訊息。 根據預設，此參數會設為空字串，表示停用 keyspace 事件通知。 | 
| repl-backlog-size | 預設：1048576 類型：整數 可修改：是 變更生效：立即 | 主要節點待處理項目緩衝區的大小 (位元組)。待處理項目會用於記錄主要節點資料的更新。當僅供讀取複本連線到主要節點時，它會嘗試執行部分同步 (`psync`)，套用來自待處理項目的資料來更新至主要節點目前的情況。若 `psync` 失敗，便需要完整同步。 此參數的最小值為 16384。  從 Redis OSS 2.8.22 開始，此參數適用於主要叢集和僅供讀取複本。  | 
| repl-backlog-ttl | 預設：3600 類型：整數 可修改：是 變更生效：立即 | 主要節點保留待處理項目緩衝區的秒數。從最後一次複本節點中斷連線的時間開始，待處理項目中的資料會保持不變，直到 `repl-backlog-ttl` 過期。若複本在此期間內並未連線到主要節點，主要節點便會釋放待處理項目緩衝區。當複本最後重新連線時，便需要與主要節點執行完整同步。 若將此參數設為 0，便永遠不會釋放待處理項目緩衝區。 | 
| repl-timeout | 預設：60 類型：整數 可修改：是 變更生效：立即 | 表示以下項目的逾時期間 (秒數)：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html) | 

### Redis OSS 2.6.13 參數
<a name="ParameterGroups.Redis.2-6-13"></a>

**參數群組系列：**redis2.6

Redis OSS 2.6.13 是 ElastiCache 支援的第一個 Redis OSS 版本。下表顯示 ElastiCache 支援的 Redis OSS 2.6.13 參數。


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/ParameterGroups.Engine.html)

**注意**  
如果您未指定 Redis OSS 2.6.13 叢集的參數群組，則會使用預設參數群組 (`default.redis2.6`)。您無法變更預設參數群組中任何參數的值。但是，您永遠可以建立自訂參數群組並隨時將其指派給您的叢集。

### Redis OSS 節點類型特定參數
<a name="ParameterGroups.Redis.NodeSpecific"></a>

雖然大多數的參數都只有單一值，有些參數則可能會根據所使用的節點類型而有不同的值。下表顯示每個節點類型 `maxmemory`、`client-output-buffer-limit-slave-hard-limit` 及 `client-output-buffer-limit-slave-soft-limit` 參數的預設值。`maxmemory` 的值為您在節點上可以用於資料及其他用途的位元組上限。如需可用指標的詳細資訊，請參閱[可用記憶體](https://aws.amazon.com/premiumsupport/knowledge-center/available-memory-elasticache-redis-node/)。

**注意**  
`maxmemory` 參數無法修改。


|  Node type  | Maxmemory  | Client-output-buffer-limit-slave-hard-limit | Client-output-buffer-limit-slave-soft-limit | 
| --- | --- | --- | --- | 
| cache.t1.micro | 142606336 | 14260633 | 14260633 | 
| cache.t2.micro | 581959680 | 58195968 | 58195968 | 
| cache.t2.small | 1665138688 | 166513868 | 166513868 | 
| cache.t2.medium | 3461349376 | 346134937 | 346134937 | 
| cache.t3.micro | 536870912 | 53687091 | 53687091 | 
| cache.t3.small | 1471026299 | 147102629 | 147102629 | 
| cache.t3.medium | 3317862236 | 331786223 | 331786223 | 
| cache.t4g.micro | 536870912 | 53687091 | 53687091 | 
| cache.t4g.small | 1471026299 | 147102629 | 147102629 | 
| cache.t4g.medium | 3317862236 | 331786223 | 331786223 | 
| cache.m1.small | 943718400 | 94371840 | 94371840 | 
| cache.m1.medium | 3093299200 | 309329920 | 309329920 | 
| cache.m1.large | 7025459200 | 702545920 | 702545920 | 
| cache.m1.xlarge | 14889779200 | 1488977920 | 1488977920 | 
| cache.m2.xlarge | 17091788800 | 1709178880 | 1709178880 | 
| cache.m2.2xlarge | 35022438400 | 3502243840 | 3502243840 | 
| cache.m2.4xlarge | 70883737600 | 7088373760 | 7088373760 | 
| cache.m3.medium | 2988441600 | 309329920 | 309329920 | 
| cache.m3.large | 6501171200 | 650117120 | 650117120 | 
| cache.m3.xlarge | 14260633600 | 1426063360 | 1426063360 | 
| cache.m3.2xlarge | 29989273600 | 2998927360 | 2998927360 | 
| cache.m4.large | 6892593152 | 689259315 | 689259315 | 
| cache.m4.xlarge | 15328501760 | 1532850176 | 1532850176 | 
| cache.m4.2xlarge | 31889126359 | 3188912636 | 3188912636 | 
| cache.m4.4xlarge | 65257290629 | 6525729063 | 6525729063 | 
| cache.m4.10xlarge | 166047614239 | 16604761424 | 16604761424 | 
| cache.m5.large | 6854542746 | 685454275  | 685454275 | 
| cache.m5.xlarge | 13891921715 | 1389192172 | 1389192172 | 
| cache.m5.2xlarge | 27966669210 | 2796666921 | 2796666921 | 
| cache.m5.4xlarge | 56116178125 | 5611617812 | 5611617812 | 
| cache.m5.12xlarge | 168715971994 | 16871597199 | 16871597199 | 
| cache.m5.24xlarge | 337500562842 | 33750056284 | 33750056284 | 
| cache.m6g.large | 6854542746 | 685454275 | 685454275 | 
| cache.m6g.xlarge | 13891921715 | 1389192172 | 1389192172 | 
| cache.m6g.2xlarge | 27966669210 | 2796666921 | 2796666921 | 
| cache.m6g.4xlarge | 56116178125 | 5611617812 | 5611617812 | 
| cache.m6g.8xlarge | 111325552312 | 11132555231 | 11132555231 | 
| cache.m6g.12xlarge | 168715971994 | 16871597199 | 16871597199 | 
| cache.m6g.16xlarge | 225000375228 | 22500037523 | 22500037523 | 
| cache.c1.xlarge | 6501171200 | 650117120 | 650117120 | 
| cache.r3.large | 14470348800 | 1468006400 | 1468006400 | 
| cache.r3.xlarge | 30513561600 | 3040870400 | 3040870400 | 
| cache.r3.2xlarge | 62495129600 | 6081740800 | 6081740800 | 
| cache.r3.4xlarge | 126458265600 | 12268339200 | 12268339200 | 
| cache.r3.8xlarge | 254384537600 | 24536678400 | 24536678400 | 
| cache.r4.large | 13201781556 | 1320178155 | 1320178155 | 
| cache.r4.xlarge | 26898228839 | 2689822883 | 2689822883 | 
| cache.r4.2xlarge | 54197537997 | 5419753799 | 5419753799 | 
| cache.r4.4xlarge | 108858546586 | 10885854658 | 10885854658 | 
| cache.r4.8xlarge | 218255432090 | 21825543209 | 21825543209 | 
| cache.r4.16xlarge | 437021573120 | 43702157312 | 43702157312 | 
| cache.r5.large | 14037181030 | 1403718103 | 1403718103 | 
| cache.r5.xlarge | 28261849702 | 2826184970 | 2826184970 | 
| cache.r5.2xlarge | 56711183565 | 5671118356 | 5671118356 | 
| cache.r5.4xlarge | 113609865216 | 11360986522 | 11360986522 | 
| cache.r5.12xlarge | 341206346547 | 34120634655 | 34120634655 | 
| cache.r5.24xlarge | 682485973811 | 68248597381 | 68248597381 | 
| cache.r6g.large | 14037181030 | 1403718103 | 1403718103 | 
| cache.r6g.xlarge | 28261849702 | 2826184970 | 2826184970 | 
| cache.r6g.2xlarge | 56711183565 | 5671118356 | 5671118356 | 
| cache.r6g.4xlarge | 113609865216 | 11360986522 | 11360986522 | 
| cache.r6g.8xlarge | 225000375228 | 22500037523 | 22500037523 | 
| cache.r6g.12xlarge | 341206346547 | 34120634655 | 34120634655 | 
| cache.r6g.16xlarge | 450000750456 | 45000075046 | 45000075046 | 
| cache.r6gd.xlarge | 28261849702 | 2826184970 | 2826184970 | 
| cache.r6gd.2xlarge | 56711183565 | 5671118356 | 5671118356 | 
| cache.r6g.4xlarge | 113609865216 | 11360986522 | 11360986522 | 
| cache.r6g.8xlarge | 225000375228 | 22500037523 | 22500037523 | 
| cache.r6gd.12xlarge | 341206346547 | 34120634655 | 34120634655 | 
| cache.r6gd.16xlarge | 450000750456 | 45000075046 | 45000075046 | 
| cache.r7g.large | 14037181030 | 1403718103 | 1403718103 | 
| cache.r7g.xlarge | 28261849702 | 2826184970 | 2826184970 | 
| cache.r7g.2xlarge | 56711183565 | 5671118356 | 5671118356 | 
| cache.r7g.4xlarge | 113609865216 | 11360986522 | 11360986522 | 
| cache.r7g.8xlarge | 225000375228 | 22500037523 | 22500037523 | 
| cache.r7g.12xlarge | 341206346547 | 34120634655 | 34120634655 | 
| cache.r7g.16xlarge | 450000750456 | 45000075046 | 45000075046 | 
| cache.m7g.large | 6854542746 | 685454275 | 685454275 | 
| cache.m7g.xlarge | 13891921715 | 1389192172 | 1389192172 | 
| cache.m7g.2xlarge | 27966669210 | 2796666921 | 2796666921 | 
| cache.m7g.4xlarge | 56116178125 | 5611617812 | 5611617812 | 
| cache.m7g.8xlarge | 111325552312 | 11132555231 | 11132555231 | 
| cache.m7g.12xlarge | 168715971994 | 16871597199 | 16871597199 | 
| cache.m7g.16xlarge | 225000375228 | 22500037523 | 22500037523 | 
| cache.c7gn.large | 3317862236 | 1403718103 | 1403718103 | 
| cache.c7gn.xlarge | 6854542746 | 2826184970 | 2826184970 | 
| cache.c7gn.2xlarge | 13891921715 | 5671118356 | 5671118356 | 
| cache.c7gn.4xlarge | 27966669210 | 11360986522 | 11360986522 | 
| cache.c7gn.8xlarge | 56116178125 | 22500037523 | 22500037523 | 
| cache.c7gn.12xlarge | 84357985997 | 34120634655 | 34120634655 | 
| cache.c7gn.16xlarge | 113609865216 | 45000075046 | 45000075046 | 

**注意**  
最新一代的執行個體類型預設已建立在 Amazon Virtual Private Cloud (VPC) 中。  
T1 執行個體不支援多個可用區。  
T1 和 T2 執行個體不支援 Redis OSS AOF。  
Redis OSS 2.8.22 版`appendonly`及更新版本`appendfsync`不支援 Redis OSS 組態變數和 。

## Memcached 專用參數
<a name="ParameterGroups.Memcached"></a>

**Memcached**

若您沒有為 Memcached 叢集指定參數群組，則會使用適合您引擎版本的預設參數群組。您無法變更預設參數群組中任何參數的值。但是，您可以建立自訂參數群組並隨時將其指派給您的叢集。如需詳細資訊，請參閱[建立 ElastiCache 參數群組](ParameterGroups.Creating.md)。

**Topics**
+ [Memcached 1.6.17 的變更](#ParameterGroups.Memcached.1.6.17)
+ [Memcached 1.6.6 版新增參數](#ParameterGroups.Memcached.1-6-6)
+ [Memcached 1.5.10 參數變更](#ParameterGroups.Memcached.1-5-10)
+ [Memcached 1.4.34 版新增參數](#ParameterGroups.Memcached.1-4-34)
+ [Memcached 1.4.33 版新增參數](#ParameterGroups.Memcached.1-4-33)
+ [Memcached 1.4.24 版新增參數](#ParameterGroups.Memcached.1-4-24)
+ [Memcached 1.4.14 版新增參數](#ParameterGroups.Memcached.1-4-14)
+ [Memcached 1.4.5 版支援參數](#ParameterGroups.Memcached.1-4-5)
+ [Memcached 連線額外負荷](#ParameterGroups.Memcached.Overhead)
+ [Memcached 節點類型專用參數](#ParameterGroups.Memcached.NodeSpecific)

### Memcached 1.6.17 的變更
<a name="ParameterGroups.Memcached.1.6.17"></a>

從 Memcached 1.6.17 開始，我們不再支援下列管理命令：`lru_crawler`、`lru` 和 `slabs`。這些變更生效後，您就無法在執行期透過命令啟用/停用 `lru_crawler`。請透過修改自訂參數群組來啟用/停用 `lru_crawler`。

### Memcached 1.6.6 版新增參數
<a name="ParameterGroups.Memcached.1-6-6"></a>

針對 Memcached 1.6.6，沒有支援任何額外參數。

**參數群組系列：**memcached1.6

### Memcached 1.5.10 參數變更
<a name="ParameterGroups.Memcached.1-5-10"></a>

針對 Memcached 1.5.10 版，支援以下額外參數。

**參數群組系列：**memcached1.5


| Name | 詳細資訊 | Description | 
| --- | --- | --- | 
| no\$1modern  | 預設：1 類型：布林值 可修改：是 允許的值：0、1 變更生效：啟動時  |  用於停用 `slab_reassign`、`lru_maintainer_thread`、 `lru_segmented`和`maxconns_fast` 命令的別名。 使用 Memcached 1.5 及更高版本時， `no_modern`也會將 hash\$1algorithm 設定為 `jenkins`。 此外，使用 Memcached 1.5.10 時， `inline_ascii_reponse` 是由 參數 控制`parallelly`。這表示如果 `no_modern`已停用，`inline_ascii_reponse`則會停用 。從 Memcached 引擎 1.5.16 之後， `inline_ascii_response` 參數不再適用，因此`no_modern`啟用或停用不會影響 `inline_ascii_reponse`。 如果 `no_modern`已停用，則會`maxconns_fast`啟用 `slab_reassign`、`lru_segmented`、 `lru_maintainer_thread`和 。由於 `slab_automove`和 `hash_algorithm` 參數不是 SWITCH 參數，因此其設定是以參數群組中的組態為基礎。 如果您想要停用`no_modern`並還原至 `modern`，您必須設定自訂參數群組來停用此參數，然後重新啟動，這些變更才會生效。  自 2021 年 8 月 20 日起，此參數的預設組態值已從 0 變更為 1。更新後的預設值將由 2021 年 8 月 20 日之後每個區域的新 ElastiCache 使用者自動取得。2021 年 8 月 20 日之前區域中的現有 ElastiCache 使用者需要手動修改其自訂參數群組，才能取得這項新變更。   | 
| inline\$1ascii\$1resp  | 預設：0 類型：布林值 可修改：是 允許的值：0、1 變更生效：啟動時  |  在項目內存放來自 `VALUE` 回應的數字，使用最多 24 個位元組。針對 ASCII `get`、`faster` 設定小量的減速。 | 

針對 Memcached 1.5.10，會移除以下參數。


| Name | 詳細資訊 | Description | 
| --- | --- | --- | 
| expirezero\$1does\$1not\$1evict  | 預設：0 類型：布林值 可修改：是 允許的值：0、1 變更生效：啟動時  |  此版本中已不再支援。 | 
| modern  | 預設：1 類型：布林值 可修改：是 (如果設為 `no_modern`，則需要重新啟動) 允許的值：0、1 變更生效：啟動時  |  此版本中已不再支援。從此版本開始，每次啟動或重新啟動時，`no-modern` 預設會啟用。 | 

### Memcached 1.4.34 版新增參數
<a name="ParameterGroups.Memcached.1-4-34"></a>

針對 Memcached 1.4.34，沒有支援任何額外參數。

**參數群組系列：**memcached1.4

### Memcached 1.4.33 版新增參數
<a name="ParameterGroups.Memcached.1-4-33"></a>

針對 Memcached 1.4.33 版，支援以下額外參數。

**參數群組系列：**memcached1.4


| Name | 詳細資訊 | Description | 
| --- | --- | --- | 
|  modern  | 預設：啟用 類型：布林值 可修改：是 變更生效：啟動時  |  多種功能的別名。啟用 `modern` 等同於開啟以下命令，並使用 murmur3 雜湊演算法：`slab_reassign`、`slab_automove`、`lru_crawler`、`lru_maintainer`、`maxconns_fast` 及 `hash_algorithm=murmur3`。 | 
|  watch  | 預設：啟用 類型：布林值 可修改：是 變更生效：立即 若使用者到達其 `watcher_logbuf_size` 與 `worker_logbuf_size` 限制，則日誌可能會遭到卸除。  |  日誌擷取、移出或突變。例如，當使用者開啟 `watch` 時，他們會在 `get`、`set`、`delete` 或 `update` 發生時看到日誌。 | 
|  idle\$1timeout  | 預設：0 (停用) 類型：整數 可修改：是 變更生效：啟動時  |  在詢問關閉前允許用戶端閒置的最低秒數。數值範圍：0 到 86400。 | 
|  track\$1sizes  | 預設：停用 類型：布林值 可修改：是 變更生效：啟動時  |  顯示每個 Slab 群組使用的大小。 啟用 `track_sizes` 可讓您執行 `stats sizes`，而無須執行 `stats sizes_enable`。 | 
|  watcher\$1logbuf\$1size  | 預設：256 (KB) 類型：整數 可修改：是 變更生效：啟動時  |  `watch` 命令會開啟 Memcached 的串流日誌。但是，`watch` 可能會在移出率、突變率或擷取率過高，足以導致日誌緩衝區填滿時卸除日誌。在這種情況下，使用者可增加緩衝區大小來減少遺失日誌的機率。 | 
|  worker\$1logbuf\$1size  | 預設：64 (KB) 類型：整數 可修改：是 變更生效：啟動時  |  `watch` 命令會開啟 Memcached 的串流日誌。但是，`watch` 可能會在移出率、突變率或擷取率過高，足以導致日誌緩衝區填滿時卸除日誌。在這種情況下，使用者可增加緩衝區大小來減少遺失日誌的機率。 | 
|  slab\$1chunk\$1max  | 預設：524288 (位元組)  類型：整數 可修改：是 變更生效：啟動時  |  指定 Slab 的大小上限。設定較小的 Slab 大小以更有效率地使用記憶體。大於 `slab_chunk_max` 的項目會分割成多個 Slab。 | 
|  lru\$1crawler metadump [all\$11\$12\$13] | 預設：停用  類型：布林值 可修改：是 變更生效：立即  |  若啟用 lru\$1crawler，則此命令會傾印所有鍵。 `all\|1\|2\|3` - 所有 Slab，或是指定特定的 Slab 編號。 | 

### Memcached 1.4.24 版新增參數
<a name="ParameterGroups.Memcached.1-4-24"></a>

針對 Memcached 1.4.24 版，支援以下額外參數。

**參數群組系列：**memcached1.4


| Name | 詳細資訊 | Description | 
| --- | --- | --- | 
|  disable\$1flush\$1all  | 預設：0 (停用) 類型：布林值 可修改：是 變更生效：啟動時  |  新增參數 (`-F`) 來停用 flush\$1all。在您永遠不想在生產執行個體上執行完整排清時很有用。 數值：0、1 (當此值為 0 時，使用者便可執行 `flush_all`)。 | 
|  hash\$1algorithm  | 預設：jenkins 類型：字串 可修改：是 變更生效：啟動時  | 要使用的雜湊演算法。允許值：murmur3 及 jenkins。 | 
|  lru\$1crawler  | 預設：0 (停用) 類型：布林值 可修改：是 變更生效：重新啟動後  您可以於執行時間從命令列暫時啟用 `lru_crawler`。如需詳細資訊，請參閱「描述」欄。   |  清理已過期的項目 Slab 類別。此為在背景執行且影響程度低的程序。目前需要使用手動命令初始化網路爬取。 若要暫時啟用，請在命令列執行 `lru_crawler enable`。 `lru_crawler 1,3,5` 會網路爬取 Slab 類別 1、3 及 5，尋找過期的項目，並新增到釋放清單。 數值：0、1  在命令列啟用 `lru_crawler` 會啟用網路爬取程式，直到在命令列停用或下一次重新開機為止。若要永久啟用，您必須修改參數值。如需詳細資訊，請參閱[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。   | 
|  lru\$1maintainer  | 預設：0 (停用) 類型：布林值 可修改：是 變更生效：啟動時  |  背景執行緒，可在到達容量時於 LRU 間隨機移動項目。數值：0、1。 | 
|  expirezero\$1does\$1not\$1evict  | 預設：0 (停用) 類型：布林值 可修改：是 變更生效：啟動時  |  搭配 `lru_maintainer` 使用時，讓過期時間為 0 的項目無法移出。  這可能會填滿其他可移出項目的可用記憶體。  可設為略過 `lru_maintainer`。 | 

### Memcached 1.4.14 版新增參數
<a name="ParameterGroups.Memcached.1-4-14"></a>

針對 Memcached 1.4.14 版，支援以下額外參數。

**參數群組系列：**memcached1.4


**Memcached 1.4.14 版中新增的參數**  

|  Name  |  詳細資訊  |  Description  | 
| --- | --- | --- | 
| config\$1max | 預設：16 類型：整數 可修改：否 | ElastiCache 組態項目的數量上限。 | 
| config\$1size\$1max | 預設：65536 類型：整數 可修改：否 | 組態項目的大小上限，單位為位元組。 | 
| hashpower\$1init | 預設：16 類型：整數 可修改：否 | ElastiCache 雜湊表的初始大小，以 2 的乘冪表示。預設為 16 (2^16)，或 65536 個鍵。 | 
| maxconns\$1fast | 預設值：0 (false) 類型：布林值 可修改：是 變更生效：重新啟動後 | 變更到達連線數量上限時處理新連線請求的方式。若將此參數設為 0 (零)，則新的連線會新增到待處理項目佇列，並等待其他連線關閉。若將此參數設為 1，ElastiCache 會將錯誤傳送至用戶端，並立即關閉連線。 | 
| slab\$1automove | 預設：0 類型：整數 可修改：是 變更生效：重新啟動後 | 調整 Slab 自動移動演算法：若將此參數設為 0 (零)，則停用自動移動演算法。若設為 1，ElastiCache 會採取緩慢、保守的方式來自動移動 Slab。若設為 2，ElastiCache 會在發生移出時積極移動 Slab。(除非用於測試用途，否則不建議此模式。) | 
| slab\$1reassign | 預設值：0 (false) 類型：布林值 可修改：是 變更生效：重新啟動後 | 啟用或停用 Slab 指派。若將此參數設為 1，您可以使用 "slabs reassign" 命令來手動重新指派記憶體。 | 

### Memcached 1.4.5 版支援參數
<a name="ParameterGroups.Memcached.1-4-5"></a>

**參數群組系列：**memcached1.4

針對 Memcached 1.4.5 版，支援以下參數。


**Memcached 1.4.5 版中新增的參數**  

|  Name  |  詳細資訊  |  Description  | 
| --- | --- | --- | 
| backlog\$1queue\$1limit | 預設：1024 類型：整數 可修改：否 | 待處理佇列限制。 | 
| binding\$1protocol | 預設：自動 類型：字串 可修改：是 變更生效：重新啟動後 | 繫結通訊協定。允許值：`ascii` 及 `auto`。 如需修改 `binding_protocol` 值的指導，請參閱[修改 ElastiCache 參數群組](ParameterGroups.Modifying.md)。 | 
| cas\$1disabled | 預設值：0 (false) 類型：布林值 可修改：是 變更生效：重新啟動後 | 若為 1 (True)，則會停用檢查及設定 (CAS) 操作，並且存放的項目會比啟用 CAS 時少使用 8 個位元組。 | 
| chunk\$1size | 預設：48 類型：整數 可修改：是 變更生效：重新啟動後 | 配置給最小項目鍵、值及標記的空間數量下限 (位元組)。 | 
| chunk\$1size\$1growth\$1factor | 預設：1.25 類型：浮動 可修改：是 變更生效：重新啟動後 | 成長因數，控制每個後續 Memcached 區塊的大小。每個區塊都會比前一個區塊大 chunk\$1size\$1growth\$1factor 倍。 | 
| error\$1on\$1memory\$1exhausted | 預設值：0 (false) 類型：布林值 可修改：是 變更生效：重新啟動後 | 若為 1 (True)，則當沒有記憶體可存放項目時，Memcached 會傳回錯誤而非移出項目。 | 
| large\$1memory\$1pages | 預設值：0 (false) 類型：布林值 可修改：否 | 若為 1 (True)，ElastiCache 會嘗試使用大型記憶體分頁。 | 
| lock\$1down\$1paged\$1memory | 預設值：0 (false) 類型：布林值 可修改：否 | 若為 1 (True)，ElastiCache 會鎖定所有分頁記憶體。 | 
| max\$1item\$1size | 預設：1048576 類型：整數 可修改：是 變更生效：重新啟動後 | 可存放在叢集中的最大項目大小 (位元組)。 | 
| max\$1simultaneous\$1connections | 預設：65000 類型：整數 可修改：否 | 同時連線數量上限。 | 
| maximize\$1core\$1file\$1limit | 預設值：0 (false) 類型：布林值 可修改： 變更生效：重新啟動後 | 若為 1 (True)，ElastiCache 會最大化核心檔案限制。 | 
| memcached\$1connections\$1overhead | 預設：100 類型：整數 可修改：是 變更生效：重新啟動後 | 要為 Memcached 連線及其他雜項額外負荷預留的記憶體數量。如需此參數的相關資訊，請參閱 [Memcached 連線額外負荷](#ParameterGroups.Memcached.Overhead)。 | 
| requests\$1per\$1event | 預設：20 類型：整數 可修改：否 | 指定連線每個事件的請求數上限。此限制為避免資源耗盡的必要項目。 | 

### Memcached 連線額外負荷
<a name="ParameterGroups.Memcached.Overhead"></a>

在每個節點上，可供存放項目的記憶體為該節點可用記憶體的總數 (該值存放在 `max_cache_memory` 參數中)，減去用於連線及其他額外負荷 (該值存放在 `memcached_connections_overhead` 參數中) 所使用的記憶體。例如，`cache.m1.small` 類型的節點具有 1300MB 的 `max_cache_memory`。使用預設 100MB 的 `memcached_connections_overhead` 值，Memcached 程序便會擁有 1200MB，可用於存放項目。

`memcached_connections_overhead` 參數的預設值足以滿足大多數的使用案例。但是，連線額外負荷所需要的配置數量可能會因多項因素而不同，包括請求率、承載大小，以及連線數量。

您可以變更 `memcached_connections_overhead` 的值來更進一步配合您應用程式的需求。例如，增加 `memcached_connections_overhead` 參數的值會減少可用於存放項目的記憶體數量，為連線額外負荷提供更大的緩衝區。減少 `memcached_connections_overhead` 參數的值可讓您擁有更多記憶體來存放項目，但可能會增加切換 (swap) 用量及降低效能。若您察覺切換 (swap) 用量及效能降低，請嘗試增加 `memcached_connections_overhead` 參數的值。

**重要**  
針對 `cache.t1.micro` 節點類型，`memcached_connections_overhead` 的值會透過以下方式決定：  
若您的叢集使用預設參數群組，ElastiCache 會將 `memcached_connections_overhead` 的值設為 13MB。
若您的叢集使用您自行建立的參數群組，您可以將 `memcached_connections_overhead` 的值設為您所選擇的值。

### Memcached 節點類型專用參數
<a name="ParameterGroups.Memcached.NodeSpecific"></a>

雖然大多數的參數都只有單一值，有些參數則可能會根據所使用的節點類型而有不同的值。下表顯示每個節點類型 `max_cache_memory` 及 `num_threads` 參數的預設值。這些參數上的值都無法修改。


|  Node type  | max\$1cache\$1memory (以 MB 為單位)  | num\$1threads  | 
| --- | --- | --- | 
| cache.t1.micro | 213  | 1 | 
| cache.t2.micro | 555 | 1 | 
| cache.t2.small | 1588 | 1 | 
| cache.t2.medium | 3301 | 2 | 
| cache.t3.micro | 512 | 2 | 
| cache.t3.small | 1402 | 2 | 
| cache.t3.medium | 3364 | 2 | 
| cache.t4g.micro | 512 | 2 | 
| cache.t4g.small | 1402 | 2 | 
| cache.t4g.medium | 3164 | 2 | 
| cache.m1.small | 1301 | 1 | 
| cache.m1.medium | 3350 | 1 | 
| cache.m1.large | 7100 | 2 | 
| cache.m1.xlarge | 14600  | 4 | 
| cache.m2.xlarge | 33800 | 2 | 
| cache.m2.2xlarge | 30412 | 4 | 
| cache.m2.4xlarge | 68000  | 16 | 
| cache.m3.medium | 2850 | 1 | 
| cache.m3.large | 6200 | 2 | 
| cache.m3.xlarge | 13600 | 4 | 
| cache.m3.2xlarge | 28600 | 8 | 
| cache.m4.large | 6573 | 2 | 
| cache.m4.xlarge | 11496  | 4 | 
| cache.m4.2xlarge | 30412 | 8 | 
| cache.m4.4xlarge | 62234 | 16 | 
| cache.m4.10xlarge | 158355 | 40 | 
| cache.m5.large | 6537 | 2 | 
| cache.m5.xlarge | 13248 | 4 | 
| cache.m5.2xlarge | 26671 | 8 | 
| cache.m5.4xlarge | 53516 | 16 | 
| cache.m5.12xlarge | 160900 | 48 | 
| cache.m5.24xlarge | 321865  | 96 | 
| cache.m6g.large | 6537 | 2 | 
| cache.m6g.xlarge | 13248 | 4 | 
| cache.m6g.2xlarge | 26671 | 8 | 
| cache.m6g.4xlarge | 53516 | 16 | 
| cache.m6g.8xlarge | 107000 | 32 | 
| cache.m6g.12xlarge | 160900 | 48 | 
| cache.m6g.16xlarge | 214577 | 64 | 
| cache.c1.xlarge | 6600 | 8 | 
| cache.r3.large | 13800 | 2 | 
| cache.r3.xlarge | 29100 | 4 | 
| cache.r3.2xlarge | 59600 | 8 | 
| cache.r3.4xlarge | 120600 | 16 | 
| cache.r3.8xlarge | 120600 | 32 | 
| cache.r4.large | 12590 | 2 | 
| cache.r4.xlarge | 25652 | 4 | 
| cache.r4.2xlarge | 51686 | 8 | 
| cache.r4.4xlarge | 103815 | 16 | 
| cache.r4.8xlarge | 208144 | 32 | 
| cache.r4.16xlarge | 416776 | 64 | 
| cache.r5.large | 13387 | 2 | 
| cache.r5.xlarge | 26953 | 4 | 
| cache.r5.2xlarge | 54084 | 8 | 
| cache.r5.4xlarge | 108347 | 16 | 
| cache.r5.12xlarge | 325400 | 48 | 
| cache.r5.24xlarge | 650869 | 96 | 
| cache.r6g.large | 13387 | 2 | 
| cache.r6g.xlarge | 26953 | 4 | 
| cache.r6g.2xlarge | 54084 | 8 | 
| cache.r6g.4xlarge | 108347 | 16 | 
| cache.r6g.8xlarge | 214577 | 32 | 
| cache.r6g.12xlarge | 325400 | 48 | 
| cache.r6g.16xlarge | 429154 | 64 | 
| cache.c7gn.large | 3164 | 2 | 
| cache.c7gn.xlarge | 6537 | 4 | 
| cache.c7gn.2xlarge | 13248 | 8 | 
| cache.c7gn.4xlarge | 26671 | 16 | 
| cache.c7gn.8xlarge | 53516 | 32 | 
| cache.c7gn.12xlarge | 325400 | 48 | 
| cache.c7gn.16xlarge | 108347 | 64 | 

**注意**  
所有 T2 執行個體都是在 Amazon Virtual Private Cloud (Amazon VPC) 中建立的。

# 自動連接 EC2 執行個體和 ElastiCache 快取
<a name="compute-connection"></a>

您可以使用 ElastiCache 主控台來簡化 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體與 ElastiCache 快取之間的連線設定。通常，您的快取位於私有子網路中，而 EC2 執行個體位於 VPC 內的公有子網路中。您可以使用 EC2 執行個體上的 SQL 用戶端來連線至 ElastiCache 快取。EC2 執行個體也可以執行存取私有 ElastiCache 快取的 Web 伺服器或應用程式。

![\[使用 EC2 執行個體自動連接 ElastiCache 快取。\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ec2-elasticache-connect-network_diagram.png)


**Topics**
+ [自動連線至 EC2 執行個體](#ec2-elc-connect-overview)
+ [檢視已連線的運算資源](#ec2-elc-connect-viewing)

## 自動連線至 EC2 執行個體
<a name="ec2-elc-connect-overview"></a>

當您設定 EC2 執行個體與 ElastiCache 快取之間的連線時，ElastiCache 會自動為您的 EC2 執行個體和 ElastiCache 快取設定 VPC 安全群組。

以下是使用 ElastiCache 快取連接 EC2 執行個體的要求：
+ EC2 執行個體必須存在於與 ElastiCache 快取相同的 VPC 中。

  如果沒有 EC2 執行個體存在於相同的 VPC 中，則主控台會提供一個連結來建立該執行個體。
+ 設定連線的使用者必須具有執行下列 Amazon EC2 操作的許可。這些許可通常會在建立時新增至 EC2 帳戶。如需 EC2 許可的詳細資訊，請參閱[授予 Amazon EC2 資源所需的許可](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/ec2-api-permissions.html)。
  + `ec2:AuthorizeSecurityGroupEgress` 
  + `ec2:AuthorizeSecurityGroupIngress` 
  + `ec2:CreateSecurityGroup` 
  + `ec2:DescribeInstances` 
  + `ec2:DescribeNetworkInterfaces` 
  + `ec2:DescribeSecurityGroups` 
  + `ec2:ModifyNetworkInterfaceAttribute` 
  + `ec2:RevokeSecurityGroupEgress` 

當您設定與 EC2 執行個體的連線時，ElastiCache 會根據與 ElastiCache 快取和 EC2 執行個體相關聯的安全群組的目前組態運作，如下表所述。


****  

| 目前的 ElastiCache 安全群組組態 | 目前 EC2 安全群組組態 | ElastiCache 動作 | 
| --- | --- | --- | 
|  有一或多個安全群組與 ElastiCache 快取相關聯，其名稱符合模式 `elasticache-ec2-${cacheId}:${ec2InstanceId}`。符合模式的安全群組尚未修改。此安全群組只包含一個傳入規則，其具有 EC2 執行個體的 VPC 安全群組做為來源。  |  有一或多個與 EC2 執行個體相關聯的安全群組，其名稱符合模式 `elasticache-ec2-${cacheId}:${ec2InstanceId}`。符合模式的安全群組尚未修改。此安全群組只有一個傳出規則，其中 ElastiCache 快取的 VPC 安全群組為來源。  |  ElastiCache 不採取任何動作。 EC2 執行個體和 ElastiCache 快取之間已自動設定連線。由於 EC2 執行個體和 ElastiCache 快取之間已存在連線，因此不會修改安全群組。  | 
|  以下任一種條件均適用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/compute-connection.html)  |  以下任一種條件均適用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/compute-connection.html)  |  [ELC action: create new security groups](#elc-action-create-new-security-groups)  | 
|  有一或多個安全群組與 ElastiCache 快取相關聯，其名稱符合模式 `elasticache-ec2-${cacheId}:${ec2InstanceId}`。符合模式的安全群組尚未修改。此安全群組只包含一個傳入規則，其具有 EC2 執行個體的 VPC 安全群組做為來源。  |  有一或多個與 EC2 執行個體相關聯的安全群組，其名稱符合模式 `elasticache-ec2-${cacheId}:${ec2InstanceId}`。不過，ElastiCache 無法將這些安全群組用於與 ElastiCache 快取的連線。ElastiCache 無法使用沒有一個傳出規則的安全群組，並將 ElastiCache 快取的 VPC 安全群組做為來源。ElastiCache 也無法使用已修改的安全群組。  |  [ELC action: create new security groups](#elc-action-create-new-security-groups)  | 
|  有一或多個安全群組與 ElastiCache 快取相關聯，其名稱符合模式 `elasticache-ec2-${cacheId}:${ec2InstanceId}`。符合模式的安全群組尚未修改。此安全群組只包含一個傳入規則，其具有 EC2 執行個體的 VPC 安全群組做為來源。  |  存在用於連線的有效 EC2 安全群組，但與 EC2 執行個體沒有相關聯。此安全群組具有符合模式 `ec2-elasticache-${ec2InstanceId}:${cacheId}` 的名稱。尚未將其修改。它只有一個傳出規則，並將 theElastiCache快取的 VPC 安全群組做為來源。  |  [ELC action: associate EC2 security group](#elc-action-associate-ec2-security-group)  | 
|  以下任一種條件均適用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/compute-connection.html)  |  有一或多個與 EC2 執行個體相關聯的安全群組，其名稱符合模式 `ec2-elasticache-${ec2InstanceId}:${cacheId}`。符合模式的安全群組尚未修改。此安全群組只有一個傳出規則，其中 ElastiCache 快取的 VPC 安全群組為來源。  |  [ELC action: create new security groups](#elc-action-create-new-security-groups)  | 

**ElastiCache 動作：建立新的安全群組**  
ElastiCache 會採取下列動作：
+ 建立符合模式 `elasticache-ec2-${cacheId}:${ec2InstanceId}` 的新安全群組。此安全群組具有一個傳入規則，其具有 EC2 執行個體的 VPC 安全群組做為來源。此安全群組與 ElastiCache 快取相關聯，並允許 EC2 執行個體存取它。
+ 建立符合模式 `elasticache-ec2-${cacheId}:${ec2InstanceId}` 的新安全群組。此安全群組具有傳出規則，並將 ElastiCache 快取的 VPC 安全群組做為目標。此安全群組與 EC2 執行個體相關聯，並允許 EC2 執行個體將流量傳送至 ElastiCache 快取。

**ElastiCache 動作：關聯 EC2 安全群組**  
ElastiCache 會將有效的現有 EC2 安全群組與 EC2 執行個體建立關聯。此安全群組允許 EC2 執行個體將流量傳送至 ElastiCache 快取。

## 檢視已連線的運算資源
<a name="ec2-elc-connect-viewing"></a>

您可以使用 AWS 管理主控台 檢視連線至 ElastiCache 快取的運算資源。顯示的資源包括已自動設定的運算資源連線。例如，您可以將規則新增至與快取相關聯的 VPC 安全群組，以允許運算資源手動存取快取。這些資源不會出現在連線的運算資源清單中。

若要列出運算資源，必須套用與自動連接 EC2 執行個體和 ElastiCache 快取時相同的條件。

**檢視連線至 ElastiCache 快取的運算資源**

1. 登入 AWS 管理主控台 並開啟 ElastiCache 主控台

1. 在導覽窗格中，選擇**快取**，然後選擇 Valkey 或 Redis OSS 快取。

1. 在**連線與安全**索引標籤上，檢視**設定運算連線中的運算**資源。  
![\[已連線的運算資源。\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/images/ec2-elasticache-connected_resources.png)

# 擴展 ElastiCache
<a name="Scaling"></a>

您可以擴展 ElastiCache 快取以符合您的需求。無伺服器快取和節點型叢集提供多種不同的擴展選項。

## 擴展 ElastiCache Serverless
<a name="Scaling-serverless"></a>

ElastiCache Serverless 會在工作負載流量上升或下降時，自動容納您的工作負載流量。對於每個 ElastiCache Serverless 快取，ElastiCache 會持續追蹤 CPU、記憶體和網路等資源的使用率。當上述任何資源受到限制時，ElastiCache Serverless 會透過新增碎片並將資料重新分配到新碎片的方式進行橫向擴展，您的應用程式不會面臨任何停機時間。您可以在 CloudWatch 中，藉由監控快取資料儲存的 `BytesUsedForCache` 指標以及運算用途的 `ElastiCacheProcessingUnits` (ECPU)，來監控快取所取用的資源。

## 設定擴展限制以管理成本
<a name="Pre-Scaling"></a>

您可以選擇為快取設定快取資料儲存和 ECPU/秒的最大用量，以控制快取成本。這樣做將確保您的快取用量永遠不會超過所設定的上限。

如果您設定擴展上限，則當快取達到上限時，應用程式可能會遇到快取效能降低的情況。當您設定快取資料儲存上限，而您的快取資料儲存達到該上限時，ElastiCache 會使用 LRU 邏輯開始移出快取中已設定存活期 (TTL) 的資料。如果沒有可移出的資料，則請求寫入其他資料時，會收到「記憶體不足 (OOM)」錯誤訊息。當您設定 ECPU/秒上限，且工作負載的運算使用率超過此值時，ElastiCache 會開始調節請求。

如果您在 `BytesUsedForCache` 或 `ElastiCacheProcessingUnits` 設定上限，我們強烈建議您將 CloudWatch 警示設定為低於上限的值，以便在快取運作接近這些限制時收到通知。建議設定的警示值為上限的 75%。請參閱文件，了解如何設定 CloudWatch 警示。

## 使用 ElastiCache Serverless 預先擴展
<a name="Pre-Scaling"></a>

**ElastiCache Serverless 預先擴展**

透過預先擴展，也稱為預熱，您可以為 ElastiCache 快取設定支援的最低限制。您可以為每秒 ElastiCache 處理單元 ECPUs) 或資料儲存設定這些最小值。這在準備預期的擴展事件時非常有用。例如，如果遊戲公司預期在新遊戲啟動的第一分鐘內，登入次數會增加 5 倍，他們可以準備快取，以因應用量大幅增加的情況。

您可以使用 ElastiCache 主控台、CLI 或 API 執行預先擴展。ElastiCache Serverless 會在 60 分鐘內更新快取上可用的 ECPUs/秒，並在最低限制更新完成時傳送事件通知。

**預先擴展的運作方式**

當透過主控台、CLI 或 API 更新 ECPUs秒或資料儲存的最低限制時，該新限制可在 1 小時內使用。ElastiCache Serverless 在空快取上支援 30K ECPUs秒，使用僅供讀取複本功能時最高支援 90K ECPUs/秒。適用於 Valkey 8.0 的 ElastiCache Serverless 每 2-3 分鐘可以將支援的每秒請求 (RPS) 加倍，從 13 分鐘內的零達到每個快取 5M RPS，並具有一致的低於毫秒的 p50 讀取延遲。如果您預期即將發生的擴展事件可能會超過此速率，則建議您將最小 ECPUs/秒設定為您在峰值事件至少 60 分鐘之前預期的峰值 ECPUs/秒。否則，應用程式可能會遇到延遲增加和請求限流。

下限更新完成後，ElastiCache Serverless 會開始測量您每秒新的最低 ECPUs或新的最低儲存。即使您的應用程式未在快取上執行請求，或您的資料儲存用量低於下限，也會發生這種情況。當您從目前的設定降低下限時，更新會立即進行，因此 ElastiCache Serverless 會立即以新的下限開始計量。

**注意**  
當您設定最低用量限制時，即使您的實際用量低於最低用量限制，仍需支付該限制的費用。超過最低用量限制的 ECPU 或資料儲存用量會以一般費率計費。例如，如果您將最低用量限制設定為每秒 100，000 個 ECPUs，則將會向您收取每小時至少 1.224 USD 的費用 （使用 us-east-1 中的 ECPU 價格），即使您的用量低於該最低用量。
ElastiCache Serverless 支援快取上彙總層級的請求最小擴展。ElastiCache Serverless 也支援每個插槽每秒最多 30K ECPUs（使用 READONLY 連線從複本讀取時為每秒 90K 個 ECPUs)。最佳實務是，您的應用程式應確保金鑰分佈在 Valkey 或 Redis OSS 插槽和金鑰之間的流量盡可能一致。

## 使用 主控台和 設定擴展限制AWS CLI
<a name="Pre-Scaling.console"></a>

*使用AWS主控台設定擴展限制*

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 在導覽窗格中，選擇在您要修改的快取上執行的引擎。

1. 接著會出現執行所選引擎的快取清單。

1. 選擇快取名稱左側的選項按鈕來選擇要修改的快取。

1. 選擇 **Actions (動作)**，然後選擇 **Modify (修改)**。

1. 在**用量限制**下，設定適當的**記憶體**或**運算**限制。

1. 按一下**預覽**變更，然後**儲存**變更。

**使用 設定擴展限制AWS CLI**

若要使用 CLI 變更擴展限制，請使用 modify-serverless-cache API。

**Linux**︰

```
aws elasticache modify-serverless-cache --serverless-cache-name <cache name> \
--cache-usage-limits 'DataStorage={Minimum=10,Maximum=100,Unit=GB}, ECPUPerSecond={Minimum=1000,Maximum=100000}'
```

**Windows**：

```
aws elasticache modify-serverless-cache --serverless-cache-name <cache name> ^
--cache-usage-limits 'DataStorage={Minimum=10,Maximum=100,Unit=GB}, ECPUPerSecond={Minimum=1000,Maximum=100000}'
```

**使用 CLI 移除擴展限制**

若要使用 CLI 移除擴展限制，請將下限和上限參數設為 0。

**Linux**︰

```
aws elasticache modify-serverless-cache --serverless-cache-name <cache name> \
--cache-usage-limits 'DataStorage={Minimum=0,Maximum=0,Unit=GB}, ECPUPerSecond={Minimum=0,Maximum=0}'
```

**Windows**：

```
aws elasticache modify-serverless-cache --serverless-cache-name <cache name> ^
--cache-usage-limits 'DataStorage={Minimum=0,Maximum=0,Unit=GB}, ECPUPerSecond={Minimum=0,Maximum=0}'
```

# 擴展節點型叢集
<a name="Scaling-self-designed"></a>

您的應用程式需要處理的資料量通常是動態的。它會隨著您的業務成長或遇到需求的一般波動而增加或緘少。如果您自行管理快取，您必須為需求尖峰佈建足夠的硬體，這可能所費不貲。透過使用 Amazon ElastiCache，您可以擴展以滿足目前的需求，僅就您使用的部分付費。ElastiCache 可讓您擴展快取以符合需求。

**注意**  
如果跨一或多個區域複寫 Valkey 或 Redis OSS 叢集，則會依序擴展這些區域。向上擴展時，次要區域會先擴展，然後再擴展主要區域。向下擴展時，主要區域是第一個區域，然後是任何次要區域。  
更新引擎版本時，順序是次要區域，然後是主要區域。

**Topics**
+ [Memcached 叢集的隨需擴展](Scaling-self-designed.mem-heading.md)
+ [Memcached 叢集的手動擴展](Scaling.Memcached.manually.md)
+ [擴展 Valkey 或 Redis OSS （停用叢集模式） 叢集](scaling-redis-classic.md)
+ [擴展 Valkey 或 Redis OSS 的複本節點 （停用叢集模式）](Scaling.RedisReplGrps.md)
+ [擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)

# Memcached 叢集的隨需擴展
<a name="Scaling-self-designed.mem-heading"></a>

ElastiCache for Memcached 提供全受管的記憶體內快取服務，可在AWS雲端中部署、操作和垂直擴展 Memcached。

**隨需垂直擴展**

透過垂直擴展，ElastiCache for Memcached 提供高效能的分散式記憶體快取系統，廣泛用於透過減輕資料庫負載來加速動態應用程式。它會將資料和物件存放在 RAM 中，減少從外部資料來源讀取的需求。

您可以將垂直擴展套用至現有的節點型叢集以及新的叢集。這可以提供資源配置的彈性，讓使用者有效率地適應不斷變化的工作負載，而無需變更叢集架構。此擴展功能透過在高需求期間增加快取容量，以及縮減規模以在低需求期間最佳化成本來改善效能。這可簡化操作、消除建立新叢集以轉移資源需求的需求，並快速回應流量波動。整體而言，Memcached 節點型叢集的垂直擴展有助於提高成本效益、改善資源使用率，甚至允許使用者變更其 Memcached 執行個體類型。所有功能都讓使用者更輕鬆地將快取基礎設施與實際的應用程式需求保持一致。

**注意**  
節點類型修改僅適用於引擎版本 1.5 或更新版本的節點型 Memcached 叢集。
必須啟用 Auto Discovery，才能使用垂直擴展。

## 設定節點型 Memcached 叢集的隨需垂直擴展
<a name="Scaling.Memcached.automatically.setup.cli"></a>

您可以使用 為 Memcached 設定隨需垂直擴展`scale-config`，其中包含兩個參數：

1. **ScaleIntervalMinutes：**Memcached 升級程序期間擴展批次之間的時間 （分鐘）

1. **ScalePercentage：**在 Memcached 升級過程中同時擴展的節點百分比

**將現有的 Memcached 節點類型轉換為可透過 CLI 垂直擴展的快取**

若要將現有的 Memcached 節點型叢集轉換為可垂直擴展`elasticache modify-cache-cluster`的快取，您可以透過 CLI 使用 。

```
aws elasticache modify-cache-cluster \
    --cache-cluster-id <your-cluster-id> \
    --cache-node-type <new-node-type> \
    --scale-config <scale-config> \ 
    --apply-immediately
```

**使用 CLI 設定垂直擴展**

若要透過 CLI 設定節點型 Memcached 叢集的垂直擴展，請使用 `elasticache modify-cache-cluster`搭配 `scale-config`及其參數 `ScalePercentage` 和 `ScaleIntervalMinutes`。
+ **scale-interval-minutes：**這會定義擴展批次之間的時間 （以分鐘為單位）。此設定的範圍為 2-30 分鐘。如果未指定值，則會套用預設值 5 分鐘。
+ **scale-percentage：**這會指定在每個批次中同時擴展的節點百分比。此設定的範圍可以是 10-100。分割時設定會四捨五入，例如，如果結果為 49.5，則會套用 50 的設定。如果未指定任何值，則會套用預設值 20。

這些組態選項可讓您根據您的特定需求微調擴展程序，在將叢集中斷降至最低和最佳化擴展速度之間取得平衡。scale-config 參數僅適用於 Memcached 引擎類型，且會忽略其他快取引擎，確保與其他叢集現有 API 用量的回溯相容性。

**API 呼叫**

```
aws elasticache modify-cache-cluster \
    --cache-cluster-id <your-cluster-id> \
    --cache-node-type <new-node-type> \
    --scale-config '{
            "ScalePercentage": 30,
            "ScaleIntervalMinutes": 2
          }'
    --apply-immediately
```

**結果：**

傳回叢集 ID 和待定變更。

```
{
    "CacheCluster": {
        "CacheNodeType": "old_insance_type",
         ...
         ...
         "PendingModifiedValues": {
            "CacheNodeType": "new_instance_type"
         },
    }
}
```

**列出您的 Memcached 快取垂直擴展設定**

您可以擷取 Memcached 快取的擴展選項，並查看它們目前的垂直擴展選項。

**API 呼叫**

```
aws elasticache list-allowed-node-type-modifications --cache-cluster-id <your-cluster-id>
```

**結果： **

```
{ 
  "ScaleUpModifications": [
      "cache.x.xxxx", 
      "cache.x.xxxx"
   	  ],
   "ScaleDownModifications": [ 
      "cache.x.xxxx", 
      "cache.x.xxxx", 
      "cache.x.xxxx" 
      ] 
}
```

**使用 進行 Memcached 的垂直擴展AWS 管理主控台**

請依照下列步驟，使用AWS 管理主控台將節點型 Memcached 叢集轉換為垂直可擴展的叢集。

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 選取要轉換的 Memcached 叢集。

1. 選取**修改**索引標籤。

1. 前往**快取設定**區段，然後選取所需的**節點類型**。

1. 選取**預覽變更**，然後檢閱變更。

1. 選擇 **Modify (修改)**。

## Memcached 的自動化水平擴展
<a name="Scaling-self-designed.mem-heading.horizontal"></a>

ElastiCache 現在與AWS Application Auto Scaling (AAS) 服務整合，以包含 Memcached 叢集的自動水平擴展。您可以透過AWS Application Auto Scaling 服務定義擴展政策，並根據預先定義的指標或排程，視需要自動調整 Memcached 叢集中的節點數量。

**注意**  
自動化水平擴展目前不適用於北京和寧夏區域。

這些是自動水平擴展節點型叢集的可用方法。
+ **排程擴展：**根據排程擴展可讓您為可預測的負載變更設定自己的擴展排程。例如，您的 Web 應用程式傳入流量會在每週的星期三開始增加，到星期四維持高峰，然後在星期五開始下降。您可以設定 Auto Scaling 在星期三增加容量，並在星期五減少容量。
+ **目標追蹤：**使用目標追蹤擴展政策，您可以選擇擴展指標並設定目標值。Application Auto Scaling 會建立和管理可觸發擴展政策的 CloudWatch 警示，並根據指標和目標值來計算擴展調整。擴展政策會視需要新增或移除容量，讓指標保持在等於或接近指定目標值。

**如何透過 CLI 設定節點型 Memcached 叢集的水平擴展**

水平擴展節點型 Memcached 叢集時，您可以使用目標追蹤政策、排程政策或兩者。

1. **將資源註冊為可擴展的目標**

   在AWS Application Auto Scaling 中呼叫 `RegisterScalableTarget` API，以註冊可擴展維度 的目標`elasticache:cache-cluster:Nodes`。

   **API：ApplicationAutoScaling.RegisterScalableTarget**

   輸入:

   ```
   {
   	"ScalableDimension": "elasticache:cache-cluster:Nodes",
   	"ResourceId": "cache-cluster/test-cluster-1",
   	"ServiceNamespace": "elasticache",
   	"MinCapacity": 20,  
   	"MaxCapacity": 50 
   }
   ```

1. **建立目標追蹤擴展政策**

   接下來，您可以透過呼叫 put 擴展政策 API 來建立資源的目標追蹤擴展政策。

1. **預先定義的指標**

   以下是使用預先定義的指標 沿著快取節點維度擴展的政策` ElastiCacheCPUUtilization`，將叢集 test-cluster-1 設為 50。刪除縮減的節點時，將會移除最後 n 個節點。

   API：ApplicationAutoScaling.PutScalingPolicy

   輸入:

   ```
   {
   	"PolicyName": "cpu50-target-tracking-scaling-policy",
   	"PolicyType": "TargetTrackingScaling",
   	"TargetTrackingScalingPolicyConfiguration": {
   		"TargetValue": 50,
   		"PredefinedMetricSpecification": {
   			"PredefinedMetricType": "ElastiCacheCPUUtilization"
   			},
   		"ScaleOutCooldown": 600,
   		"ScaleInCooldown": 600
   			},
   	"ServiceNamespace": "elasticache",
   	"ScalableDimension": "elasticache:cache-cluster:Nodes",
   	"ResourceId": "cache-cluster/test-cluster-1"
   }
   ```

   輸出：

   ```
   {
   	"PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy:6d8972f3-efc8-437c-92d1-6270f29a66e7:resource/elasticache/cache-cluster/test-cluster-1:policyName/cpu50-target-tracking-scaling-policy",
   	"Alarms": [
   		{
   		"AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-elasticache/cache-cluster/test-cluster-1-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca",
   		"AlarmName": "TargetTracking-elasticache/cache-cluster/test-cluster-1-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca"
   		},
   		{
   		"AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:TargetTracking-elasticache/cache-cluster/test-cluster-1-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d",
   		"AlarmName": "TargetTracking-elasticache/cache-cluster/test-cluster-1-AlarmLow-1b437334-d19b-4a63-a812-6c67aaf2910d"
   		}
   	]
   }
   ```

1. **自訂指標**

   您也可以使用以 Cloudwatch 指標為基礎的自訂百分比，在維度上設定擴展政策。

   輸入:

   ```
   {
   	"PolicyName": "cpu50-target-tracking-scaling-policy",
   	"PolicyType": "TargetTrackingScaling",
   	"TargetTrackingScalingPolicyConfiguration": {
   		"CustomizedMetricSpecification": { 
   			"Dimensions": [ 
   				{ 
   				"Name": "MyMetricDimension",
   				"Value": "DimensionValue"
   				}
   				],
   			"MetricName": "MyCustomMetric",
   			"Namespace": "MyNamespace",
   			"Statistic": "Average",
   			"Unit": "Percent"
   			},
   		"TargetValue": 40,
   		"ScaleOutCooldown": 600,
   		"ScaleInCooldown": 600
   		},
   	"ServiceNamespace": "elasticache",
   	"ScalableDimension": "elasticache:cache-cluster:Nodes",
   	"ResourceId": "cache-cluster/test-cluster-1"
   }
   ```

1. **排定的動作**

   當您需要向外擴展特定事件，然後在事件之後向內擴展時，您可以透過呼叫 `PutScheduledAction` API 來建立兩個排程動作。

   **政策 1：向外擴展**

   中的 `at`命令會將動作`--schedule`排程在未來指定的日期和時間執行一次。排程欄位也支援速率 （分鐘、小時、日等） 和 Cron (Cron 表達式）。

   在指定的日期和時間，Application Auto Scaling 會更新 `MinCapacity` 和 `MaxCapacity` 值。Application Auto Scaling 向外擴展至 MinCapacity，將快取節點設為 70。

   **API：ApplicationAutoScaling.PutScheduledAction**

   輸入:

   ```
   {
   	"ResourceId": "elasticache:ache-cluster:test-cluster-1",
   	"ScalableDimension": "elasticache:cache-cluster:Nodes",
   		"ScalableTargetAction": { 
   			"MaxCapacity": 100,
   			"MinCapacity": 70
   			},
   	"Schedule": "at(2020-05-20T17:05:00)",
   	"ScheduledActionName": "ScalingOutScheduledAction",
   	"ServiceNamespace": "elasticache",
   }
   ```

   **政策 2：向 擴展**

   在指定的日期和時間，Application Auto Scaling 會更新資料表的 `MinCapacity`和 `MaxCapacity`，並縮減為 `MaxCapacity` 以將快取節點傳回至 60。

   **API：ApplicationAutoScaling.PutScheduledAction**

   輸入:

   ```
   {
   	"ResourceId": "elasticache:cache-cluster:test-cluster-1",
   	"ScalableDimension": "elasticache:cache-cluster:Nodes",
   	"ScalableTargetAction": { 
   		"MaxCapacity": 60,
   		"MinCapacity": 40
   		},
   	"Schedule": "at(2020-05-21T17:05:00)",
   	"ScheduledActionName": "ScalingInScheduledAction",
   	"ServiceNamespace": "elasticache",
   }
   ```

1. **檢視擴展活動**

   您可以使用 `DescribeScalingActivities` API 檢視擴展活動。

   **API：ApplicationAutoScaling.DescribeScalingActivities**

   輸出：

   ```
   {
   	"ScalingActivities": [
   		{
   		"ScalableDimension": "elasticache:elasticache:DesiredCount",
   		"Description": "Setting desired count to 30.",
   		"ResourceId": "elasticache/cache-cluster/test-cluster-1",
   		"ActivityId": "4d759079-a31f-4d0c-8468-504c56e2eecf",
   		"StartTime": 1462574194.658,
   		"elasticacheNamespace": "elasticache",
   		"EndTime": 1462574276.686,
   		"Cause": "monitor alarm TargetTracking-elasticache/cache-cluster/test-cluster-1-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca in state ALARM triggered policy cpu50-target-tracking-scaling-policy",
   		"StatusMessage": "Failed to set desired count to 30",
   		"StatusCode": "Failed"
   		},
   		{
   		"ScalableDimension": "elasticache:elasticache:DesiredCount",
   		"Description": "Setting desired count to 25.",
   		"ResourceId": "elasticache/cache-cluster/test-cluster-1",
   		"ActivityId": "90aff0eb-dd6a-443c-889b-b809e78061c1",
   		"StartTime": 1462574254.223,
   		"elasticacheNamespace": "elasticache",
   		"EndTime": 1462574333.492,
   		"Cause": "monitor alarm TargetTracking-elasticache/cache-cluster/test-cluster-1-AlarmHigh-d4f0770c-b46e-434a-a60f-3b36d653feca in state ALARM triggered policy cpu50-target-tracking-scaling-policy",
   		"StatusMessage": "Successfully set desired count to 25. Change successfully fulfilled by elasticache.",
   		"StatusCode": "Successful"
   		}
   	]
   }
   ```

1. **編輯/刪除擴展政策**

   您可以再次呼叫 `PutScalingPolicy` API 或呼叫 `DeleteScalingPolicy`或 `DeleteScheduled` 動作來編輯或刪除政策。

1. **取消註冊可擴展性目標**

   您可以透過 `DeregisterScalableTarget` API 取消註冊可擴展的目標。取消註冊可擴展的目標會刪除擴展政策和與其相關聯的排程動作。

   **API：ApplicationAutoScaling.DeregisterScalableTarget**

   輸入:

   ```
   {
   	"ResourceId": "elasticache/cache-cluster/test-cluster-1",
   	"ServiceNamespace": "elasticache",
   	"ScalableDimension": "elasticache:cache-cluster:Nodes"
   }
   ```

1. **擴展政策清除**

1. **多個擴展政策**

   您可以建立多個擴展政策。以下是[自動擴展目標追蹤](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html)中行為的關鍵標註。
   + 任一個可擴展性目標均能有多個目標追蹤擴展政策，但前提是各政策使用不同的指標。
   + Application Auto Scaling 的用意一律以可用性為優先，因此其行為視目標追蹤政策是準備水平擴展或縮減而有所不同。如果任何目標追蹤政策已準備好擴展，此服務就會擴展可擴展目標，但只有在所有目標追蹤政策 (已啟用縮減部分) 已準備好縮減，才會進行縮減。
   + 如果多個政策同一時間指示可擴展的目標水平擴展或縮減，Application Auto Scaling 會根據縮減和水平擴展都可達最大容量的政策來擴展。如此能夠更靈活地涵蓋多種情況，確保始終有足夠的容量可處理您的應用程式工作負載。
**注意**  
AWS Application Auto Scaling 不會將擴展政策排入佇列。Application Auto Scaling 會等待第一個擴展完成，然後冷卻，然後重複上述演算法。

**透過 自動水平擴展以節點為基礎的 Memcached 叢集AWS 管理主控台**

請依照下列步驟，使用AWS 管理主控台將現有的節點型 Memcached 叢集轉換為水平可擴展的叢集。

1. 登入AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 選取要轉換的 Memcached 快取。

1. 前往 **Autoscaling** 索引標籤。

1. 透過選取**新增動態擴展**或**新增排程擴展，選取要套用的擴展**政策。

1. 視需要填寫所選政策的詳細資訊。

1. 按一下 **Create (建立)**。

# Memcached 叢集的手動擴展
<a name="Scaling.Memcached.manually"></a>

手動水平擴展 Memcached 叢集與從叢集新增或移除節點一樣簡單。Memcached 叢集由 1 到 60 個節點組成。

因為您可以在 Memcached 叢集的所有節點間分割資料，您很少需要向上擴展至具有更大記憶體的節點類型。不過，由於 Memcached 引擎不會保留資料，如果您擴展到不同的節點類型，則您的新叢集會開始空白，除非您的應用程式填入它。

若要手動垂直擴展 Memcached 叢集，您必須建立新的叢集。Memcached 叢集一開始一律是空白的，除非您的應用程式填入資料。


**手動擴展 Memcached 叢集**  

| Action | 主題 | 
| --- | --- | 
|  向外擴展  |  [將節點新增至叢集](Clusters.html#AddNode)  | 
|  向內擴展  |  [從叢集刪除節點](Clusters.html#DeleteNode)  | 
|  變更節點類型  |  [垂直手動擴展節點型 Memcached 叢集](#Scaling.Memcached.Vertically)  | 

**Topics**
+ [水平手動擴展節點型 Memcached 叢集](#Scaling.Memcached.Horizontally)
+ [垂直手動擴展節點型 Memcached 叢集](#Scaling.Memcached.Vertically)

## 水平手動擴展節點型 Memcached 叢集
<a name="Scaling.Memcached.Horizontally"></a>

Memcached 引擎支援在多個節點間分割您的資料。因此，Memcached 叢集可輕鬆水平擴展。若要水平擴展 Memcached 叢集，只需要新增或移除節點。

下列主題詳細說明如何透過新增或移除節點，向外或向內擴展 Memcached 叢集。
+ [將節點新增至叢集](Clusters.html#AddNode)
+ [從您的叢集刪除節點](Clusters.html#AddNode)

每次在 Memcached 叢集中變更節點的數量，您必須至少為您的一些金鑰空間進行重新映射，使得它可映射到正確的節點。如需有關負載平衡 Memcached 叢集的詳細資訊，請參閱[設定 ElastiCache 用戶端以實現高效率的負載平衡 (Memcached)](BestPractices.LoadBalancing.md)。

如果是在 Memcached 叢集上使用自動搜索，則不需在您新增或移除節點時，變更應用程式中的端點。如需自動探索的詳細資訊，請參閱 [自動識別叢集中的節點 (Memcached)](AutoDiscovery.md)。如果您不使用自動搜索，每次在 Memcached 叢集中變更節點的數量時，即必須更新應用程式中的端點。

## 垂直手動擴展節點型 Memcached 叢集
<a name="Scaling.Memcached.Vertically"></a>

當您手動擴展或縮減 Memcached 叢集時，您必須建立新的叢集。Memcached 叢集一開始一律是空白的，除非您的應用程式填入資料。

**重要**  
如果您要向下擴展至較小的節點類型，請確定該較小的節點類型對您的資料和成本而言已足夠。如需詳細資訊，請參閱[選擇您的節點大小](CacheNodes.SelectSize.md)。

**Topics**
+ [垂直擴展節點型 Memcached 叢集 （主控台）](#Scaling.Memcached.Vertically.CON)
+ [垂直擴展節點型 Memcached 叢集 (AWS CLI)](#Scaling.Memcached.Vertically.CLI)
+ [垂直擴展節點型 Memcached 叢集 (ElastiCache API)](#Scaling.Memcached.Vertically.API)

### 垂直擴展節點型 Memcached 叢集 （主控台）
<a name="Scaling.Memcached.Vertically.CON"></a>

下列程序會逐步引導您使用 垂直擴展以節點為基礎的 Memcached 叢集AWS 管理主控台。

1. 使用新的節點類型來建立新叢集。如需詳細資訊，請參閱[建立 Memcached 叢集 (主控台)](Clusters.Create-mc.md#Clusters.Create.CON.Memcached)。

1. 在應用程式中，將端點更新為新叢集的端點。如需詳細資訊，請參閱[尋找叢集的端點 （主控台） (Memcached)](Endpoints.md#Endpoints.Find.Memcached)。

1. 刪除舊叢集。如需詳細資訊，請參閱[刪除 Memcached 中的新節點](Clusters.html#Delete.CON.Memcached)。

### 垂直擴展節點型 Memcached 叢集 (AWS CLI)
<a name="Scaling.Memcached.Vertically.CLI"></a>

下列程序會逐步引導您使用 垂直擴展以節點為基礎的 Memcached 叢集AWS CLI。

1. 使用新的節點類型來建立新叢集。如需詳細資訊，請參閱[建立叢集 (AWS CLI)](Clusters.Create.md#Clusters.Create.CLI)。

1. 在應用程式中，將端點更新為新叢集的端點。如需詳細資訊，請參閱[尋找端點 (AWS CLI)](Endpoints.md#Endpoints.Find.CLI)。

1. 刪除舊叢集。如需詳細資訊，請參閱[使用AWS CLI刪除 ElastiCache 叢集](Clusters.Delete.md#Clusters.Delete.CLI)。

### 垂直擴展節點型 Memcached 叢集 (ElastiCache API)
<a name="Scaling.Memcached.Vertically.API"></a>

下列程序會逐步引導您使用 ElastiCache API 垂直擴展節點型 Memcached 叢集。

1. 使用新的節點類型來建立新叢集。如需詳細資訊，請參閱[建立 Memcached 的叢集 (ElastiCache API)](Clusters.Create-mc.md#Clusters.Create.API.mem-heading)

1. 在應用程式中，將端點更新為新叢集的端點。如需詳細資訊，請參閱[尋找端點 (ElastiCache API)](Endpoints.md#Endpoints.Find.API)。

1. 刪除舊叢集。如需詳細資訊，請參閱[使用 ElastiCache API](Clusters.Delete.md#Clusters.Delete.API)。

# 擴展 Valkey 或 Redis OSS （停用叢集模式） 叢集
<a name="scaling-redis-classic"></a>

Valkey 或 Redis OSS （停用叢集模式） 叢集可以是具有 0 個碎片的單一節點叢集，或具有 1 個碎片的多節點叢集。單一節點叢集會使用一個節點來同時進行讀取和寫入。多節點叢集一律會有 1 個節點做為讀/寫主節點，以及 0 到 5 個僅供讀取複本節點。

**Topics**
+ [擴展 Valkey 或 Redis OSS （停用叢集模式） 叢集](#Scaling.RedisStandalone)


**擴展 Valkey 或 Redis OSS 叢集**  

| Action | Valkey 或 Redis OSS （停用叢集模式） | Valkey 或 Redis OSS （啟用叢集模式） | 
| --- | --- | --- | 
|  向內擴展  |  [從 ElastiCache 叢集移除節點](Clusters.DeleteNode.md)  |  [擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)  | 
|  向外擴展  |  [將節點新增至叢集](Clusters.html#AddNode)  |  [Valkey 或 Redis OSS 的線上重新分片 （啟用叢集模式）](scaling-redis-cluster-mode-enabled.md#redis-cluster-resharding-online)  | 
|  變更節點類型  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/scaling-redis-classic.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/scaling-redis-classic.html)  |  [透過修改節點類型來進行線上垂直擴展](redis-cluster-vertical-scaling.md)  | 
|  變更節點群組的數量  |  Valkey 或 Redis OSS （停用叢集模式） 叢集不支援  |  [擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集](scaling-redis-cluster-mode-enabled.md)  | 

**Contents**
+ [擴展 Valkey 或 Redis OSS （停用叢集模式） 叢集](#Scaling.RedisStandalone)
  + [向上擴展單一節點 Valkey 或 Redis OSS 叢集](#Scaling.RedisStandalone.ScaleUp)
    + [向上擴展單一節點 Valkey 或 Redis OSS （停用叢集模式） （主控台） 叢集](#Scaling.RedisStandalone.ScaleUp.CON)
    + [向上擴展單一節點 Valkey 或 Redis OSS 叢集 (AWS CLI)](#Scaling.RedisStandalone.ScaleUp.CLI)
    + [向上擴展單一節點 Valkey 或 Redis OSS 叢集 (ElastiCache API)](#Scaling.RedisStandalone.ScaleUp.API)
  + [向下擴展單一節點 Valkey 或 Redis OSS 叢集](#Scaling.RedisStandalone.ScaleDown)
    + [向下擴展單一節點 Valkey 或 Redis OSS 叢集 （主控台）](#Scaling.RedisStandalone.ScaleDown.CON)
    + [向下擴展單一節點 Valkey 或 Redis OSS 叢集 (AWS CLI)](#Scaling.RedisStandalone.ScaleUpDown-Modify.CLI)
    + [縮減單一節點 Valkey 或 Redis OSS 叢集 (ElastiCache API)](#Scaling.RedisStandalone.ScaleDown.API)

## 擴展 Valkey 或 Redis OSS （停用叢集模式） 叢集
<a name="Scaling.RedisStandalone"></a>

Valkey 或 Redis OSS （停用叢集模式） 節點必須大到足以包含快取的所有資料，加上 Valkey 或 Redis OSS 額外負荷。若要變更 Valkey 或 Redis OSS （停用叢集模式） 叢集的資料容量，您必須垂直擴展；向上擴展至較大的節點類型以增加資料容量，或向下擴展至較小的節點類型以降低資料容量。

ElastiCache 擴展程序旨在盡最大努力保留現有的資料，並需要成功的 Valkey 或 Redis OSS 複寫。對於 Valkey 或 Redis OSS （停用叢集模式） 叢集，我們建議為 Valkey 或 Redis OSS 提供足夠的記憶體。

您無法將資料分割到多個 Valkey 或 Redis OSS （停用叢集模式） 叢集。不過，如果您只需要增加或減少叢集的讀取容量，您可以使用複本節點建立 Valkey 或 Redis OSS （停用叢集模式） 叢集，並新增或移除僅供讀取複本。若要使用單一節點 Valkey 或 Redis OSS 叢集做為主要叢集，以複本節點建立 Valkey 或 Redis OSS （停用叢集模式） 叢集，請參閱 [建立 Valkey （停用叢集模式） 叢集 （主控台）](SubnetGroups.designing-cluster-pre.valkey.md#Clusters.Create.CON.valkey-gs)。

利用複本建立叢集之後，您可以透過新增僅供讀取複本來增加讀取容量。之後，如果需要，您可以透過移除僅供讀取複本來減少讀取容量。如需詳細資訊，請參閱 [增加讀取容量](Scaling.RedisReplGrps.md#Scaling.RedisReplGrps.ScaleOut) 或 [減少讀取容量](Scaling.RedisReplGrps.md#Scaling.RedisReplGrps.ScaleIn) 。

除了能夠擴展讀取容量之外，具有複本的 Valkey 或 Redis OSS （停用叢集模式） 叢集還提供其他業務優勢。如需詳細資訊，請參閱[使用複寫群組的高可用性](Replication.md)。

**重要**  
如果您的參數群組使用 `reserved-memory`為 Valkey 或 Redis OSS 額外負荷預留記憶體，在開始擴展之前，請確定您有一個自訂參數群組，可為您的新節點類型保留正確的記憶體數量。或者，您可以修改自訂參數群組，使得它會對您的新叢集使用 `reserved-memory-percent` 並使用該參數群組。  
如果您使用 `reserved-memory-percent`，則不需執行此動作。  
如需詳細資訊，請參閱[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。

**Topics**
+ [向上擴展單一節點 Valkey 或 Redis OSS 叢集](#Scaling.RedisStandalone.ScaleUp)
+ [向下擴展單一節點 Valkey 或 Redis OSS 叢集](#Scaling.RedisStandalone.ScaleDown)

### 向上擴展單一節點 Valkey 或 Redis OSS 叢集
<a name="Scaling.RedisStandalone.ScaleUp"></a>

當您擴展單一節點 Valkey 或 Redis OSS 叢集時，無論您使用 ElastiCache 主控台AWS CLI、 或 ElastiCache API，ElastiCache 都會執行下列程序。 ElastiCache 

1. 具有新節點類型的新叢集會在與現有叢集相同的可用區域中啟動。

1. 現有叢集中的快取資料會複製到新的叢集。此程序需要多長時間，取決於您的節點類型，以及叢集中的資料量。

1. 現在使用新的叢集提供讀取和寫入。由於新叢集的端點與舊叢集的端點相同，因此您不需要更新應用程式中的端點。DNS 項目更新時，您會注意到來自主節點的讀取和寫入發生短暫中斷 (幾秒鐘)。

1. ElastiCache 會刪除舊叢集。您會注意到來自舊節點的讀取和寫入發生短暫中斷 (幾秒鐘)，因為與舊節點的連線將會中斷。

**注意**  
針對執行 r6gd 節點類型的叢集，您只能擴展到 r6gd 節點系列中的節點大小。

如下表所示，如果您已為下一個維護時段排程引擎升級，則會封鎖您的 Valkey 或 Redis OSS 向上擴展操作。如需維護時段的詳細資訊，請參閱[管理 ElastiCache 叢集維護](maintenance-window.md)。


**封鎖的 Valkey 或 Redis OSS 操作**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/scaling-redis-classic.html)

如果您有正封鎖您的擱置中操作，您可以執行下列其中一項。
+ 透過清除**立即套用**核取方塊 (CLI 使用：`--no-apply-immediately`，API 使用：)，排程下一個維護時段的 Valkey 或 Redis OSS 擴展操作`ApplyImmediately=false`。
+ 等到下一個維護時段 （或之後） 執行您的 Valkey 或 Redis OSS 向上擴展操作。
+ 使用選取的**立即套用**核取方塊，將 Valkey 或 Redis OSS 引擎升級新增至此叢集修改 (CLI 使用：`--apply-immediately`，API 使用：`ApplyImmediately=true`)。這樣會透過讓引擎升級立即執行，來解除封鎖您的向上擴展操作。

您可以使用 ElastiCache 主控台AWS CLI、 或 ElastiCache API 來擴展單一節點 Valkey 或 Redis OSS （停用叢集模式） 叢集。

**重要**  
如果您的參數群組使用 `reserved-memory`為 Valkey 或 Redis OSS 額外負荷預留記憶體，在開始擴展之前，請確定您有一個自訂參數群組，可為您的新節點類型保留正確的記憶體數量。或者，您可以修改自訂參數群組，使得它會對您的新叢集使用 `reserved-memory-percent` 並使用該參數群組。  
如果您使用 `reserved-memory-percent`，則不需執行此動作。  
如需詳細資訊，請參閱[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。

#### 向上擴展單一節點 Valkey 或 Redis OSS （停用叢集模式） （主控台） 叢集
<a name="Scaling.RedisStandalone.ScaleUp.CON"></a>

下列程序說明如何使用 ElastiCache 管理主控台擴展單一節點 Valkey 或 Redis OSS 叢集。在此過程中，您的 Valkey 或 Redis OSS 叢集將繼續以最短的停機時間處理請求。

**擴展單一節點 Valkey 或 Redis OSS 叢集 （主控台）**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 從導覽窗格中，選擇 **Valkey 或 Redis OSS 叢集**。

1. 從叢集清單中，選擇您要向上擴展的叢集 （它必須執行 Valkey 或 Redis OSS 引擎，而非叢集的 Valkey 或 Redis OSS 引擎）。

1. 選擇 **Modify** (修改)。

1. 在 **Modify Cluster (修改叢集)** 精靈中：

   1. 從 **Node type (節點類型)** 清單選擇您要擴展的節點類型。

   1. 如果您使用 `reserved-memory` 來管理記憶體，請從 **Parameter Group (參數群組)** 清單中，選擇會為新節點類型保留正確記憶體數量的自訂參數群組。

1. 如果您要立即執行向上擴展程序，請選擇 **Apply immediately (立即套用)** 方塊。如果未選擇 **Apply immediately (立即套用)** 方塊，在此叢集的下一個維護時段期間，會執行向上擴展程序。

1. 選擇 **Modify** (修改)。

   如果您在上一個步驟中選擇 **Apply immediately (立即套用)**，叢集的狀態變更為 *modifying (修改中)*。當狀態變更為 *available (可用)*，修改即已完成，並且您可以開始使用新叢集。

#### 向上擴展單一節點 Valkey 或 Redis OSS 叢集 (AWS CLI)
<a name="Scaling.RedisStandalone.ScaleUp.CLI"></a>

下列程序說明如何使用 擴展單一節點 Valkey 或 Redis OSS 叢集AWS CLI。在此過程中，您的 Valkey 或 Redis OSS 叢集將繼續以最短的停機時間處理請求。

**若要擴展單一節點 Valkey 或 Redis OSS 叢集 (AWS CLI)**

1. 使用下列參數執行 `list-allowed-node-type-modifications`命令，決定您可以擴展至 的AWS CLI節點類型。
   + `--cache-cluster-id`

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache list-allowed-node-type-modifications \
   	    --cache-cluster-id my-cache-cluster-id
   ```

   針對 Windows：

   ```
   aws elasticache list-allowed-node-type-modifications ^
   	    --cache-cluster-id my-cache-cluster-id
   ```

   上述命令的輸出看起來會類似這個 (JSON 格式)。

   ```
   {
   	    "ScaleUpModifications": [
   	        "cache.m3.2xlarge", 
   	        "cache.m3.large", 
   	        "cache.m3.xlarge", 
   	        "cache.m4.10xlarge", 
   	        "cache.m4.2xlarge", 
   	        "cache.m4.4xlarge", 
   	        "cache.m4.large", 
   	        "cache.m4.xlarge", 
   	        "cache.r3.2xlarge", 
   	        "cache.r3.4xlarge", 
   	        "cache.r3.8xlarge", 
   	        "cache.r3.large", 
   	        "cache.r3.xlarge"
   	    ]
   	       "ScaleDownModifications": [
   	        "cache.t2.micro", 
   	        "cache.t2.small ", 
   	        "cache.t2.medium ",
               "cache.t1.small ",
   	    ], 
   
   	}
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[list-allowed-node-type-modifications](https://docs.aws.amazon.com/cli/latest/reference/elasticache/list-allowed-node-type-modifications.html)」。

1. 使用AWS CLI`modify-cache-cluster` 命令和下列參數，修改您現有的叢集，指定要向上擴展的叢集和新的較大節點類型。
   + `--cache-cluster-id` – 您要向上擴展的叢集名稱。
   + `--cache-node-type` – 您要擴展叢集的新節點類型。此值必須是步驟 1 中 `list-allowed-node-type-modifications` 命令傳回的其中一個節點類型。
   + `--cache-parameter-group-name` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `--apply-immediately` - 會造成立即套用擴充規模程序。若要將向上擴展程序延期至叢集的下一個維護時段，請使用 `--no-apply-immediately` 參數。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache modify-cache-cluster \
   	    --cache-cluster-id my-redis-cache-cluster \
   	    --cache-node-type cache.m3.xlarge \
   	    --cache-parameter-group-name redis32-m2-xl \
   	    --apply-immediately
   ```

   針對 Windows：

   ```
   aws elasticache modify-cache-cluster ^
   	    --cache-cluster-id my-redis-cache-cluster ^
   	    --cache-node-type cache.m3.xlarge ^
   	    --cache-parameter-group-name redis32-m2-xl ^
   	    --apply-immediately
   ```

   上述命令的輸出看起來會類似這個 (JSON 格式)。

   ```
   {
   	    "CacheCluster": {
   	        "Engine": "redis", 
   	        "CacheParameterGroup": {
   	            "CacheNodeIdsToReboot": [], 
   	            "CacheParameterGroupName": "default.redis6.x", 
   	            "ParameterApplyStatus": "in-sync"
   	        }, 
   	        "SnapshotRetentionLimit": 1, 
   	        "CacheClusterId": "my-redis-cache-cluster", 
   	        "CacheSecurityGroups": [], 
   	        "NumCacheNodes": 1, 
   	        "SnapshotWindow": "00:00-01:00", 
   	        "CacheClusterCreateTime": "2017-02-21T22:34:09.645Z", 
   	        "AutoMinorVersionUpgrade": true, 
   	        "CacheClusterStatus": "modifying", 
   	        "PreferredAvailabilityZone": "us-west-2a", 
   	        "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", 
   	        "CacheSubnetGroupName": "default", 
   	        "EngineVersion": "6.0", 
   	        "PendingModifiedValues": {
   	            "CacheNodeType": "cache.m3.2xlarge"
   	        }, 
   	        "PreferredMaintenanceWindow": "tue:11:30-tue:12:30", 
   	        "CacheNodeType": "cache.m3.medium",
   	         "DataTiering": "disabled"
   	    }
   	}
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[modify-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-cache-cluster.html)」。

1. 如果您使用 `--apply-immediately`，請使用 命令搭配下列參數來AWS CLI`describe-cache-clusters`檢查新叢集的狀態。當狀態變更為*可用*時，您可以開始使用新的、較大的叢集。
   + `--cache-cluster-id` – 單節點 Valkey 或 Redis OSS 叢集的名稱。使用此參數來描述特定叢集，而不是所有叢集。

   ```
   aws elasticache describe-cache-clusters --cache-cluster-id my-redis-cache-cluster
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[describe-cache-clusters](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-cache-clusters.html)」。

#### 向上擴展單一節點 Valkey 或 Redis OSS 叢集 (ElastiCache API)
<a name="Scaling.RedisStandalone.ScaleUp.API"></a>

下列程序說明如何使用 ElastiCache API 擴展單一節點 Valkey 或 Redis OSS 叢集。在此過程中，您的 Valkey 或 Redis OSS 叢集將繼續以最短的停機時間處理請求。

**擴展單一節點 Valkey 或 Redis OSS 叢集 (ElastiCache API)**

1. 判斷您可以擴充規模的節點類型，方法是執行 ElastiCache API `ListAllowedNodeTypeModifications` 動作並搭配下列參數。
   + `CacheClusterId` – 您要向上擴展的單一節點 Valkey 或 Redis OSS 叢集的名稱。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ListAllowedNodeTypeModifications
   	   &CacheClusterId=MyRedisCacheCluster
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ListAllowedNodeTypeModifications](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ListAllowedNodeTypeModifications.html)」。

1. 使用 `ModifyCacheCluster` ElastiCache API 動作和下列參數，修改您現有的叢集，指定要向上擴展的叢集和新的較大節點類型。
   + `CacheClusterId` – 您要向上擴展的叢集名稱。
   + `CacheNodeType` – 您想要向上擴展叢集的新節點類型。此值必須是上一個步驟中 `ListAllowedNodeTypeModifications`動作傳回的其中一個節點類型。
   + `CacheParameterGroupName` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `ApplyImmediately` - 設定為 `true` 會讓擴充規模程序立即執行。若要將向上擴展程序延期至叢集的下一個維護時段，請使用 `ApplyImmediately``=false`。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ModifyCacheCluster
   	   &ApplyImmediately=true
   	   &CacheClusterId=MyRedisCacheCluster
   	   &CacheNodeType=cache.m3.xlarge
   	   &CacheParameterGroupName redis32-m2-xl
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ModifyCacheCluster](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyCacheCluster.html)」。

1. 如果您使用 `ApplyImmediately``=true`，請使用 ElastiCache API `DescribeCacheClusters`動作搭配下列參數來檢查新叢集的狀態。當狀態變更為*可用*時，您可以開始使用新的、較大的叢集。
   + `CacheClusterId` – 單一節點 Valkey 或 Redis OSS 叢集的名稱。使用此參數來描述特定叢集，而不是所有叢集。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=DescribeCacheClusters
   	   &CacheClusterId=MyRedisCacheCluster
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[DescribeCacheClusters](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeCacheClusters.html)」。

### 向下擴展單一節點 Valkey 或 Redis OSS 叢集
<a name="Scaling.RedisStandalone.ScaleDown"></a>

下列各節會逐步解說如何將單一節點 Valkey 或 Redis OSS 叢集縮減為較小的節點類型。確保新的、較小的節點類型足以容納所有資料，且 Valkey 或 Redis OSS 額外負荷對於新 Valkey 或 Redis OSS 叢集的長期成功至關重要。如需詳細資訊，請參閱[確保您有足夠的記憶體來建立 Valkey 或 Redis OSS 快照](BestPractices.BGSAVE.md)。

**注意**  
針對執行 r6gd 節點類型的叢集，您只能擴展到 r6gd 節點系列中的節點大小。

**Topics**
+ [向下擴展單一節點 Valkey 或 Redis OSS 叢集 （主控台）](#Scaling.RedisStandalone.ScaleDown.CON)
+ [向下擴展單一節點 Valkey 或 Redis OSS 叢集 (AWS CLI)](#Scaling.RedisStandalone.ScaleUpDown-Modify.CLI)
+ [縮減單一節點 Valkey 或 Redis OSS 叢集 (ElastiCache API)](#Scaling.RedisStandalone.ScaleDown.API)

#### 向下擴展單一節點 Valkey 或 Redis OSS 叢集 （主控台）
<a name="Scaling.RedisStandalone.ScaleDown.CON"></a>

下列程序會逐步引導您使用 ElastiCache 主控台將單一節點 Valkey 或 Redis OSS 叢集縮減為較小的節點類型。

**重要**  
如果您的參數群組使用 `reserved-memory`為 Valkey 或 Redis OSS 額外負荷預留記憶體，在開始擴展之前，請確定您有一個自訂參數群組，可為您的新節點類型保留正確的記憶體數量。或者，您可以修改自訂參數群組，使得它會對您的新叢集使用 `reserved-memory-percent` 並使用該參數群組。  
如果您使用 `reserved-memory-percent`，則不需執行此動作。  
如需詳細資訊，請參閱[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。

**縮減您的單一節點 Valkey 或 Redis OSS 叢集 （主控台）**

1. 確保該較小的節點類型對您的資料和成本而言已足夠。

1. 如果您的參數群組使用 `reserved-memory` 為 Valkey 或 Redis OSS 額外負荷預留記憶體，請確定您有自訂參數群組來為新節點類型預留正確的記憶體數量。

   或者，您可以將自訂參數群組修改為使用 `reserved-memory-percent`。如需詳細資訊，請參閱[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。

1. 登入AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 從叢集的清單，選擇您要縮減規模的叢集。此叢集必須執行 Valkey 或 Redis OSS 引擎，而非叢集的 Valkey 或 Redis OSS 引擎。

1. 選擇 **Modify** (修改)。

1. 在 **Modify Cluster (修改叢集)** 精靈中：

   1. 從 **Node type (節點類型)** 清單，選擇您要縮減規模的節點類型。

   1. 如果您使用 `reserved-memory` 來管理記憶體，請從 **Parameter Group (參數群組)** 清單中，選擇會為新節點類型保留正確記憶體數量的自訂參數群組。

1. 如果您要立即執行縮減規模程序，請選擇 **Apply immediately (立即套用)** 核取方塊。如果將 **Apply immediately (立即套用)** 核取方塊保留未選擇，在此叢集的下一個維護時段期間，會執行縮減規模程序。

1. 選擇 **Modify** (修改)。

1. 當叢集的狀態從 *modifying (修改中)* 變更為 *available (可用)*，您的叢集即已擴展為新節點類型。不需要在應用程式中更新端點。

#### 向下擴展單一節點 Valkey 或 Redis OSS 叢集 (AWS CLI)
<a name="Scaling.RedisStandalone.ScaleUpDown-Modify.CLI"></a>

下列程序說明如何使用 縮減單一節點 Valkey 或 Redis OSS 叢集AWS CLI。

**縮減單一節點 Valkey 或 Redis OSS 叢集 (AWS CLI)**

1. 使用以下參數執行 `list-allowed-node-type-modifications`命令，AWS CLI決定您可以縮減規模的節點類型。
   + `--cache-cluster-id`

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache list-allowed-node-type-modifications \
   	    --cache-cluster-id my-cache-cluster-id
   ```

   針對 Windows：

   ```
   aws elasticache list-allowed-node-type-modifications ^
   	    --cache-cluster-id my-cache-cluster-id
   ```

   上述命令的輸出看起來會類似這個 (JSON 格式)。

   ```
   {
   	    "ScaleUpModifications": [
   	        "cache.m3.2xlarge", 
   	        "cache.m3.large", 
   	        "cache.m3.xlarge", 
   	        "cache.m4.10xlarge", 
   	        "cache.m4.2xlarge", 
   	        "cache.m4.4xlarge", 
   	        "cache.m4.large", 
   	        "cache.m4.xlarge", 
   	        "cache.r3.2xlarge", 
   	        "cache.r3.4xlarge", 
   	        "cache.r3.8xlarge", 
   	        "cache.r3.large", 
   	        "cache.r3.xlarge"
   	    ]
   	       "ScaleDownModifications": [
   	        "cache.t2.micro", 
   	        "cache.t2.small ", 
   	        "cache.t2.medium ",
               "cache.t1.small ",
   	    ], 
   
   	}
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[list-allowed-node-type-modifications](https://docs.aws.amazon.com/cli/latest/reference/elasticache/list-allowed-node-type-modifications.html)」。

1. 使用AWS CLI`modify-cache-cluster` 命令和下列參數，修改您現有的叢集，指定要縮減規模的叢集和新的較小節點類型。
   + `--cache-cluster-id` – 您要縮減規模的叢集名稱。
   + `--cache-node-type` – 您要擴展叢集的新節點類型。此值必須是步驟 1 中 `list-allowed-node-type-modifications` 命令傳回的其中一個節點類型。
   + `--cache-parameter-group-name` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `--apply-immediately` - 會讓縮減規模程序立即套用。若要將向上擴展程序延期至叢集的下一個維護時段，請使用 `--no-apply-immediately` 參數。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache modify-cache-cluster \
   	    --cache-cluster-id my-redis-cache-cluster \
   	    --cache-node-type cache.m3.xlarge \
   	    --cache-parameter-group-name redis32-m2-xl \
   	    --apply-immediately
   ```

   針對 Windows：

   ```
   aws elasticache modify-cache-cluster ^
   	    --cache-cluster-id my-redis-cache-cluster ^
   	    --cache-node-type cache.m3.xlarge ^
   	    --cache-parameter-group-name redis32-m2-xl ^
   	    --apply-immediately
   ```

   上述命令的輸出看起來會類似這個 (JSON 格式)。

   ```
   {
   	    "CacheCluster": {
   	        "Engine": "redis", 
   	        "CacheParameterGroup": {
   	            "CacheNodeIdsToReboot": [], 
   	            "CacheParameterGroupName": "default.redis6,x", 
   	            "ParameterApplyStatus": "in-sync"
   	        }, 
   	        "SnapshotRetentionLimit": 1, 
   	        "CacheClusterId": "my-redis-cache-cluster", 
   	        "CacheSecurityGroups": [], 
   	        "NumCacheNodes": 1, 
   	        "SnapshotWindow": "00:00-01:00", 
   	        "CacheClusterCreateTime": "2017-02-21T22:34:09.645Z", 
   	        "AutoMinorVersionUpgrade": true, 
   	        "CacheClusterStatus": "modifying", 
   	        "PreferredAvailabilityZone": "us-west-2a", 
   	        "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", 
   	        "CacheSubnetGroupName": "default", 
   	        "EngineVersion": "6.0", 
   	        "PendingModifiedValues": {
   	            "CacheNodeType": "cache.m3.2xlarge"
   	        }, 
   	        "PreferredMaintenanceWindow": "tue:11:30-tue:12:30", 
   	        "CacheNodeType": "cache.m3.medium",
   	         "DataTiering": "disabled"
   	    }
   	}
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[modify-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-cache-cluster.html)」。

1. 如果您使用 `--apply-immediately`，請使用 命令搭配下列參數來AWS CLI`describe-cache-clusters`檢查新叢集的狀態。當狀態變更為*可用*時，您可以開始使用新的、較大的叢集。
   + `--cache-cluster-id` – 單節點 Valkey 或 Redis OSS 叢集的名稱。使用此參數來描述特定叢集，而不是所有叢集。

   ```
   aws elasticache describe-cache-clusters --cache-cluster-id my-redis-cache-cluster
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[describe-cache-clusters](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-cache-clusters.html)」。

#### 縮減單一節點 Valkey 或 Redis OSS 叢集 (ElastiCache API)
<a name="Scaling.RedisStandalone.ScaleDown.API"></a>

下列程序說明如何使用 ElastiCache API 向上擴展單一節點 Valkey 或 Redis OSS 叢集。

**縮減單一節點 Valkey 或 Redis OSS 叢集 (ElastiCache API)**

1. 判斷您可以縮減規模的節點類型，方法是執行 ElastiCache API `ListAllowedNodeTypeModifications` 動作並搭配下列參數。
   + `CacheClusterId` – 您要縮減規模的單一節點 Valkey 或 Redis OSS 叢集的名稱。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ListAllowedNodeTypeModifications
   	   &CacheClusterId=MyRedisCacheCluster
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ListAllowedNodeTypeModifications](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ListAllowedNodeTypeModifications.html)」。

1. 使用 `ModifyCacheCluster` ElastiCache API 動作和下列參數，修改您現有的叢集，指定要向上擴展的叢集和新的較大節點類型。
   + `CacheClusterId` – 您要縮減規模的叢集名稱。
   + `CacheNodeType` – 您想要縮減叢集規模的新節點類型。此值必須是上一個步驟中 `ListAllowedNodeTypeModifications`動作傳回的其中一個節點類型。
   + `CacheParameterGroupName` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `ApplyImmediately` - 設定為 `true` 會造成縮減規模程序立即執行。若要將向上擴展程序延期至叢集的下一個維護時段，請使用 `ApplyImmediately``=false`。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ModifyCacheCluster
   	   &ApplyImmediately=true
   	   &CacheClusterId=MyRedisCacheCluster
   	   &CacheNodeType=cache.m3.xlarge
   	   &CacheParameterGroupName redis32-m2-xl
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ModifyCacheCluster](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyCacheCluster.html)」。

1. 如果您使用 `ApplyImmediately``=true`，請使用 ElastiCache API `DescribeCacheClusters`動作搭配下列參數來檢查新叢集的狀態。當狀態變更為*可用*時，您可以開始使用新的、較小的叢集。
   + `CacheClusterId` – 單一節點 Valkey 或 Redis OSS 叢集的名稱。使用此參數來描述特定叢集，而不是所有叢集。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=DescribeCacheClusters
   	   &CacheClusterId=MyRedisCacheCluster
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[DescribeCacheClusters](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeCacheClusters.html)」。

# 擴展 Valkey 或 Redis OSS 的複本節點 （停用叢集模式）
<a name="Scaling.RedisReplGrps"></a>

具有複本節點的 Valkey 或 Redis OSS 叢集 （在 API/CLI 中稱為*複寫群組*) 透過啟用自動容錯移轉的異地同步備份提供高可用性。具有複本節點的叢集是最多六個 Valkey 或 Redis OSS 節點的邏輯集合，其中一個節點主要節點能夠同時處理讀取和寫入請求。叢集中的所有其他節點為主要節點的唯讀複本。寫入主要節點的資料會非同步複寫到叢集中的所有僅供讀取複本。由於 Valkey 或 Redis OSS （停用叢集模式） 不支援跨多個叢集分割資料，因此 Valkey 或 Redis OSS （停用叢集模式） 複寫群組中的每個節點都會包含整個快取資料集。Valkey 或 Redis OSS （啟用叢集模式） 叢集支援將您的資料分割至最多 500 個碎片。

若要變更您叢集的資料容量，您必須將它向上擴展至較大的節點類型，或向下擴展至較小的節點類型。

若要變更您叢集的讀取容量，請新增更多僅供讀取複本 (最多 5 個)，或移除僅供讀取複本。

ElastiCache 擴展程序旨在盡最大努力保留現有的資料，並需要成功的 Valkey 或 Redis OSS 複寫。對於具有複本的 Valkey 或 Redis OSS 叢集，我們建議為 Valkey 或 Redis OSS 提供足夠的記憶體。

**Topics**
+ [使用複本擴展 Valkey 或 Redis OSS 叢集](#Scaling.RedisReplGrps.ScaleUp)
+ [使用複本向下擴展 Valkey 或 Redis OSS 叢集](#Scaling.RedisReplGrps.ScaleDown)
+ [增加讀取容量](#Scaling.RedisReplGrps.ScaleOut)
+ [減少讀取容量](#Scaling.RedisReplGrps.ScaleIn)

**相關主題**
+ [使用複寫群組的高可用性](Replication.md)
+ [複寫：停用 Valkey 和 Redis OSS 叢集模式與啟用](Replication.Redis-RedisCluster.md)
+ [搭配 Valkey 和 Redis OSS 使用異地同步備份，將 ElastiCache 中的停機時間降至最低](AutoFailover.md)
+ [確保您有足夠的記憶體來建立 Valkey 或 Redis OSS 快照](BestPractices.BGSAVE.md)

**Topics**
+ [使用複本擴展 Valkey 或 Redis OSS 叢集](#Scaling.RedisReplGrps.ScaleUp)
+ [使用複本向下擴展 Valkey 或 Redis OSS 叢集](#Scaling.RedisReplGrps.ScaleDown)
+ [增加讀取容量](#Scaling.RedisReplGrps.ScaleOut)
+ [減少讀取容量](#Scaling.RedisReplGrps.ScaleIn)

## 使用複本擴展 Valkey 或 Redis OSS 叢集
<a name="Scaling.RedisReplGrps.ScaleUp"></a>

Amazon ElastiCache 提供主控台、CLI 和 API 支援，以擴展您的 Valkey 或 Redis OSS （停用叢集模式） 複寫群組。

擴充規模程序啟動時，ElastiCache 會執行下列動作：

1. 使用新節點類型啟動複寫群組。

1. 將所有資料從目前的主要節點複製到新的主要節點。

1. 將新的僅供讀取複本與新主要節點同步。

1. 更新 DNS 項目，使得它們指向新節點。因此，您不需在應用程式中更新端點。對於 Valkey 7.2 及更高版本或 Redis OSS 5.0.5 及更高版本，您可以在叢集繼續保持連線並提供傳入請求時擴展啟用自動容錯移轉的叢集。在 Redis OSS 4.0.10 版及更低版本上，您可能會注意到 DNS 項目更新時，從主節點讀取和寫入先前版本的短暫中斷。

1. 刪除舊節點 (CLI/API：複寫群組)。您會注意到來自舊節點的讀取和寫入發生短暫中斷 (幾秒鐘)，因為與舊節點的連線將會中斷。

此程序需要的時間與您的節點類型以及叢集中的資料量有關。

如下表所示，如果您已為叢集的下一個維護時段排程引擎升級，則會封鎖您的 Valkey 或 Redis OSS 向上擴展操作。


**封鎖的 Valkey 或 Redis OSS 操作**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonElastiCache/latest/dg/Scaling.RedisReplGrps.html)

如果您有正封鎖您的擱置中操作，您可以執行下列其中一項。
+ 透過清除**立即套用**核取方塊 (CLI 使用：`--no-apply-immediately`，API 使用：)，排程下一個維護時段的 Valkey 或 Redis OSS 擴展操作`ApplyImmediately=false`。
+ 請等到下一個維護時段 （或之後） 執行您的 Valkey 或 Redis OSS 向上擴展操作。
+ 使用選取的**立即套用**核取方塊，將 Valkey 或 Redis OSS 引擎升級新增至此叢集修改 (CLI 使用：`--apply-immediately`，API 使用：`ApplyImmediately=true`)。這樣會透過讓引擎升級立即執行，來解除封鎖您的向上擴展操作。

下列各節說明如何使用 ElastiCache 主控台AWS CLI、 和 ElastiCache API，使用複本向上擴展您的 Valkey 或 Redis OSS 叢集。

**重要**  
如果您的參數群組使用 `reserved-memory`為 Valkey 或 Redis OSS 額外負荷預留記憶體，在開始擴展之前，請確定您有一個自訂參數群組，可為您的新節點類型保留正確的記憶體數量。或者，您可以修改自訂參數群組，使得它會對您的新叢集使用 `reserved-memory-percent` 並使用該參數群組。  
如果您使用 `reserved-memory-percent`，則不需執行此動作。  
如需詳細資訊，請參閱[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。

### 使用複本擴展 Valkey 或 Redis OSS 叢集 （主控台）
<a name="Scaling.RedisReplGrps.ScaleUp.CON"></a>

向上擴展至較大的節點類型所需的時間可能不同，取決於節點類型和您目前叢集中的資料量。

下列程序會使用 ElastiCache 主控台，將包含複本的叢集從其目前的節點類型擴展至較大的新節點類型。在此過程中，更新 DNS 項目時，其他版本的主節點可能會發生讀取和寫入短暫中斷的情況。在 5.0.6 和更新版本上執行的節點，停機時間可能不到 1 秒，而在較舊版本上則可達數秒。

**使用複本擴展 Valkey 或 Redis OSS 叢集 （主控台）**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 從導覽窗格中，選擇 **Valkey 叢集**或 **Redis OSS 叢集**

1. 從叢集的清單，選擇您要向上擴展的叢集。此叢集必須執行 Valkey 或 Redis OSS 引擎，而非叢集的 Valkey 或 Redis OSS 引擎。

1. 選擇 **Modify** (修改)。

1. 在 **Modify Cluster (修改叢集)** 精靈中：

   1. 從 **Node type (節點類型)** 清單選擇您要擴展的節點類型。請注意，並非所有節點類型都可縮減規模。

   1. 如果您使用 `reserved-memory` 來管理記憶體，請從 **Parameter Group (參數群組)** 清單中，選擇會為新節點類型保留正確記憶體數量的自訂參數群組。

1. 如果您要立即執行向上擴展程序，請選擇 **Apply immediately (立即套用)** 核取方塊。如果將 **Apply immediately (立即套用)** 核取方塊保留未選擇，在此叢集的下一個維護時段期間，會執行向上擴展程序。

1. 選擇 **Modify** (修改)。

1. 當叢集的狀態從 *modifying (修改中)* 變更為 *available (可用)*，您的叢集即已擴展為新節點類型。不需要在應用程式中更新端點。

### 向上擴展 Valkey 或 Redis OSS 複寫群組 (AWS CLI)
<a name="Scaling.RedisReplGrps.ScaleUp.CLI"></a>

下列程序會使用AWS CLI，將複寫群組從其目前的節點類型擴展至新的、較大的節點類型。在此過程中，ElastiCache 會更新 DNS 項目，使其指向新節點。因此，您不需在應用程式中更新端點。對於 Valkey 7.2 及更高版本或 Redis OSS 5.0.5 及更高版本，您可以在叢集繼續保持連線並提供傳入請求時擴展啟用自動容錯移轉的叢集。在 4.0.10 和以下版本中，您會注意到，DNS 項目更新的同時，前幾版來自主節點的讀取和寫入發生短暫中斷。

擴展到較大的節點類型所需的時間會有所不同，具體取決於您的節點類型和目前叢集中的資料量。

**擴展 Valkey 或 Redis OSS 複寫群組 (AWS CLI)**

1. 使用以下參數執行 `list-allowed-node-type-modifications`命令，AWS CLI決定您可以擴展到哪些節點類型。
   + `--replication-group-id` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache list-allowed-node-type-modifications \
   	    --replication-group-id my-repl-group
   ```

   針對 Windows：

   ```
   aws elasticache list-allowed-node-type-modifications ^
   	    --replication-group-id my-repl-group
   ```

   此操作的輸出看起來會類似這個 (JSON 格式)。

   ```
   {
   	    "ScaleUpModifications": [
   	        "cache.m3.2xlarge", 
   	        "cache.m3.large", 
   	        "cache.m3.xlarge", 
   	        "cache.m4.10xlarge", 
   	        "cache.m4.2xlarge", 
   	        "cache.m4.4xlarge", 
   	        "cache.m4.large", 
   	        "cache.m4.xlarge", 
   	        "cache.r3.2xlarge", 
   	        "cache.r3.4xlarge", 
   	        "cache.r3.8xlarge", 
   	        "cache.r3.large", 
   	        "cache.r3.xlarge"
   	    ]
   	}
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[list-allowed-node-type-modifications](https://docs.aws.amazon.com/cli/latest/reference/elasticache/list-allowed-node-type-modifications.html)」。

1. 使用AWS CLI`modify-replication-group`命令搭配下列參數，將您目前的複寫群組擴展到新的節點類型。
   + `--replication-group-id` - 複寫群組的名稱。
   + `--cache-node-type` – 此複寫群組中新的、較大的叢集節點類型。此值必須是上一個步驟中 `list-allowed-node-type-modifications`命令傳回的其中一個執行個體類型。
   + `--cache-parameter-group-name` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `--apply-immediately` - 會造成立即套用擴充規模程序。若要將向上擴展操作延期至下一個維護時段，請使用 `--no-apply-immediately`。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache modify-replication-group \
   	    --replication-group-id my-repl-group \
   	    --cache-node-type cache.m3.xlarge \
   	    --cache-parameter-group-name redis32-m3-2xl \
   	    --apply-immediately
   ```

   針對 Windows：

   ```
   aws elasticache modify-replication-group ^
   	    --replication-group-id my-repl-group ^
   	    --cache-node-type cache.m3.xlarge ^
   	    --cache-parameter-group-name redis32-m3-2xl \
   	    --apply-immediately
   ```

   此命令的輸出看起來會類似這個 (JSON 格式)。

   ```
   {
   	"ReplicationGroup": {
   		"Status": "available",
   		"Description": "Some description",
   		"NodeGroups": [{
   			"Status": "available",
   			"NodeGroupMembers": [{
   					"CurrentRole": "primary",
   					"PreferredAvailabilityZone": "us-west-2b",
   					"CacheNodeId": "0001",
   					"ReadEndpoint": {
   						"Port": 6379,
   						"Address": "my-repl-group-001.8fdx4s.0001.usw2.cache.amazonaws.com"
   					},
   					"CacheClusterId": "my-repl-group-001"
   				},
   				{
   					"CurrentRole": "replica",
   					"PreferredAvailabilityZone": "us-west-2c",
   					"CacheNodeId": "0001",
   					"ReadEndpoint": {
   						"Port": 6379,
   						"Address": "my-repl-group-002.8fdx4s.0001.usw2.cache.amazonaws.com"
   					},
   					"CacheClusterId": "my-repl-group-002"
   				}
   			],
   			"NodeGroupId": "0001",
   			"PrimaryEndpoint": {
   				"Port": 6379,
   				"Address": "my-repl-group.8fdx4s.ng.0001.usw2.cache.amazonaws.com"
   			}
   		}],
   		"ReplicationGroupId": "my-repl-group",
   		"SnapshotRetentionLimit": 1,
   		"AutomaticFailover": "disabled",
   		"SnapshotWindow": "12:00-13:00",
   		"SnapshottingClusterId": "my-repl-group-002",
   		"MemberClusters": [
   			"my-repl-group-001",
   			"my-repl-group-002"
   		],
   		"PendingModifiedValues": {}
   	}
   }
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)」。

1. 如果您使用 `--apply-immediately` 參數，請使用 `describe-replication-group`命令搭配下列參數來AWS CLI監控複寫群組的狀態。如果狀態仍是*修改中*，更新 DNS 項目時，在 5.0.6 和更新版本上執行的節點，停機時間可能不到 1 秒，而在較舊版本上，主節點的讀取和寫入則會短暫中斷。
   + `--replication-group-id` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache describe-replication-groups \
   	    --replication-group-id my-replication-group
   ```

   針對 Windows：

   ```
   aws elasticache describe-replication-groups ^
   	    --replication-group-id my-replication-group
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的 [describe-replication-groups](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-replication-groups.html)。

### 向上擴展 Valkey 或 Redis OSS 複寫群組 (ElastiCache API)
<a name="Scaling.RedisReplGrps.ScaleUp.API"></a>

下列程序會使用 ElastiCache API，將複寫群組從其目前的節點類型擴展為較大的新節點類型。對於 Valkey 7.2 及更高版本或 Redis OSS 5.0.5 及更高版本，您可以在叢集繼續保持連線並提供傳入請求時擴展啟用自動容錯移轉的叢集。在 Redis OSS 4.0.10 及更低版本上，您可能會注意到 DNS 項目更新時，先前節點的讀取和寫入短暫中斷。

擴展到較大的節點類型所需的時間會有所不同，具體取決於您的節點類型和目前叢集中的資料量。

**擴展 Valkey 或 Redis OSS 複寫群組 (ElastiCache API)**

1. 使用 ElastiCache API `ListAllowedNodeTypeModifications` 動作搭配下列參數，判斷您可以擴充規模的節點類型。
   + `ReplicationGroupId` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ListAllowedNodeTypeModifications
   	   &ReplicationGroupId=MyReplGroup
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ListAllowedNodeTypeModifications](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ListAllowedNodeTypeModifications.html)」。

1. 使用 `ModifyReplicationGroup` ElastiCache API 動作搭配下列參數，將您目前的複寫群組擴充規模為新的節點類型。
   + `ReplicationGroupId` - 複寫群組的名稱。
   + `CacheNodeType` – 此複寫群組中新的、較大的叢集節點類型。此值必須是 `ListAllowedNodeTypeModifications`動作在第一步中傳回的其中一個執行個體類型。
   + `CacheParameterGroupName` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `ApplyImmediately` - 設定為 `true` 會立即套用擴充規模程序。若要將向上擴展程序延期至下一個維護時段，請使用 `ApplyImmediately``=false`。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ModifyReplicationGroup
   	   &ApplyImmediately=true
   	   &CacheNodeType=cache.m3.2xlarge
   	   &CacheParameterGroupName=redis32-m3-2xl
   	   &ReplicationGroupId=myReplGroup
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20141201T220302Z
   	   &Version=2014-12-01
   	   &X-Amz-Algorithm=&AWS;4-HMAC-SHA256
   	   &X-Amz-Date=20141201T220302Z
   	   &X-Amz-SignedHeaders=Host
   	   &X-Amz-Expires=20141201T220302Z
   	   &X-Amz-Credential=<credential>
   	   &X-Amz-Signature=<signature>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)」。

1. 如果您使用的是 `ApplyImmediately``=true`，請使用 ElastiCache API `DescribeReplicationGroups` 動作搭配下列參數，監控複寫群組的狀態。當狀態從 *modifying (修改中)* 變更為 *available (可用)*，您即可以開始寫入新的、已向上擴展的複寫群組。
   + `ReplicationGroupId` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=DescribeReplicationGroups
   	   &ReplicationGroupId=MyReplGroup
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html)」。

## 使用複本向下擴展 Valkey 或 Redis OSS 叢集
<a name="Scaling.RedisReplGrps.ScaleDown"></a>

下列各節會逐步解說如何將具有複本節點的 Valkey 或 Redis OSS （停用叢集模式） 叢集縮減為較小的節點類型。請務必確保新的，較小的節點類型足夠大而可以容納所有資料和成本。如需詳細資訊，請參閱[確保您有足夠的記憶體來建立 Valkey 或 Redis OSS 快照](BestPractices.BGSAVE.md)。

**注意**  
針對執行 r6gd 節點類型的叢集，您只能擴展到 r6gd 節點系列中的節點大小。

**重要**  
如果您的參數群組使用 `reserved-memory`為 Valkey 或 Redis OSS 額外負荷預留記憶體，在開始擴展之前，請確定您有一個自訂參數群組，可為您的新節點類型保留正確的記憶體數量。或者，您可以修改自訂參數群組，使得它會對您的新叢集使用 `reserved-memory-percent` 並使用該參數群組。  
如果您使用 `reserved-memory-percent`，則不需執行此動作。  
如需詳細資訊，請參閱[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。

**Topics**

### 使用複本向下擴展 Valkey 或 Redis OSS 叢集 （主控台）
<a name="Scaling.RedisReplGrps.ScaleDown.CON"></a>

下列程序會使用 ElastiCache 主控台，將具有複本節點的 Valkey 或 Redis OSS 叢集擴展為較小的節點類型。

**使用複本節點縮減 Valkey 或 Redis OSS 叢集 （主控台）**

1. 確保該較小的節點類型對您的資料和成本而言已足夠。

1. 如果您的參數群組使用 `reserved-memory` 為 Valkey 或 Redis OSS 額外負荷預留記憶體，請確定您有自訂參數群組來為新節點類型預留正確的記憶體數量。

   或者，您可以將自訂參數群組修改為使用 `reserved-memory-percent`。如需詳細資訊，請參閱[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。

1. 登入AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 從叢集的清單，選擇您要縮減規模的叢集。此叢集必須執行 Valkey 或 Redis OSS 引擎，而非叢集的 Valkey 或 Redis OSS 引擎。

1. 選擇 **Modify** (修改)。

1. 在 **Modify Cluster (修改叢集)** 精靈中：

   1. 從 **Node type (節點類型)** 清單，選擇您要縮減規模的節點類型。

   1. 如果您使用 `reserved-memory` 來管理記憶體，請從 **Parameter Group (參數群組)** 清單中，選擇會為新節點類型保留正確記憶體數量的自訂參數群組。

1. 如果您要立即執行縮減規模程序，請選擇 **Apply immediately (立即套用)** 核取方塊。如果將 **Apply immediately (立即套用)** 核取方塊保留未選擇，在此叢集的下一個維護時段期間，會執行縮減規模程序。

1. 選擇 **Modify** (修改)。

1. 當叢集的狀態從 *modifying (修改中)* 變更為 *available (可用)*，您的叢集即已擴展為新節點類型。不需要在應用程式中更新端點。

### 向下擴展 Valkey 或 Redis OSS 複寫群組 (AWS CLI)
<a name="Scaling.RedisReplGrps.ScaleUp.CLI"></a>

下列程序會使用AWS CLI，將複寫群組從其目前的節點類型擴展至新的、較的節點類型。在此過程中，ElastiCache 會更新 DNS 項目，使其指向新節點。因此，您不需在應用程式中更新端點。對於上述 Valkey 7.2 或 Redis OSS 5.0.5 及更高版本，您可以在叢集繼續保持連線並提供傳入請求時擴展啟用自動容錯移轉的叢集。在 4.0.10 和以下版本中，您會注意到，DNS 項目更新的同時，前幾版來自主節點的讀取和寫入發生短暫中斷。

不過，來自僅供讀取複本叢集的讀取不會中斷。

縮減為較小的節點類型所需的時間會有所不同，具體取決於您的節點類型和目前叢集中的資料量。

**縮減 Valkey 或 Redis OSS 複寫群組 (AWS CLI)**

1. 使用以下參數執行 `list-allowed-node-type-modifications`命令，AWS CLI決定您可以縮減規模的節點類型。
   + `--replication-group-id` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache list-allowed-node-type-modifications \
   	    --replication-group-id my-repl-group
   ```

   針對 Windows：

   ```
   aws elasticache list-allowed-node-type-modifications ^
   	    --replication-group-id my-repl-group
   ```

   此操作的輸出看起來會類似這個 (JSON 格式)。

   ```
   {
   	    "ScaleDownModifications": [
   	        "cache.m3.2xlarge", 
   	        "cache.m3.large", 
   	        "cache.m3.xlarge", 
   	        "cache.m4.10xlarge", 
   	        "cache.m4.2xlarge", 
   	        "cache.m4.4xlarge", 
   	        "cache.m4.large", 
   	        "cache.m4.xlarge", 
   	        "cache.r3.2xlarge", 
   	        "cache.r3.4xlarge", 
   	        "cache.r3.8xlarge", 
   	        "cache.r3.large", 
   	        "cache.r3.xlarge"
   	    ]
   	}
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[list-allowed-node-type-modifications](https://docs.aws.amazon.com/cli/latest/reference/elasticache/list-allowed-node-type-modifications.html)」。

1. 使用AWS CLI`modify-replication-group`命令搭配下列參數，將您目前的複寫群組擴展到新的節點類型。
   + `--replication-group-id` - 複寫群組的名稱。
   + `--cache-node-type` – 此複寫群組中叢集的新節點類型較小。此值必須是上一個步驟中 `list-allowed-node-type-modifications`命令傳回的其中一個執行個體類型。
   + `--cache-parameter-group-name` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `--apply-immediately` - 會造成立即套用擴充規模程序。若要將向上擴展操作延期至下一個維護時段，請使用 `--no-apply-immediately`。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache modify-replication-group \
   	    --replication-group-id my-repl-group \
   	    --cache-node-type cache.t2.small  \
   	    --cache-parameter-group-name redis32-m3-2xl \
   	    --apply-immediately
   ```

   針對 Windows：

   ```
   aws elasticache modify-replication-group ^
   	    --replication-group-id my-repl-group ^
   	    --cache-node-type cache.t2.small  ^
   	    --cache-parameter-group-name redis32-m3-2xl \
   	    --apply-immediately
   ```

   此命令的輸出看起來會類似這個 (JSON 格式)。

   ```
   {"ReplicationGroup": {
   	        "Status": "available", 
   	        "Description": "Some description", 
   	        "NodeGroups": [
   	            {
   	                "Status": "available", 
   	                "NodeGroupMembers": [
   	                    {
   	                        "CurrentRole": "primary", 
   	                        "PreferredAvailabilityZone": "us-west-2b", 
   	                        "CacheNodeId": "0001", 
   	                        "ReadEndpoint": {
   	                            "Port": 6379, 
   	                            "Address": "my-repl-group-001.8fdx4s.0001.usw2.cache.amazonaws.com"
   	                        }, 
   	                        "CacheClusterId": "my-repl-group-001"
   	                    }, 
   	                    {
   	                        "CurrentRole": "replica", 
   	                        "PreferredAvailabilityZone": "us-west-2c", 
   	                        "CacheNodeId": "0001", 
   	                        "ReadEndpoint": {
   	                            "Port": 6379, 
   	                            "Address": "my-repl-group-002.8fdx4s.0001.usw2.cache.amazonaws.com"
   	                        }, 
   	                        "CacheClusterId": "my-repl-group-002"
   	                    }
   	                ], 
   	                "NodeGroupId": "0001", 
   	                "PrimaryEndpoint": {
   	                    "Port": 6379, 
   	                    "Address": "my-repl-group.8fdx4s.ng.0001.usw2.cache.amazonaws.com"
   	                }
   	            }
   	        ], 
   	        "ReplicationGroupId": "my-repl-group", 
   	        "SnapshotRetentionLimit": 1, 
   	        "AutomaticFailover": "disabled", 
   	        "SnapshotWindow": "12:00-13:00", 
   	        "SnapshottingClusterId": "my-repl-group-002", 
   	        "MemberClusters": [
   	            "my-repl-group-001", 
   	            "my-repl-group-002", 
   	        ], 
   	        "PendingModifiedValues": {}
   	    }
   	}
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)」。

1. 如果您使用 `--apply-immediately` 參數，請使用 `describe-replication-group`命令搭配下列參數來AWS CLI監控複寫群組的狀態。當狀態從 *modifying (修改中)* 變更為 *available (可用)*，您即可以開始寫入新的、已向下擴展的複寫群組。
   + `--replication-group-id` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache describe-replication-group \
   	    --replication-group-id my-replication-group
   ```

   針對 Windows：

   ```
   aws elasticache describe-replication-groups ^
   	    --replication-group-id my-replication-group
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的 [describe-replication-groups](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-replication-groups.html)。

### 向下擴展 Valkey 或 Redis OSS 複寫群組 (ElastiCache API)
<a name="Scaling.RedisReplGrps.ScaleDown.API"></a>

下列程序會使用 ElastiCache API，將複寫群組從其目前的節點類型規模縮減為較小的新節點類型。在此過程中，ElastiCache 會更新 DNS 項目，使其指向新節點。因此，您不需在應用程式中更新端點。對於 Valkey 7.2 及更高版本或 Redis OSS 5.0.5 及更高版本，您可以在叢集繼續保持連線並提供傳入請求時擴展啟用自動容錯移轉的叢集。在 Redis OSS 4.0.10 版及更新版本中，您可能會注意到 DNS 項目更新時，先前節點的讀取和寫入發生短暫中斷。不過，來自僅供讀取複本叢集的讀取不會中斷。

縮減為較小的節點類型所需的時間會有所不同，具體取決於您的節點類型和目前叢集中的資料量。

**縮減 Valkey 或 Redis OSS 複寫群組 (ElastiCache API)**

1. 使用 ElastiCache API `ListAllowedNodeTypeModifications` 動作搭配下列參數，判斷您可以縮減規模的節點類型。
   + `ReplicationGroupId` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ListAllowedNodeTypeModifications
   	   &ReplicationGroupId=MyReplGroup
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ListAllowedNodeTypeModifications](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ListAllowedNodeTypeModifications.html)」。

1. 使用 `ModifyReplicationGroup` ElastiCache API 動作搭配下列參數，將您目前的複寫群組擴充規模為新的節點類型。
   + `ReplicationGroupId` - 複寫群組的名稱。
   + `CacheNodeType` – 此複寫群組中叢集的新節點類型較小。此值必須是上一個步驟中 `ListAllowedNodeTypeModifications`動作傳回的其中一個執行個體類型。
   + `CacheParameterGroupName` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `ApplyImmediately` - 設定為 `true` 會立即套用擴充規模程序。若要將向下擴展程序延期至下一個維護時段，請使用 `ApplyImmediately``=false`。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ModifyReplicationGroup
   	   &ApplyImmediately=true
   	   &CacheNodeType=cache.m3.2xlarge
   	   &CacheParameterGroupName=redis32-m3-2xl
   	   &ReplicationGroupId=myReplGroup
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20141201T220302Z
   	   &Version=2014-12-01
   	   &X-Amz-Algorithm=&AWS;4-HMAC-SHA256
   	   &X-Amz-Date=20141201T220302Z
   	   &X-Amz-SignedHeaders=Host
   	   &X-Amz-Expires=20141201T220302Z
   	   &X-Amz-Credential=<credential>
   	   &X-Amz-Signature=<signature>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)」。

1. 如果您使用的是 `ApplyImmediately``=true`，請使用 ElastiCache API `DescribeReplicationGroups` 動作搭配下列參數，監控複寫群組的狀態。當狀態從 *modifying (修改中)* 變更為 *available (可用)*，您即可以開始寫入新的、已向下擴展的複寫群組。
   + `ReplicationGroupId` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=DescribeReplicationGroups
   	   &ReplicationGroupId=MyReplGroup
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html)」。

## 增加讀取容量
<a name="Scaling.RedisReplGrps.ScaleOut"></a>

若要增加讀取容量，請將僅供讀取複本 （最多五個） 新增至您的 Valkey 或 Redis OSS 複寫群組。

您可以使用 ElastiCache 主控台AWS CLI、 或 ElastiCache API 來擴展 Valkey 或 Redis OSS 叢集的讀取容量。如需詳細資訊，請參閱[新增 Valkey 或 Redis OSS 的僅供讀取複本 （停用叢集模式）](Replication.AddReadReplica.md)。

## 減少讀取容量
<a name="Scaling.RedisReplGrps.ScaleIn"></a>

若要降低讀取容量，請從具有複本的 Valkey 或 Redis OSS 叢集中刪除一或多個僅供讀取複本 （在 API/CLI 中稱為*複寫群組*)。如果叢集為已啟用自動容錯移轉的多個可用區，若未先停用多個可用區，則無法刪除最後一個僅供讀取複本。如需詳細資訊，請參閱[修改複寫群組](Replication.Modify.md)。

如需詳細資訊，請參閱[刪除 Valkey 或 Redis OSS 的僅供讀取複本 （停用叢集模式）](Replication.RemoveReadReplica.md)。

# 擴展 Valkey 或 Redis OSS （啟用叢集模式） 叢集
<a name="scaling-redis-cluster-mode-enabled"></a>

隨著叢集的需求變更，您可以變更 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的碎片數量，以決定改善效能或降低成本。我們建議使用線上水平擴展來執行此動作，因為它可允許叢集在擴展程序期間繼續提供請求的服務。

您用來決定重新擴展叢集的可能條件包括下列：
+ **記憶體壓力：**

  如果叢集中的節點遭受記憶體壓力，您可以決定向外擴展，使得您有更多資源能更妥善地存放資料和提供請求的服務。

  您可以監控下列指標來判斷節點是否受到記憶體壓力：*FreeableMemory*、*SwapUsage* 和 *BytesUsedForCache*。
+ **CPU 或網路瓶頸：**

  如果延遲/傳輸量問題正困擾著您的叢集，您可能需要向外擴展來解決問題。

  您可以監控延遲和傳輸量層級，方法是監控下列指標：*CPUUtilization*、*NetworkBytesIn*、*NetworkBytesOut*、*CurrConnections* 和 *NewConnections*。
+ **您的叢集過度擴展：**

  對叢集的目前需求使得向內擴展不會傷害效能和減少成本。

  您可以監控叢集的使用情況，以判斷是否可以使用下列指標安全地縮減規模：*FreeableMemory*、*SwapUsage*、*BytesUsedForCache*、*CPUUtilization*、*NetworkBytesIn*、*NetworkBytesOut*、*CurrConnections* 和 *NewConnections*。

**擴展的效能影響**  
使用離線程序擴展時，您的叢集將有一大部分程序會離線，因此無法提供請求的服務。使用線上方法擴展時，因為擴展是運算密集的操作，效能會有一些下降，然後，您的叢集會繼續在整個擴展操作中提供請求的服務。您遭遇到的下降程度取決於您的一般 CPU 使用率和您的資料。

有兩種方式可以擴展您的 Valkey 或 Redis OSS （啟用叢集模式） 叢集；水平和垂直擴展。
+ 水平擴展可讓您透過新增或移除節點群組 (碎片)，來變更複寫群組中節點群組 (碎片) 的數量。線上重新分片程序允許向內/向外擴展，同時間叢集仍可繼續服務傳入請求。

  在您的新叢集中以與在舊叢集中不同的方式設定槽。僅限離線方法。
+ 垂直擴展 - 變更節點類型以調整叢集大小。線上垂直擴展允許向上/向下擴展，同時間叢集仍可繼續服務傳入請求。

如果您要透過向內擴展或向下擴展來減少叢集的大小和記憶體容量，請確保新組態有足夠的記憶體可供您的資料和 Valkey 或 Redis OSS 額外負荷使用。

如需詳細資訊，請參閱[選擇您的節點大小](CacheNodes.SelectSize.md)。

**Contents**
+ [Valkey 或 Redis OSS 的離線重新分片 （啟用叢集模式）](#redis-cluster-resharding-offline)
+ [Valkey 或 Redis OSS 的線上重新分片 （啟用叢集模式）](#redis-cluster-resharding-online)
  + [使用線上重新分片功能新增碎片](#redis-cluster-resharding-online-add)
  + [使用線上重新分片移除碎片](#redis-cluster-resharding-online-remove)
    + [移除碎片 (主控台)](#redis-cluster-resharding-online-remove-console)
    + [移除碎片 (AWS CLI)](#redis-cluster-resharding-online-remove-cli)
    + [移除碎片 (ElastiCache API)](#redis-cluster-resharding-online-remove-api)
  + [線上碎片重新平衡](#redis-cluster-resharding-online-rebalance)
    + [線上碎片重新平衡 (主控台)](#redis-cluster-resharding-online-rebalance-console)
    + [線上碎片重新平衡 (AWS CLI)](#redis-cluster-resharding-online-rebalance-cli)
    + [線上碎片重新平衡 (ElastiCache API)](#redis-cluster-resharding-online-rebalance-api)
+ [透過修改節點類型來進行線上垂直擴展](redis-cluster-vertical-scaling.md)
  + [線上擴充規模](redis-cluster-vertical-scaling.md#redis-cluster-vertical-scaling-scaling-up)
    + [向上擴展 Valkey 或 Redis OSS 叢集 （主控台）](redis-cluster-vertical-scaling.md#redis-cluster-vertical-scaling-console)
    + [向上擴展 Valkey 或 Redis OSS 叢集 (AWS CLI)](redis-cluster-vertical-scaling.md#Scaling.RedisStandalone.ScaleUp.CLI)
    + [向上擴展 Valkey 或 Redis OSS 叢集 (ElastiCache API)](redis-cluster-vertical-scaling.md#VeticalScaling.RedisReplGrps.ScaleUp.API)
  + [線上縮減規模](redis-cluster-vertical-scaling.md#redis-cluster-vertical-scaling-scaling-down)
    + [向下擴展 Valkey 或 Redis OSS 叢集 （主控台）](redis-cluster-vertical-scaling.md#redis-cluster-vertical-scaling-down-console)
    + [向下擴展 Valkey 或 Redis OSS 叢集 (AWS CLI)](redis-cluster-vertical-scaling.md#Scaling.RedisStandalone.ScaleDown.CLI)
    + [向下擴展 Valkey 或 Redis OSS 叢集 (ElastiCache API)](redis-cluster-vertical-scaling.md#Scaling.Vertical.ScaleDown.API)

## Valkey 或 Redis OSS 的離線重新分片 （啟用叢集模式）
<a name="redis-cluster-resharding-offline"></a>

您從離線碎片重新組態可獲得的主要優點是，您可以做得更多而不只是從複寫群組新增或移除碎片。當您離線重新碎片並重新平衡時，除了變更複寫群組中的碎片數量之外，您還可以執行下列動作：

**注意**  
啟用資料分層的 Valkey 或 Redis OSS 叢集不支援離線重新分片。如需詳細資訊，請參閱[ElastiCache 中的資料分層](data-tiering.md)。
+ 變更您複寫群組的節點類型。
+ 指定複寫群組中每個節點的可用區域。
+ 升級至較新的引擎版本。
+ 獨立指定每個碎片中複本節點的數量。
+ 指定每個碎片的金鑰空間。

離線碎片重新組態的主要缺點是，您的叢集會離線開始進行程序的還原部分，並繼續直到您在應用程式中更新端點為止。叢集離線的時間長度會因叢集中資料量而不同。

**重新設定碎片 Valkey 或 Redis OSS （啟用叢集模式） 叢集離線**

1. 建立現有 Valkey 或 Redis OSS 叢集的手動備份。如需詳細資訊，請參閱[取得手動備份](backups-manual.md)。

1. 透過從備份還原來建立新叢集。如需詳細資訊，請參閱[從備份還原到新的快取](backups-restoring.md)。

1. 在應用程式中，將端點更新為新叢集的端點。如需詳細資訊，請參閱[在 ElastiCache 中尋找連線端點](Endpoints.md)。

## Valkey 或 Redis OSS 的線上重新分片 （啟用叢集模式）
<a name="redis-cluster-resharding-online"></a>

透過使用線上重新分片和碎片重新平衡搭配 ElastiCache Valkey 7.2 或更新版本，或 Redis OSS 3.2.10 版或更新版本，您可以動態擴展您的 Valkey 或 Redis OSS （啟用叢集模式） 叢集，無需停機。此方法表示叢集可以繼續提供請求的服務 (甚至是在擴展或重新平衡進行中時)。

您可以執行下列動作：
+ **橫向擴展** – 將碎片 （節點群組） 新增至您的 Valkey 或 Redis OSS （啟用叢集模式） 叢集 （複寫群組），以增加讀取和寫入容量。

  如果您將一或多個碎片新增至複寫群組，每個新碎片中的節點數量與現有碎片最小節點的數量相同。
+ **向內擴展** – 從 Valkey 或 Redis OSS （啟用叢集模式） 叢集移除碎片，以降低讀取和寫入容量，進而降低成本。
+ **重新平衡** – 在 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的碎片之間移動鍵空間，以便盡可能在碎片之間平均分佈。

您無法執行下列：
+ **獨立設定碎片：**

  您不可以獨立為碎片指定金鑰空間。若要執行此動作，您必須使用離線程序。

目前，下列限制適用於 ElastiCache 線上重新分片和重新平衡：
+ 這些程序需要 Valkey 7.2 及更新版本，或 Redis OSS 3.2.10 或更新版本。如需升級引擎版本的詳細資訊，請參閱[ElastiCache 的版本管理](VersionManagement.md)。
+ 槽或金鑰空間和大型項目的限制為：

  如果碎片中的任何金鑰包含大型項目，在向外擴展或重新平衡時，不會將該金鑰遷移至新碎片。此功能可能造成不平衡的碎片。

  如果碎片中的任何金鑰包含大型項目 (序列化後項目大於 256 MB)，在向內擴展時，不會刪除該碎片。此功能可能造成一些碎片不會遭到刪除。
+ 向外擴展時，任何新碎片中節點的數量會等於現有碎片中最小節點的數量。
+ 向外擴展時，所有現有碎片共有的任何標籤都會複製到新碎片。
+ 橫向擴展 Global Data Store 叢集時，ElastiCache 不會自動將函數從其中一個現有節點複製到新節點。我們建議在橫向擴展叢集之後，將函數載入新的碎片，如此一來每個碎片都會具有相同函數。

**注意**  
在 ElastiCache for Valkey 7.2 及更高版本，以及 ElastiCache for Redis OSS 第 7 版及更高版本中：擴展叢集時，ElastiCache 會自動將載入其中一個現有節點 （隨機選取） 的函數複寫至新節點。如果您的應用程式使用 [函數](https://valkey.io/topics/functions-intro/)，我們建議您在向外擴展之前將所有函數載入所有碎片，這樣您的叢集就不會在不同的碎片上產生不同的函數定義。

如需詳細資訊，請參閱[線上叢集大小調整](best-practices-online-resharding.md)。

您可以使用AWS CLI、 和 ElastiCache API 水平擴展或重新平衡您的 Valkey 或 Redis OSS （啟用叢集模式）AWS 管理主控台叢集。

### 使用線上重新分片功能新增碎片
<a name="redis-cluster-resharding-online-add"></a>

您可以使用 或 ElastiCache API AWS 管理主控台AWS CLI，將碎片新增至您的 Valkey 或 Redis OSS （啟用叢集模式） 叢集。當您將碎片新增至 Valkey 或 Redis OSS （啟用叢集模式） 叢集時，現有碎片上的任何標籤都會複製到新的碎片。

**Topics**

#### 新增碎片 (主控台)
<a name="redis-cluster-resharding-online-add-console"></a>

您可以使用AWS 管理主控台將一或多個碎片新增至您的 Valkey 或 Redis OSS （啟用叢集模式） 叢集。下列程序描述該程序。

**將碎片新增至您的 Valkey 或 Redis OSS （啟用叢集模式） 叢集**

1. 前往 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 從導覽窗格中，選擇 **Valkey 叢集**或 **Redis OSS 叢集**。

1. 找到並選擇您要新增碎片之 Valkey 或 Redis OSS （啟用叢集模式） 叢集的名稱，而不是叢集名稱左側的方塊。
**提示**  
Valkey 或 Redis OSS （啟用叢集模式） 在**模式**欄中顯示**叢集化 Valkey** 或**叢集化 Redis OSS** 

1. 選擇 **Add shard (新增碎片)**。

   1. 針對 **Number of shards to be added (要新增的碎片數)**，選擇您要新增至此叢集的碎片數量。

   1. 針對 **Availability zone(s) (可用區域)**，選擇 **No preference (無偏好設定)** 或 **Specify availability zones (指定可用區域)** 中的一個。

   1. 如果您選擇 **Specify availability zones (指定可用區域)**，針對每個碎片中的每個節點，從可用區域的清單選取節點的可用區域。

   1. 選擇**新增**。

#### 新增碎片 (AWS CLI)
<a name="redis-cluster-resharding-online-add-cli"></a>

下列程序說明如何使用 新增碎片，在 Valkey 或 Redis OSS （啟用叢集模式） 叢集中重新設定碎片AWS CLI。

使用下列參數搭配 `modify-replication-group-shard-configuration`。

**Parameters**
+ `--apply-immediately` - 必要項目。指定碎片重新組態操作要立即開始。
+ `--replication-group-id` - 必要項目。指定碎片重新組態操作要執行所在的複寫群組 (叢集)。
+ `--node-group-count` - 必要項目。指定操作完成時要存在的碎片數量 (節點群組)。新增碎片時，`--node-group-count` 的值必須大於目前的碎片數量。

  您可以選擇性地使用 `--resharding-configuration` 為複寫群組中的每個節點指定可用區域。
+ `--resharding-configuration` - 選用。複寫群組的每個碎片中每個節點偏好的可用區域清單。只有在 `--node-group-count` 的值大於目前的碎片數量時，才使用此參數。新增碎片時如果省略此參數，Amazon ElastiCache 會為新節點選取可用區域。

下列範例會在名為 的 Valkey 或 Redis OSS （啟用叢集模式） 叢集中，透過四個碎片重新設定金鑰空間`my-cluster`。此範例也會指定每個碎片中每個節點的可用區域。該操作會立即開始。

**Example - 新增碎片**  
針對 Linux、macOS 或 Unix：  

```
aws elasticache modify-replication-group-shard-configuration \
    --replication-group-id my-cluster \
    --node-group-count 4 \
    --resharding-configuration \
        "PreferredAvailabilityZones=us-east-2a,us-east-2c" \
        "PreferredAvailabilityZones=us-east-2b,us-east-2a" \
        "PreferredAvailabilityZones=us-east-2c,us-east-2d" \
        "PreferredAvailabilityZones=us-east-2d,us-east-2c" \
    --apply-immediately
```
針對 Windows：  

```
aws elasticache modify-replication-group-shard-configuration ^
    --replication-group-id my-cluster ^
    --node-group-count 4 ^
    --resharding-configuration ^
        "PreferredAvailabilityZones=us-east-2a,us-east-2c" ^
        "PreferredAvailabilityZones=us-east-2b,us-east-2a" ^
        "PreferredAvailabilityZones=us-east-2c,us-east-2d" ^
        "PreferredAvailabilityZones=us-east-2d,us-east-2c" ^
    --apply-immediately
```

如需詳細資訊，請參閱AWS CLI文件中的 [modify-replication-group-shard-configuration](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group-shard-configuration.html)。

#### 新增碎片 (ElastiCache API)
<a name="redis-cluster-resharding-online-add-api"></a>

您可以使用 ElastiCache API，透過 `ModifyReplicationGroupShardConfiguration`操作，在線上重新設定 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的碎片。

使用下列參數搭配 `ModifyReplicationGroupShardConfiguration`。

**Parameters**
+ `ApplyImmediately=true` - 必要項目。指定碎片重新組態操作要立即開始。
+ `ReplicationGroupId` - 必要項目。指定碎片重新組態操作要執行所在的複寫群組 (叢集)。
+ `NodeGroupCount` - 必要項目。指定操作完成時要存在的碎片數量 (節點群組)。新增碎片時，`NodeGroupCount` 的值必須大於目前的碎片數量。

  您可以選擇性地使用 `ReshardingConfiguration` 為複寫群組中的每個節點指定可用區域。
+ `ReshardingConfiguration` - 選用。複寫群組的每個碎片中每個節點偏好的可用區域清單。只有在 `NodeGroupCount` 的值大於目前的碎片數量時，才使用此參數。新增碎片時如果省略此參數，Amazon ElastiCache 會為新節點選取可用區域。

下列程序說明如何使用 ElastiCache API 新增碎片，在 Valkey 或 Redis OSS （啟用叢集模式） 叢集中重新設定碎片。

**Example - 新增碎片**  
下列範例會將節點群組新增至 Valkey 或 Redis OSS （啟用叢集模式） 叢集 `my-cluster`，因此操作完成時總共有四個節點群組。此範例也會指定每個碎片中每個節點的可用區域。該操作會立即開始。  

```
https://elasticache.us-east-2.amazonaws.com/
    ?Action=ModifyReplicationGroupShardConfiguration
    &ApplyImmediately=true
    &NodeGroupCount=4
    &ReplicationGroupId=my-cluster
    &ReshardingConfiguration.ReshardingConfiguration.1.PreferredAvailabilityZones.AvailabilityZone.1=us-east-2a 
    &ReshardingConfiguration.ReshardingConfiguration.1.PreferredAvailabilityZones.AvailabilityZone.2=us-east-2c 
    &ReshardingConfiguration.ReshardingConfiguration.2.PreferredAvailabilityZones.AvailabilityZone.1=us-east-2b 
    &ReshardingConfiguration.ReshardingConfiguration.2.PreferredAvailabilityZones.AvailabilityZone.2=us-east-2a 
    &ReshardingConfiguration.ReshardingConfiguration.3.PreferredAvailabilityZones.AvailabilityZone.1=us-east-2c 
    &ReshardingConfiguration.ReshardingConfiguration.3.PreferredAvailabilityZones.AvailabilityZone.2=us-east-2d 
    &ReshardingConfiguration.ReshardingConfiguration.4.PreferredAvailabilityZones.AvailabilityZone.1=us-east-2d 
    &ReshardingConfiguration.ReshardingConfiguration.4.PreferredAvailabilityZones.AvailabilityZone.2=us-east-2c 
    &Version=2015-02-02
    &SignatureVersion=4
    &SignatureMethod=HmacSHA256
    &Timestamp=20171002T192317Z
    &X-Amz-Credential=<credential>
```

如需詳細資訊，請參閱「ElastiCache API 參考」中的 [ModifyReplicationGroupShardConfiguration](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroupShardConfiguration.html)。

### 使用線上重新分片移除碎片
<a name="redis-cluster-resharding-online-remove"></a>

您可以使用 或 ElastiCache API AWS 管理主控台AWS CLI，從 Valkey 或 Redis OSS （啟用叢集模式） 叢集移除碎片。

**Topics**
+ [移除碎片 (主控台)](#redis-cluster-resharding-online-remove-console)
+ [移除碎片 (AWS CLI)](#redis-cluster-resharding-online-remove-cli)
+ [移除碎片 (ElastiCache API)](#redis-cluster-resharding-online-remove-api)

#### 移除碎片 (主控台)
<a name="redis-cluster-resharding-online-remove-console"></a>

下列程序說明如何使用 移除碎片，在 Valkey 或 Redis OSS （啟用叢集模式） 叢集中重新設定碎片AWS 管理主控台。

從複寫群組移除節點群組 (碎片) 之前，ElastiCache 會確定所有資料可納入其餘碎片中。如果資料可納入，則會按請求從複寫群組刪除指定的碎片。如果資料無法納入其他的節點群組，流程會中止，複寫群組的節點群組設定會與請求之前相同。

您可以使用 從 Valkey 或 Redis OSS （啟用叢集模式） 叢集AWS 管理主控台中移除一或多個碎片。您無法移除複寫群組中的所有碎片。而是必須刪除複寫群組。如需詳細資訊，請參閱[刪除複寫群組](Replication.DeletingRepGroup.md)。下列程序描述用於刪除一或多個碎片的程序。

**從 Valkey 或 Redis OSS （啟用叢集模式） 叢集移除碎片**

1. 前往 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 從導覽窗格中，選擇 **Valkey 叢集**或 **Redis OSS 叢集**。

1. 找到並選擇您要從中移除碎片的 Valkey 或 Redis OSS （啟用叢集模式） 叢集的名稱，而不是叢集名稱左側的方塊。
**提示**  
**在碎片**欄中，Valkey 或 Redis OSS （啟用叢集模式） 叢集的值為 1 或更高。

1. 從碎片的清單，選擇您要刪除的每個碎片名稱左側的方塊。

1. 選擇 **Delete shard (刪除碎片)**。

#### 移除碎片 (AWS CLI)
<a name="redis-cluster-resharding-online-remove-cli"></a>

下列程序說明如何使用 移除碎片，在 Valkey 或 Redis OSS （啟用叢集模式） 叢集中重新設定碎片AWS CLI。

**重要**  
從複寫群組移除節點群組 (碎片) 之前，ElastiCache 會確定所有資料可納入其餘碎片中。如果資料可納入，則會按請求從複寫群組刪除指定的碎片 (`--node-groups-to-remove`)，而其金鑰空間會映射至其餘的碎片。如果資料無法納入其他的節點群組，流程會中止，複寫群組的節點群組設定會與請求之前相同。

您可以使用 從 Valkey 或 Redis OSS （啟用叢集模式） 叢集AWS CLI中移除一或多個碎片。您無法移除複寫群組中的所有碎片。而是必須刪除複寫群組。如需詳細資訊，請參閱[刪除複寫群組](Replication.DeletingRepGroup.md)。

使用下列參數搭配 `modify-replication-group-shard-configuration`。

**Parameters**
+ `--apply-immediately` - 必要項目。指定碎片重新組態操作要立即開始。
+ `--replication-group-id` - 必要項目。指定碎片重新組態操作要執行所在的複寫群組 (叢集)。
+ `--node-group-count` - 必要項目。指定操作完成時要存在的碎片數量 (節點群組)。移除碎片時，`--node-group-count` 的值必須小於目前的碎片數量。

  
+ `--node-groups-to-remove` - 當 `--node-group-count` 小於目前的數量節點群組 (碎片) 時為必要項目。要從複寫群組移除之碎片 (節點群組) 識別符的清單。

下列程序描述用於刪除一或多個碎片的程序。

**Example - 移除碎片**  
下列範例會從 Valkey 或 Redis OSS （啟用叢集模式） 叢集 移除兩個節點群組`my-cluster`，因此操作完成時總共有兩個節點群組。來自移除碎片的金鑰空間會平均分散在其餘碎片間。  
針對 Linux、macOS 或 Unix：  

```
aws elasticache modify-replication-group-shard-configuration \
    --replication-group-id my-cluster \
    --node-group-count 2 \
    --node-groups-to-remove "0002" "0003" \
    --apply-immediately
```
針對 Windows：  

```
aws elasticache modify-replication-group-shard-configuration ^
    --replication-group-id my-cluster ^
    --node-group-count 2 ^
    --node-groups-to-remove "0002" "0003" ^
    --apply-immediately
```

#### 移除碎片 (ElastiCache API)
<a name="redis-cluster-resharding-online-remove-api"></a>

您可以使用 ElastiCache API，透過 `ModifyReplicationGroupShardConfiguration`操作，在線上重新設定 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的碎片。

下列程序說明如何使用 ElastiCache API 移除碎片，在 Valkey 或 Redis OSS （啟用叢集模式） 叢集中重新設定碎片。

**重要**  
從複寫群組移除節點群組 (碎片) 之前，ElastiCache 會確定所有資料可納入其餘碎片中。如果資料可納入，則會按請求從複寫群組刪除指定的碎片 (`NodeGroupsToRemove`)，而其金鑰空間會映射至其餘的碎片。如果資料無法納入其他的節點群組，流程會中止，複寫群組的節點群組設定會與請求之前相同。

您可以使用 ElastiCache API 從 Valkey 或 Redis OSS （啟用叢集模式） 叢集中移除一或多個碎片。您無法移除複寫群組中的所有碎片。而是必須刪除複寫群組。如需詳細資訊，請參閱[刪除複寫群組](Replication.DeletingRepGroup.md)。

使用下列參數搭配 `ModifyReplicationGroupShardConfiguration`。

**Parameters**
+ `ApplyImmediately=true` - 必要項目。指定碎片重新組態操作要立即開始。
+ `ReplicationGroupId` - 必要項目。指定碎片重新組態操作要執行所在的複寫群組 (叢集)。
+ `NodeGroupCount` - 必要項目。指定操作完成時要存在的碎片數量 (節點群組)。移除碎片時，`NodeGroupCount` 的值必須小於目前的碎片數量。
+ `NodeGroupsToRemove` - 當 `--node-group-count` 小於目前的數量節點群組 (碎片) 時為必要項目。要從複寫群組移除之碎片 (節點群組) 識別符的清單。

下列程序描述用於刪除一或多個碎片的程序。

**Example - 移除碎片**  
下列範例會從 Valkey 或 Redis OSS （啟用叢集模式） 叢集 移除兩個節點群組`my-cluster`，因此操作完成時總共有兩個節點群組。來自移除碎片的金鑰空間會平均分散在其餘碎片間。  

```
https://elasticache.us-east-2.amazonaws.com/
    ?Action=ModifyReplicationGroupShardConfiguration
    &ApplyImmediately=true
    &NodeGroupCount=2
    &ReplicationGroupId=my-cluster
    &NodeGroupsToRemove.member.1=0002
    &NodeGroupsToRemove.member.2=0003
    &Version=2015-02-02
    &SignatureVersion=4
    &SignatureMethod=HmacSHA256
    &Timestamp=20171002T192317Z
    &X-Amz-Credential=<credential>
```

### 線上碎片重新平衡
<a name="redis-cluster-resharding-online-rebalance"></a>

您可以使用 或 ElastiCache API AWS 管理主控台AWS CLI，重新平衡 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的碎片。

**Topics**
+ [線上碎片重新平衡 (主控台)](#redis-cluster-resharding-online-rebalance-console)
+ [線上碎片重新平衡 (AWS CLI)](#redis-cluster-resharding-online-rebalance-cli)
+ [線上碎片重新平衡 (ElastiCache API)](#redis-cluster-resharding-online-rebalance-api)

#### 線上碎片重新平衡 (主控台)
<a name="redis-cluster-resharding-online-rebalance-console"></a>

下列程序說明如何使用 重新平衡碎片，在 Valkey 或 Redis OSS （啟用叢集模式） 叢集中重新設定碎片AWS 管理主控台。

**在 Valkey 或 Redis OSS （啟用叢集模式） 叢集上的碎片之間重新平衡金鑰空間**

1. 前往 [https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 開啟 ElastiCache 主控台。

1. 從導覽窗格中，選擇 **Valkey 叢集**或 **Redis OSS 叢集**。

1. 選擇您要重新平衡之 Valkey 或 Redis OSS （啟用叢集模式） 叢集的名稱，而非名稱左側的方塊。
**提示**  
**在碎片**欄中，Valkey 或 Redis OSS （啟用叢集模式） 叢集的值為 1 或更高。

1. 選擇 **Rebalance (重新平衡)**。

1. 提示時，選擇 **Rebalance (重新平衡)**。您可能會看到類似以下內容的訊息：*Slots in the replication group are uniformly distributed (複寫群組中的位置已均勻分散)。Nothing to do. (Service: AmazonElastiCache; Status Code: 400; Error Code: InvalidReplicationGroupState; Request ID: 2246cebd-9721-11e7-8d5b-e1b0f086c8cf)*。如果有看到，請選擇 **Cancel (取消)**。

#### 線上碎片重新平衡 (AWS CLI)
<a name="redis-cluster-resharding-online-rebalance-cli"></a>

使用下列參數搭配 `modify-replication-group-shard-configuration`。

**Parameters**
+ `-apply-immediately` - 必要項目。指定碎片重新組態操作要立即開始。
+ `--replication-group-id` - 必要項目。指定碎片重新組態操作要執行所在的複寫群組 (叢集)。
+ `--node-group-count` - 必要項目。若要重新平衡叢集中所有碎片間的金鑰空間，此值必須與目前的碎片數量相同。

下列程序說明如何使用 重新平衡碎片，在 Valkey 或 Redis OSS （啟用叢集模式） 叢集中重新設定碎片AWS CLI。

**Example - 重新平衡叢集中的碎片**  
下列範例會重新平衡 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的插槽，`my-cluster`以便盡可能平均分配插槽。`--node-group-count` (`4`) 的值為目前在叢集中碎片的數量。  
針對 Linux、macOS 或 Unix：  

```
aws elasticache modify-replication-group-shard-configuration \
    --replication-group-id my-cluster \
    --node-group-count 4 \
    --apply-immediately
```
針對 Windows：  

```
aws elasticache modify-replication-group-shard-configuration ^
    --replication-group-id my-cluster ^
    --node-group-count 4 ^
    --apply-immediately
```

#### 線上碎片重新平衡 (ElastiCache API)
<a name="redis-cluster-resharding-online-rebalance-api"></a>

您可以使用 ElastiCache API，透過 `ModifyReplicationGroupShardConfiguration`操作，在線上重新設定 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的碎片。

使用下列參數搭配 `ModifyReplicationGroupShardConfiguration`。

**Parameters**
+ `ApplyImmediately=true` - 必要項目。指定碎片重新組態操作要立即開始。
+ `ReplicationGroupId` - 必要項目。指定碎片重新組態操作要執行所在的複寫群組 (叢集)。
+ `NodeGroupCount` - 必要項目。若要重新平衡叢集中所有碎片間的金鑰空間，此值必須與目前的碎片數量相同。

下列程序說明如何使用 ElastiCache API 重新平衡碎片，以重新設定 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的碎片。

**Example - 重新平衡叢集**  
下列範例會重新平衡 Valkey 或 Redis OSS （啟用叢集模式） 叢集中的插槽，`my-cluster`以便盡可能平均分配插槽。`NodeGroupCount` (`4`) 的值為目前在叢集中碎片的數量。  

```
https://elasticache.us-east-2.amazonaws.com/
    ?Action=ModifyReplicationGroupShardConfiguration
    &ApplyImmediately=true
    &NodeGroupCount=4
    &ReplicationGroupId=my-cluster
    &Version=2015-02-02
    &SignatureVersion=4
    &SignatureMethod=HmacSHA256
    &Timestamp=20171002T192317Z
    &X-Amz-Credential=<credential>
```

# 透過修改節點類型來進行線上垂直擴展
<a name="redis-cluster-vertical-scaling"></a>

透過搭配 Valkey 7.2 版或更新版本，或 Redis OSS 3.2.10 版或更新版本使用線上垂直擴展，您可以在最短的停機時間下動態擴展您的 Valkey 或 Redis OSS 叢集。這可讓您的 Valkey 或 Redis OSS 叢集在擴展時提供請求。

**注意**  
不支援在資料分層叢集 (例如，使用 r6gd 節點類型的叢集) 與未使用資料分層叢集 (例如，使用 r6g 節點類型的叢集) 之間的擴展。如需詳細資訊，請參閱[ElastiCache 中的資料分層](data-tiering.md)。

您可以執行下列動作：
+ **向上擴展** – 透過調整 Valkey 或 Redis OSS 叢集的節點類型以使用較大的節點類型來增加讀取和寫入容量。

  ElastiCache 會動態調整叢集大小，同時保持線上狀態並服務請求。
+ **縮減規模** - 將節點類型向下調整為使用較小的節點，減少讀取和寫入容量。同樣地，ElastiCache 會動態調整叢集大小，同時保持線上狀態並服務請求。在這種情況下，您透過縮減節點來降低成本。

**注意**  
向上擴展和向下擴展程序牽涉到使用新選取的節點類型來建立叢集，並將新節點與先前的節點進行同步。若要確保順暢的向上/向下擴展流程，請執行以下操作：  
確保您有足夠的 ENI (彈性網路界面) 容量。若是向下擴展，請確定較小的節點有足夠的記憶體，可以吸收預期的流量。  
如需記憶體管理的最佳實務，請參閱[管理 Valkey 和 Redis OSS 的預留記憶體](redis-memory-management.md)。
雖然垂直擴展程序的目標是保持全面上線，但此程序也需要在舊節點和新節點之間同步資料。建議您在預期資料流量最小的時間內啟動向上/向下擴展。
盡可能在預備環境中測試您的應用程式行為。

**Contents**
+ [線上擴充規模](#redis-cluster-vertical-scaling-scaling-up)
  + [向上擴展 Valkey 或 Redis OSS 叢集 （主控台）](#redis-cluster-vertical-scaling-console)
  + [向上擴展 Valkey 或 Redis OSS 叢集 (AWS CLI)](#Scaling.RedisStandalone.ScaleUp.CLI)
  + [向上擴展 Valkey 或 Redis OSS 叢集 (ElastiCache API)](#VeticalScaling.RedisReplGrps.ScaleUp.API)
+ [線上縮減規模](#redis-cluster-vertical-scaling-scaling-down)
  + [向下擴展 Valkey 或 Redis OSS 叢集 （主控台）](#redis-cluster-vertical-scaling-down-console)
  + [向下擴展 Valkey 或 Redis OSS 叢集 (AWS CLI)](#Scaling.RedisStandalone.ScaleDown.CLI)
  + [向下擴展 Valkey 或 Redis OSS 叢集 (ElastiCache API)](#Scaling.Vertical.ScaleDown.API)

## 線上擴充規模
<a name="redis-cluster-vertical-scaling-scaling-up"></a>

**Topics**
+ [向上擴展 Valkey 或 Redis OSS 叢集 （主控台）](#redis-cluster-vertical-scaling-console)
+ [向上擴展 Valkey 或 Redis OSS 叢集 (AWS CLI)](#Scaling.RedisStandalone.ScaleUp.CLI)
+ [向上擴展 Valkey 或 Redis OSS 叢集 (ElastiCache API)](#VeticalScaling.RedisReplGrps.ScaleUp.API)

### 向上擴展 Valkey 或 Redis OSS 叢集 （主控台）
<a name="redis-cluster-vertical-scaling-console"></a>

下列程序說明如何使用 ElastiCache 管理主控台擴展 Valkey 或 Redis OSS 叢集。在此過程中，您的叢集將繼續以最短的停機時間處理請求。

**擴展 Valkey 或 Redis OSS 叢集 （主控台）**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 從導覽窗格中，選擇 **Valkey 叢集**或 **Redis OSS 叢集**。

1. 從叢集的清單中，選擇叢集。

1. 選擇 **Modify** (修改)。

1. 在 **Modify Cluster (修改叢集)** 精靈中：

   1. 從 **Node type (節點類型)** 清單選擇您要擴展的節點類型。若要向上擴展，請選取大於現有節點的節點類型。

1. 如果您要立即執行向上擴展程序，請選擇 **Apply immediately (立即套用)** 方塊。如果未選擇 **Apply immediately (立即套用)** 方塊，在此叢集的下一個維護時段期間，會執行向上擴展程序。

1. 選擇 **Modify** (修改)。

   如果您在上一個步驟中選擇 **Apply immediately (立即套用)**，叢集的狀態變更為 *modifying (修改中)*。當狀態變更為 *available (可用)*，修改即已完成，並且您可以開始使用新叢集。

### 向上擴展 Valkey 或 Redis OSS 叢集 (AWS CLI)
<a name="Scaling.RedisStandalone.ScaleUp.CLI"></a>

下列程序說明如何使用 擴展 Valkey 或 Redis OSS 叢集AWS CLI。在此過程中，您的叢集將繼續以最短的停機時間處理請求。

**擴展 Valkey 或 Redis OSS 叢集 (AWS CLI)**

1. 使用下列參數執行 `list-allowed-node-type-modifications`命令，決定您可以擴展至 的AWS CLI節點類型。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache list-allowed-node-type-modifications \
   	    --replication-group-id my-replication-group-id
   ```

   針對 Windows：

   ```
   aws elasticache list-allowed-node-type-modifications ^
   	    --replication-group-id my-replication-group-id
   ```

   上述命令的輸出看起來會類似這個 (JSON 格式)。

   ```
   {
   	    "ScaleUpModifications": [
   	        "cache.m3.2xlarge", 
   	        "cache.m3.large", 
   	        "cache.m3.xlarge", 
   	        "cache.m4.10xlarge", 
   	        "cache.m4.2xlarge", 
   	        "cache.m4.4xlarge", 
   	        "cache.m4.large", 
   	        "cache.m4.xlarge", 
   	        "cache.r3.2xlarge", 
   	        "cache.r3.4xlarge", 
   	        "cache.r3.8xlarge", 
   	        "cache.r3.large", 
   	        "cache.r3.xlarge"
   	    ]
   	       "ScaleDownModifications": [
   	        "cache.t2.micro", 
   	        "cache.t2.small ", 
   	        "cache.t2.medium",
   	       	"cache.t1.small "
   	    ], 
   }
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[list-allowed-node-type-modifications](https://docs.aws.amazon.com/cli/latest/reference/elasticache/list-allowed-node-type-modifications.html)」。

1. 使用AWS CLI`modify-replication-group` 命令和下列參數，修改複寫群組以擴展至新的較大節點類型。
   + `--replication-group-id` - 您要擴充規模的複寫群組名稱。
   + `--cache-node-type` – 您要擴展叢集的新節點類型。此值必須是步驟 1 中 `list-allowed-node-type-modifications` 命令傳回的其中一個節點類型。
   + `--cache-parameter-group-name` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `--apply-immediately` - 會造成立即套用擴充規模程序。若要將向上擴展程序延期至叢集的下一個維護時段，請使用 `--no-apply-immediately` 參數。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache modify-replication-group  \
   	    --replication-group-id my-redis-cluster \
   	    --cache-node-type cache.m3.xlarge \	    
   	    --apply-immediately
   ```

   針對 Windows：

   ```
   aws elasticache modify-replication-group ^
   	    --replication-group-id my-redis-cluster ^
   	    --cache-node-type cache.m3.xlarge ^	   
   	    --apply-immediately
   ```

   上述命令的輸出看起來會類似這個 (JSON 格式)。

   ```
   {
   		"ReplicationGroup": {
           "Status": "modifying",
           "Description": "my-redis-cluster",
           "NodeGroups": [
               {
                   "Status": "modifying",
                   "Slots": "0-16383",
                   "NodeGroupId": "0001",
                   "NodeGroupMembers": [
                       {
                           "PreferredAvailabilityZone": "us-east-1f",
                           "CacheNodeId": "0001",
                           "CacheClusterId": "my-redis-cluster-0001-001"
                       },
                       {
                           "PreferredAvailabilityZone": "us-east-1d",
                           "CacheNodeId": "0001",
                           "CacheClusterId": "my-redis-cluster-0001-002"
                       }
                   ]
               }
           ],
           "ConfigurationEndpoint": {
               "Port": 6379,
               "Address": "my-redis-cluster.r7gdfi.clustercfg.use1.cache.amazonaws.com"
           },
           "ClusterEnabled": true,
           "ReplicationGroupId": "my-redis-cluster",
           "SnapshotRetentionLimit": 1,
           "AutomaticFailover": "enabled",
           "SnapshotWindow": "07:30-08:30",
           "MemberClusters": [
               "my-redis-cluster-0001-001",
               "my-redis-cluster-0001-002"
           ],
           "CacheNodeType": "cache.m3.xlarge",
            "DataTiering": "disabled"
           "PendingModifiedValues": {}
       }
   }
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)」。

1. 如果您使用 `--apply-immediately`，請使用 命令搭配下列參數來AWS CLI`describe-cache-clusters`檢查叢集的狀態。當狀態變更為*可用*時，您可以開始使用新的、較大的叢集節點。

### 向上擴展 Valkey 或 Redis OSS 叢集 (ElastiCache API)
<a name="VeticalScaling.RedisReplGrps.ScaleUp.API"></a>

下列程序會使用 ElastiCache API，將叢集從目前的節點類型擴展到新的、較大的節點類型。在此過程中，ElastiCache 會更新 DNS 項目，使其指向新節點。因此，您不需在應用程式中更新端點。對於 Valkey 7.2 和更新版本 Redis OSS 5.0.5 和更新版本，您可以在叢集繼續保持連線並提供傳入請求時擴展啟用自動容錯移轉的叢集。在 Redis OSS 4.0.10 及更低版本上，您可能會注意到在更新 DNS 項目時，從主節點讀取和寫入先前版本的短暫中斷。

擴展到較大的節點類型所需的時間會有所不同，具體取決於您的節點類型和目前叢集中的資料量。

**擴展 Valkey 或 Redis OSS 快取叢集 (ElastiCache API)**

1. 使用 ElastiCache API `ListAllowedNodeTypeModifications` 動作搭配下列參數，判斷您可以擴充規模的節點類型。
   + `ReplicationGroupId` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ListAllowedNodeTypeModifications
   	   &ReplicationGroupId=MyReplGroup
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ListAllowedNodeTypeModifications](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ListAllowedNodeTypeModifications.html)」。

1. 使用 `ModifyReplicationGroup` ElastiCache API 動作搭配下列參數，將您目前的複寫群組擴充規模為新的節點類型。
   + `ReplicationGroupId` - 複寫群組的名稱。
   + `CacheNodeType` – 此複寫群組中新的、較大的叢集節點類型。此值必須是上一個步驟中 `ListAllowedNodeTypeModifications`動作傳回的其中一個執行個體類型。
   + `CacheParameterGroupName` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `ApplyImmediately` - 設定為 `true` 會立即套用擴充規模程序。若要將向上擴展程序延期至下一個維護時段，請使用 `ApplyImmediately``=false`。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ModifyReplicationGroup
   	   &ApplyImmediately=true
   	   &CacheNodeType=cache.m3.2xlarge
   	   &CacheParameterGroupName=redis32-m3-2xl
   	   &ReplicationGroupId=myReplGroup
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20141201T220302Z
   	   &Version=2014-12-01
   	   &X-Amz-Algorithm=&AWS;4-HMAC-SHA256
   	   &X-Amz-Date=20141201T220302Z
   	   &X-Amz-SignedHeaders=Host
   	   &X-Amz-Expires=20141201T220302Z
   	   &X-Amz-Credential=<credential>
   	   &X-Amz-Signature=<signature>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)」。

1. 如果您使用的是 `ApplyImmediately``=true`，請使用 ElastiCache API `DescribeReplicationGroups` 動作搭配下列參數，監控複寫群組的狀態。當狀態從 *modifying (修改中)* 變更為 *available (可用)*，您即可以開始寫入新的、已向上擴展的複寫群組。
   + `ReplicationGroupId` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=DescribeReplicationGroups
   	   &ReplicationGroupId=MyReplGroup
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html)」。

## 線上縮減規模
<a name="redis-cluster-vertical-scaling-scaling-down"></a>

**Topics**
+ [向下擴展 Valkey 或 Redis OSS 叢集 （主控台）](#redis-cluster-vertical-scaling-down-console)
+ [向下擴展 Valkey 或 Redis OSS 叢集 (AWS CLI)](#Scaling.RedisStandalone.ScaleDown.CLI)
+ [向下擴展 Valkey 或 Redis OSS 叢集 (ElastiCache API)](#Scaling.Vertical.ScaleDown.API)

### 向下擴展 Valkey 或 Redis OSS 叢集 （主控台）
<a name="redis-cluster-vertical-scaling-down-console"></a>

下列程序說明如何使用 ElastiCache 管理主控台縮減 Valkey 或 Redis OSS 叢集。在此過程中，您的 Valkey 或 Redis OSS 叢集將繼續以最短的停機時間處理請求。

**縮減 Valkey 或 Redis OSS 叢集 （主控台）**

1. 登入AWS 管理主控台並開啟位於 https：//[https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/) 的 ElastiCache 主控台。

1. 從導覽窗格中，選擇 **Valkey 叢集**或 **Redis OSS 叢集**。

1. 從叢集的清單中，選擇您偏好的叢集。

1. 選擇 **Modify** (修改)。

1. 在 **Modify Cluster (修改叢集)** 精靈中：

   1. 從 **Node type (節點類型)** 清單選擇您要擴展的節點類型。若要向下擴展，請選取小於現有節點的節點類型。請注意，並非所有節點類型都可縮減規模。

1. 如果您要立即執行向下擴展程序，請選擇 **Apply immediately (立即套用)** 方塊。如果未選擇 **Apply immediately (立即套用)** 方塊，則會在此叢集的下一個維護時段期間，執行向下擴展程序。

1. 選擇 **Modify** (修改)。

   如果您在上一個步驟中選擇 **Apply immediately (立即套用)**，叢集的狀態變更為 *modifying (修改中)*。當狀態變更為 *available (可用)*，修改即已完成，並且您可以開始使用新叢集。

### 向下擴展 Valkey 或 Redis OSS 叢集 (AWS CLI)
<a name="Scaling.RedisStandalone.ScaleDown.CLI"></a>

下列程序說明如何使用 縮減 Valkey 或 Redis OSS 叢集AWS CLI。在此過程中，您的叢集將繼續以最短的停機時間處理請求。

**縮減 Valkey 或 Redis OSS 叢集 (AWS CLI)**

1. 使用下列參數執行 `list-allowed-node-type-modifications`命令，AWS CLI決定您可以縮減規模的節點類型。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache list-allowed-node-type-modifications \
   	    --replication-group-id my-replication-group-id
   ```

   針對 Windows：

   ```
   aws elasticache list-allowed-node-type-modifications ^
   	    --replication-group-id my-replication-group-id
   ```

   上述命令的輸出看起來會類似這個 (JSON 格式)。

   ```
   {
   	    "ScaleUpModifications": [
   	        "cache.m3.2xlarge", 
   	        "cache.m3.large", 
   	        "cache.m3.xlarge", 
   	        "cache.m4.10xlarge", 
   	        "cache.m4.2xlarge", 
   	        "cache.m4.4xlarge", 
   	        "cache.m4.large", 
   	        "cache.m4.xlarge", 
   	        "cache.r3.2xlarge", 
   	        "cache.r3.4xlarge", 
   	        "cache.r3.8xlarge", 
   	        "cache.r3.large", 
   	        "cache.r3.xlarge"
   	    ]
   	
   	       "ScaleDownModifications": [
   	        "cache.t2.micro", 
   	        "cache.t2.small ", 
   	        "cache.t2.medium ",
     	      "cache.t1.small"
   	    ]
   }
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[list-allowed-node-type-modifications](https://docs.aws.amazon.com/cli/latest/reference/elasticache/list-allowed-node-type-modifications.html)」。

1. 使用AWS CLI`modify-replication-group` 命令和下列參數，修改複寫群組以縮減至新的較小節點類型。
   + `--replication-group-id` - 您要縮減規模的複寫群組名稱。
   + `--cache-node-type` – 您要擴展叢集的新節點類型。此值必須是步驟 1 中 `list-allowed-node-type-modifications` 命令傳回的其中一個節點類型。
   + `--cache-parameter-group-name` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `--apply-immediately` - 會造成立即套用擴充規模程序。若要將向下擴展程序延期至叢集的下一個維護時段，請使用 `--no-apply-immediately` 參數。

   針對 Linux、macOS 或 Unix：

   ```
   aws elasticache modify-replication-group  \
   	    --replication-group-id my-redis-cluster \
   	    --cache-node-type cache.t2.micro \	    
   	    --apply-immediately
   ```

   針對 Windows：

   ```
   aws elasticache modify-replication-group ^
   	    --replication-group-id my-redis-cluster ^
   	    --cache-node-type cache.t2.micro ^	   
   	    --apply-immediately
   ```

   上述命令的輸出看起來會類似這個 (JSON 格式)。

   ```
   {	
   		"ReplicationGroup": {
           "Status": "modifying",
           "Description": "my-redis-cluster",
           "NodeGroups": [
               {
                   "Status": "modifying",
                   "Slots": "0-16383",
                   "NodeGroupId": "0001",
                   "NodeGroupMembers": [
                       {
                           "PreferredAvailabilityZone": "us-east-1f",
                           "CacheNodeId": "0001",
                           "CacheClusterId": "my-redis-cluster-0001-001"
                       },
                       {
                           "PreferredAvailabilityZone": "us-east-1d",
                           "CacheNodeId": "0001",
                           "CacheClusterId": "my-redis-cluster-0001-002"
                       }
                   ]
               }
           ],
           "ConfigurationEndpoint": {
               "Port": 6379,
               "Address": "my-redis-cluster.r7gdfi.clustercfg.use1.cache.amazonaws.com"
           },
           "ClusterEnabled": true,
           "ReplicationGroupId": "my-redis-cluster",
           "SnapshotRetentionLimit": 1,
           "AutomaticFailover": "enabled",
           "SnapshotWindow": "07:30-08:30",
           "MemberClusters": [
               "my-redis-cluster-0001-001",
               "my-redis-cluster-0001-002"
           ],
           "CacheNodeType": "cache.t2.micro",
            "DataTiering": "disabled"
           "PendingModifiedValues": {}
       }
   }
   ```

   如需詳細資訊，請參閱 *AWS CLI參考*中的「[modify-replication-group](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-replication-group.html)」。

1. 如果您使用 `--apply-immediately`，請使用 命令搭配下列參數來AWS CLI`describe-cache-clusters`檢查叢集的狀態。當狀態變更為*可用*時，您可以開始使用新的、較小的叢集節點。

### 向下擴展 Valkey 或 Redis OSS 叢集 (ElastiCache API)
<a name="Scaling.Vertical.ScaleDown.API"></a>

下列程序會使用 ElastiCache API，將複寫群組從其目前的節點類型規模縮減為較小的新節點類型。在此過程中，您的 Valkey 或 Redis OSS 叢集將繼續以最短的停機時間處理請求。

縮減為較小的節點類型所需的時間會有所不同，具體取決於您的節點類型和目前叢集中的資料量。

**縮減規模 (ElastiCache API)**

1. 使用 ElastiCache API `ListAllowedNodeTypeModifications` 動作搭配下列參數，判斷您可以縮減規模的節點類型。
   + `ReplicationGroupId` - 複寫群組的名稱。使用此參數來描述特定複寫群組 (而非所有複寫群組)。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ListAllowedNodeTypeModifications
   	   &ReplicationGroupId=MyReplGroup
   	   &Version=2015-02-02
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20150202T192317Z
   	   &X-Amz-Credential=<credential>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ListAllowedNodeTypeModifications](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ListAllowedNodeTypeModifications.html)」。

1. 使用 `ModifyReplicationGroup` ElastiCache API 動作搭配下列參數，將您目前的複寫群組縮減規模為新節點類型。
   + `ReplicationGroupId` - 複寫群組的名稱。
   + `CacheNodeType` – 此複寫群組中叢集的新節點類型較小。此值必須是上一個步驟中 `ListAllowedNodeTypeModifications`動作傳回的其中一個執行個體類型。
   + `CacheParameterGroupName` - [選用] 如果您使用 `reserved-memory` 來管理叢集的保留記憶體，請使用此參數。指定自訂快取參數群組，其會為您的新節點類型保留正確的記憶體數量。如果您要使用 `reserved-memory-percent`，則可以忽略此參數。
   + `ApplyImmediately` - 設定為 `true` 會立即套用縮減規模程序。若要將向下擴展程序延期至下一個維護時段，請使用 `ApplyImmediately``=false`。

   ```
   https://elasticache.us-west-2.amazonaws.com/
   	   ?Action=ModifyReplicationGroup
   	   &ApplyImmediately=true
   	   &CacheNodeType=cache.t2.micro
   	   &CacheParameterGroupName=redis32-m3-2xl
   	   &ReplicationGroupId=myReplGroup
   	   &SignatureVersion=4
   	   &SignatureMethod=HmacSHA256
   	   &Timestamp=20141201T220302Z
   	   &Version=2014-12-01
   	   &X-Amz-Algorithm=&AWS;4-HMAC-SHA256
   	   &X-Amz-Date=20141201T220302Z
   	   &X-Amz-SignedHeaders=Host
   	   &X-Amz-Expires=20141201T220302Z
   	   &X-Amz-Credential=<credential>
   	   &X-Amz-Signature=<signature>
   ```

   如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[ModifyReplicationGroup](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ModifyReplicationGroup.html)」。

# Bloom 篩選條件入門
<a name="BloomFilters"></a>

ElastiCache 支援 Bloom 篩選資料結構，可提供空間效率高的概率資料結構，以檢查 元素是否為集合的成員。使用 Bloom 篩選條件時，可能是誤報 - 篩選條件可能不正確地指出 元素存在，即使該元素未新增至集合。不過，使用 Bloom 篩選條件可以防止誤*判*，不正確地指出 元素*不存在*，即使該元素已新增至集合。

您可以透過調整 fp 速率，將潛在的誤報百分比設定為工作負載的偏好速率。您也可以設定容量 (Bloom 篩選條件可保存的項目數量）、擴展和非擴展屬性等。

使用支援的引擎版本建立叢集之後，Bloom 資料類型和相關聯的命令會自動可用。`bloom` 資料類型與官方 Valkey 用戶端程式庫的 Bloom filter 命令語法相容，包括 `valkey-py`、 `valkey-java`和 `valkey-go`。您可以輕鬆將現有的 Bloom 型 Valkey 和 Redis OSS 應用程式遷移至 ElastiCache。如需命令的完整清單，請參閱 [Bloom 篩選條件命令](#SupportedCommandsBloom)。

Bloom 相關指標 `BloomFilterBasedCmds`、 `BloomFilterBasedCmdsLatency`和 `BloomFilterBasedCmdsECPUs` 會併入 CloudWatch，以監控此資料類型的使用情況。如需詳細資訊，請參閱[Valkey 和 Redis OSS 的指標](CacheMetrics.Redis.md)。

**注意**  
若要使用 Bloom 篩選條件，您必須在 ElastiCache Valkey 8.1 和更新版本上執行。
Bloom 資料類型與其他非 Valkey 型 Bloom 產品不相容。

## Bloom 篩選條件資料類型概觀
<a name="BloomFilters.datatype"></a>

Bloom 篩選條件是一種空間高效的概率資料結構，允許新增元素並檢查元素是否存在。如果篩選條件不正確地指出 元素存在，即使未新增，也可能出現誤報。不過，Bloom Filters 保證不會發生偽陰性 （不正確地指出元素不存在，即使已新增）。

如需 Bloom 篩選條件的主要文件來源，請參閱 https：//valkey.io 文件頁面。這包含下列資訊：
+ [Bloom 篩選條件的常見使用案例](https://valkey.io/topics/bloomfilters/#common-use-cases-for-bloom-filters)
  + 廣告/事件重複資料刪除
  + 詐騙偵測
  + 篩選有害內容/垃圾郵件
  + 唯一使用者偵測
+ [擴展和非擴展 Bloom 篩選條件之間的差異](https://valkey.io/topics/bloomfilters/#scaling-and-non-scaling-bloom-filters)
  + 如何在擴展和非擴展 Bloom 篩選條件之間做出決定
+ [Bloom 屬性](https://valkey.io/topics/bloomfilters/#bloom-properties)
  + 了解 Bloom 篩選條件的可調校屬性。這包括誤報率、容量、擴展和非擴展屬性等。
+ [高光命令的效能](https://valkey.io/topics/bloomfilters/#performance)
+ [監控整體 Bloom 篩選條件統計資料](https://valkey.io/topics/bloomfilters/#monitoring)
+ [處理大型光暈篩選條件](https://valkey.io/topics/bloomfilters/#handling-large-bloom-filters)
  + 如何檢查 Bloom 篩選條件是否達到其記憶體用量限制，以及是否可以擴展以達到所需容量的建議和詳細資訊。
  + 您可以使用 [BF.INFO](https://valkey.io/commands/bf.info/) 命令，透過 特別檢查花粉篩選條件文件消耗的記憶體量。

## Bloom 大小限制
<a name="BloomFilters.size"></a>

單一 Bloom 篩選條件物件的記憶體使用量限制為 128 MB。您可以使用 `BF.INFO <key> SIZE`命令，檢查 Bloom 篩選條件耗用的記憶體量。

## Bloom ACLs
<a name="BloomFilters.ACL"></a>

與現有的每個資料類型類別 (@string、@hash 等） 類似，會新增新類別 @bloom，以簡化對 Bloom 命令和資料的管理存取。沒有其他現有的 Valkey 或 Redis OSS 命令是 @bloom 類別的成員。

已更新 3 個現有的 ACL 類別，以包含新的 Bloom 命令：@read、@write 和 @fast。下表指出 Bloom 命令與適當類別的映射。


| Bloom 命令 | @read | @write | @fast | @bloom | 
| --- | --- | --- | --- | --- | 
|  BF.ADD  |    |  y  |  y  |  y  | 
|  BF.CARD  |  y  |    |  y  |  y  | 
|  BF.EXISTS  |  y  |    |  y  |  y  | 
|  BF.INFO  |  y  |    |  y  |  y  | 
|  BF.INSERT  |    |  y  |  y  |  y  | 
|  BF.MADD  |    |  y  |  y  |  y  | 
|  BF.MEXISTS  |  y  |    |  y  |  y  | 
|  BF.RESERVE  |  y  |    |  y  |  y  | 

## Bloom 篩選條件相關指標
<a name="BloomFilters.Metrics"></a>

提供與 Bloom 資料結構相關的下列 CloudWatch 指標：


| CW 指標 | 單位 | 無伺服器/節點型 | Description | 
| --- | --- | --- | --- | 
|  BloomFilterBasedCmds  |  計數  |  兩者  |  Bloom 篩選條件命令的總數，包括讀取和寫入命令。  | 
|  BloomFilterBasedCmdsLatency  |  微秒  |  自我管理  |  所有 Bloom 篩選條件命令的延遲，包括讀取和寫入命令。  | 
|  BloomFilterBasedCmdsECPUs  |  計數  |  無伺服器  |  所有 Bloom 篩選條件命令使用的 ECPUs，包括讀取和寫入命令。  | 

## Bloom 篩選條件命令
<a name="SupportedCommandsBloom"></a>

[Bloom Filter 命令](https://valkey.io/commands/#bloom)會記錄在 [Valkey.io](https://valkey.io/) 網站上。每個命令頁面都提供 Bloom 命令的完整概觀，包括其語法、行為、傳回值和潛在的錯誤條件。


| 名稱 | 描述 | 
| --- | --- | 
| [BF.ADD](https://valkey.io/commands/bf.add/) |  將單一項目新增至 Bloom 篩選條件。如果篩選條件不存在，則會建立。  | 
| [BF.CARD](https://valkey.io/commands/bf.card/) | 傳回 Bloom 篩選條件的基數。 | 
| [BF.EXISTS](https://valkey.io/commands/bf.exists/) | 決定花朵篩選條件是否包含指定的項目。  | 
| [BF.INFO](https://valkey.io/commands/bf.info/) | 傳回特定 Bloom 篩選條件的用量資訊和屬性。 | 
| [BF.INSERT](https://valkey.io/commands/bf.insert/) | 建立具有 0 個或更多項目的花粉篩選條件，或將項目新增至現有的花粉篩選條件。 | 
| [BF.MADD](https://valkey.io/commands/bf.madd/) | 將一或多個項目新增至花粉篩選條件。 | 
| [BF.MEXISTS](https://valkey.io/commands/bf.mexists/) | 決定 Bloom 篩選條件是否包含 1 個或多個項目。 | 
| [BF.RESERVE](https://valkey.io/commands/bf.reserve/) | 建立具有指定屬性的空花篩選條件。 | 

**注意**  
ElastiCache 不支援 **BF.LOAD**。它僅適用於 ElastiCache 不支援的 AOF 用量。

# Serverless 中的 Watch 入門
<a name="ServerlessWatch"></a>

ElastiCache 支援 `WATCH`命令，可讓您監控金鑰的變更並執行條件式[交易](https://valkey.io/topics/transactions/)。`WATCH` 命令對於需要樂觀並行控制的應用程式特別有用，可確保只有在監控的金鑰尚未修改時才執行交易。這包括由用戶端進行的修改，例如寫入命令，以及由 Valkey 本身進行的修改，例如過期或移出。如果金鑰是從在 中設定的時間`WATCH`和`EXEC`收到的時間修改，則整個交易將會中止。

對於 ElastiCache Serverless，引入了以下限制條件 - 

ElastiCache Serverless 的範圍`WATCH`為單一雜湊插槽。這表示只有映射到相同雜湊插槽的金鑰才能透過相同連線同時監看，而監看命令之後的交易只能在相同的雜湊插槽上操作。當應用程式嘗試監看來自不同雜湊槽的金鑰，或執行在對應至與監看金鑰不同雜湊槽的金鑰上操作的交易命令時，將會傳回`CROSSSLOT`錯誤。[雜湊標籤](https://valkey.io/topics/cluster-spec/#hash-tags)可用來確保多個索引鍵映射到相同的雜湊插槽。

此外，`SCAN`命令無法在具有監看金鑰的連線內執行，並會傳回`command not supported during watch state`錯誤。

當 ElastiCache Serverless 無法確定金鑰是否已修改時，交易將會中止 （就像接觸監看的金鑰一樣）。例如，當位置已遷移，且相同的節點上找不到監看的金鑰時。

**程式碼範例**

## 監看和操作來自不同插槽的金鑰
<a name="w2aac24c33c15b1"></a>

在下列範例中，監看的金鑰和`SET`命令中指定的金鑰會對應到不同的雜湊插槽。執行會傳回 `CROSSSLOT ERROR`。

```
> WATCH foo:{005119} 
OK 
> MULTI 
OK 
> SET bar:{011794} 1234 
QUEUED 
> EXEC 
CROSSSLOT Keys in request don't hash to the same slot
```

## 監看和操作來自相同插槽的金鑰
<a name="w2aac24c33c15b3"></a>

下列範例顯示成功的交易，因為 中設定的金鑰`WATCH`未變更。

```
> WATCH foo:{005119} 
OK 
> MULTI 
OK 
> SET bar:{005119} 1234 
QUEUED 
> EXEC 
1) OK
```

## 監看來自不同插槽的金鑰
<a name="w2aac24c33c15b5"></a>

在下列範例中，嘗試同時從相同用戶端連線內不同插槽的`WATCH`金鑰會傳回 `CROSSSLOT ERROR`。

```
> WATCH foo:{005119} 
OK 
> WATCH bar:{123455}  
CROSSSLOT Keys in request don't hash to the same slot
```

## 監看限制
<a name="ServerlessWatch.size"></a>

每個用戶端連線最多可同時監看 1000 個金鑰。

## 支援與 Watch 相關的命令
<a name="SupportedCommandsWatch"></a>

[WATCH](https://valkey.io/commands/watch/) 和 [UNWATCH](https://valkey.io/commands/unwatch/) 命令會記錄在 [Valkey.io](https://valkey.io/) 網站上。它提供命令的完整概觀，包括其語法、行為、傳回值和潛在的錯誤條件。

# 向量搜尋入門
<a name="vector-search"></a>

Amazon ElastiCache for Valkey 支援向量搜尋，可讓您在記憶體中存放、搜尋和更新數十億個高維度向量內嵌，延遲低至微秒，且取回率大於 99%。ElastiCache for Valkey 提供從 Amazon Bedrock、Amazon SageMaker、Anthropic 或 OpenAI 等熱門供應商索引、搜尋和更新數十億個高維度向量內嵌的功能，以進行快速搜尋和擷取。Amazon ElastiCache 的向量搜尋非常適合尖峰效能和可擴展性是最重要選擇條件的使用案例。這包括語意快取、擷取擴增產生、即時建議、個人化和異常偵測。

向量搜尋可以與其他 ElastiCache 功能搭配使用，以增強您的應用程式。ElastiCache 的向量搜尋可在所有[AWS區域中](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)以節點為基礎的叢集上的 Valkey 8.2 版中使用，無需額外費用。若要開始使用，請使用 、[AWS 管理主控台](https://console.aws.amazon.com/elasticache/)AWS SDK 或 建立新的 Valkey 8.2 叢集AWS CLI。您也可以在現有叢集上使用向量搜尋，只需[按幾下滑鼠，即可從任何舊版的 Valkey 或 Redis OSS 升級至 Valkey 8.2，無需停機](VersionManagement.HowTo.md)。

# 向量搜尋概觀
<a name="vector-search-overview"></a>

ElastiCache for Valkey 提供索引、搜尋和更新數十億個高維度向量內嵌的功能。向量搜尋可讓您建立、維護和使用次要索引，以實現有效率且可擴展的搜尋。每個向量搜尋操作都適用於單一索引。索引操作僅適用於指定的索引。除了索引建立和刪除操作之外，任何數量的操作都可以隨時針對任何索引發出。在叢集層級，多個索引的多個操作可能同時進行。

在此文件中，索引鍵、資料列和記錄一詞相同，可互換使用。同樣地，術語欄、欄位、路徑和成員也會互換使用。

`FT.CREATE` 命令可用來為具有指定索引類型的索引鍵子集建立索引。 會對建立的索引`FT.SEARCH`執行查詢，並`FT.DROPINDEX`移除現有的索引和所有相關資料。沒有特殊命令可新增、刪除或修改索引資料。修改索引中索引鍵的現有 `HASH`或 `JSON`命令會自動更新索引。

**Topics**
+ [索引和 Valkey OSS 金鑰空間](#indexes-keyspace)
+ [索引欄位類型](#index-field-types)
+ [向量索引演算法](#vector-index-algorithms)
+ [向量搜尋安全性](#vector-search-security)

## 索引和 Valkey OSS 金鑰空間
<a name="indexes-keyspace"></a>

在 Valkey OSS 金鑰空間的子集上建構和維護索引。每個索引的金鑰空間是由建立索引時提供的金鑰字首清單所定義。字首清單是選用的，如果省略，整個金鑰空間將是該索引的一部分。多個索引可以選擇不相交或重疊的鍵空間子集，不受限制。

索引也會輸入，只涵蓋具有相符類型的索引鍵。目前， 索引僅支援 `JSON`和 `HASH`類型。`HASH` 索引只會為其字首清單涵蓋的索引`HASH`鍵編製索引，類似地，`JSON`索引只會為其字首清單涵蓋的索引`JSON`鍵編製索引。索引的鍵空間字首清單中沒有指定類型的鍵會被忽略，不會影響搜尋操作。

當命令修改索引鍵空間內的任何索引鍵時，索引會更新。Valkey 會自動擷取每個索引的宣告欄位，並使用新值更新索引。更新程序有三個步驟。在第一個步驟中，修改 HASH 或 JSON 金鑰，並封鎖請求用戶端。第二個步驟是在背景執行，並更新包含修改後金鑰的每個索引。在第三個步驟中，用戶端會解除封鎖。因此，對於在與變動相同的連線上執行的查詢操作，該變更會立即顯示在搜尋結果中。

建立索引是一個多步驟程序。第一步是執行定義索引的 FT.CREATE 命令。成功執行建立會自動啟動第二個步驟 – 回填。回填程序會在背景執行緒中執行，並掃描金鑰空間，尋找新索引字首清單中的金鑰。找到的每個索引鍵都會新增至索引。最後掃描整個金鑰空間，完成索引建立程序。請注意，當回填程序執行時，允許索引鍵的變動、沒有限制，而且索引回填程序將無法完成，直到所有索引鍵都正確編製索引為止。不允許在索引進行回填時嘗試查詢操作，並以錯誤終止。FT.INFO 命令會在 'backfill\$1status' 欄位中傳回回填程序狀態。

## 索引欄位類型
<a name="index-field-types"></a>

每個索引都有特定類型，會在建立索引時與要編製索引的欄位 （資料欄） 位置一起宣告。對於`HASH`金鑰，位置是 中的欄位名稱`HASH`。對於`JSON`金鑰，位置是 JSON 路徑描述。修改金鑰時，會擷取與宣告欄位相關聯的資料，並轉換為宣告類型，並存放在索引中。如果資料遺失或無法成功轉換為宣告的類型，則會從索引省略該欄位。欄位有三種類型，如下所述：
+ **向量欄位**包含一個數字向量，也稱為向量內嵌。向量欄位可用來根據測量相似性的指定距離指標來篩選向量。對於`HASH`索引， 欄位應包含以二進位格式 (little-endian IEEE 754) 編碼的整個向量。對於`JSON`索引鍵，路徑應該參考填充數字的正確大小陣列。請注意，當 JSON 陣列用作向量欄位時，JSON 金鑰內陣列的內部表示會轉換為所選演算法所需的格式，從而減少記憶體消耗和精確度。使用 JSON 命令的後續讀取操作將產生降低的精確度值。
+ **數字欄位**包含單一數字。數字欄位可與範圍搜尋運算子搭配使用。對於 `HASH`， 欄位應包含以固定或浮點數標準格式寫入之數字的 ASCII 文字。對於 `JSON` 欄位，必須遵循 JSON 號碼的數值規則。無論金鑰中的表示法為何，此欄位都會轉換為 64 位元浮點數，以供索引內儲存。由於基礎數字存放在具有精確度限制的浮點中，因此適用浮點數字比較的一般規則。
+ **標籤欄位**包含以單一 UTF-8 字串編碼的零個或多個標籤值。標籤欄位可用來透過區分大小寫或區分大小寫的比較，篩選標籤值相等性的查詢。字串會使用分隔符號字元 （預設為逗號，但可以覆寫） 剖析為標籤值，並移除開頭和結尾的空格。任何數量的標籤值都可以包含在單一標籤欄位中。

## 向量索引演算法
<a name="vector-index-algorithms"></a>

Valkey 支援兩種向量索引演算法：
+ **平面** – 平面演算法是索引中每個向量的暴力力線性處理，在距離運算的精確度範圍內產生確切的答案。由於索引的線性處理，此演算法的執行時間對於大型索引可能非常高。平面索引支援更高的擷取速度。
+ **階層式導航小型世界 (HNSW)** – HNSW 演算法是一種替代方法，可提供最接近的向量比對，以換取大幅較低的執行時間。演算法由三個參數 `M`、 `EF_CONSTRUCTION`和 控制`EF_RUNTIME`。前兩個參數是在索引建立時間指定，無法變更。`EF_RUNTIME` 參數具有在建立索引時指定的預設值，但之後可以在任何個別查詢操作上覆寫。這三個參數互動，在擷取和查詢操作期間平衡記憶體和 CPU 消耗，並控制精確 KNN 搜尋的近似品質 （稱為取回率）。

在 HNSW 中， 參數 M 控制每個節點可連線的鄰數上限，從而塑造索引密度。諸如 32 及更高版本的 M 會產生更連線的圖形，從而提高召回和查詢速度，因為有更多路徑可以到達相關鄰。不過，它會增加索引大小、記憶體使用量，並減慢索引速度。較低的 M，例如 8 和以下，會產生較小、faster-to-build索引，且記憶體使用量較低，但回收減少，且由於連線較少，查詢可能需要更長的時間。

參數 EF\$1construction 決定在建置索引時要評估的候選連線數量。EF\$1construction 較高，例如 400 及更高，表示索引器在選取相鄰之前會考慮更多路徑，導致圖形在稍後同時改善召回和查詢效率，但在建構期間降低索引和更高 CPU 和記憶體使用成本。EF\$1construction 較低，例如 64-120，可加速索引並減少資源使用，但產生的圖形即使 EF\$1runtime 設定為高，也可能減少召回和慢查詢。

最後，EF\$1runtime 會在查詢期間管理搜尋的廣度，控制在執行時間探索多少候選鄰。將其設定為高可提高召回率和準確性，但代價是查詢延遲和 CPU 使用。低 EF\$1runtime 可讓查詢更快、更輕量，但召回率較低。與 M 或 EF\$1construction 不同，此參數不會影響索引大小或建置時間，使其成為在建立索引之後調整取回與延遲權衡的參數。

向量搜尋演算法 (Flat 和 HNSW) 都支援選用`INITIAL_CAP`參數。指定時，此參數會預先配置索引的記憶體，進而降低記憶體管理開銷並提高向量擷取速率。平面索引支援比 HNSW 更好的擷取速度。

像 HNSW 這樣的向量搜尋演算法可能無法有效地處理先前插入向量的刪除或覆寫。使用這些操作可能會導致索引記憶體消耗過多和/或召回品質降低。重新索引是還原最佳記憶體用量和/或召回的方法之一。

## 向量搜尋安全性
<a name="vector-search-security"></a>

命令和資料存取的 [Valkey ACL （存取控制清單）](https://valkey.io/topics/acl/) 安全機制都會擴展，以控制搜尋設施。完全支援個別搜尋命令的 ACL 控制。提供了新的 ACL 類別 `@search`，並更新了許多現有類別 (`@fast`、`@write`、 `@read`等），以包含新的命令。搜尋命令不會修改金鑰資料，這表示會保留用於寫入存取的現有 ACL 機器。索引的存在不會修改 `HASH`和 `JSON`操作的存取規則；一般金鑰層級存取控制仍會套用至這些命令。

具有 索引的搜尋命令也會透過 ACL 控制其存取。存取檢查是在整個索引層級執行，而不是在每個金鑰層級。這表示只有在該使用者具有存取該索引之金鑰空間字首清單中所有可能金鑰的許可時，才會將索引的存取權授予使用者。換句話說，索引的實際內容不會控制存取。相反地，它是 索引的理論內容，由用於安全檢查的字首清單所定義。使用者具有金鑰的讀取和/或寫入存取權，但無法存取包含該金鑰的索引的情況是可能的。請注意，建立或使用索引只需要對 金鑰空間的讀取存取權 – 不會考慮是否存在寫入存取權

# 向量搜尋功能和限制
<a name="vector-search-features-limits"></a>

## 向量搜尋可用性
<a name="vector-search-availability"></a>

Amazon ElastiCache 的向量搜尋可在所有AWS區域的節點型叢集上使用 Valkey 8.2 版，無需額外費用。您也可以透過從任何版本的 Valkey 或 Redis OSS 升級到 Valkey 8.2，在現有叢集上使用向量搜尋，只要[按幾下滑鼠，就不會停機](VersionManagement.HowTo.md)。

向量搜尋目前可用於資料分層節點以外的所有 ElastiCache 執行個體類型。在 t2、t3 和 t4g 執行個體上使用向量搜尋需要將微型執行個體的記憶體保留增加到至少 50%，小型執行個體則增加到 30%。如需詳細資訊，請參閱[此頁面](redis-memory-management.md)。

## 參數限制
<a name="parametric-restrictions"></a>

下表顯示各種向量搜尋項目的限制：


**向量搜尋限制**  

| 項目 | 最大值 | 
| --- | --- | 
| 向量中的維度數量 | 32768 | 
| 可建立的索引數量 | 10 | 
| 索引中的欄位數目 | 50 | 
| FT.SEARCH TIMEOUT 子句 （毫秒） | 60000 | 
| 每個索引允許的字首數目上限 | 16 | 
| 標籤欄位的長度上限 | 10000 | 
| 數值欄位的長度上限 | 256 | 
| HNSW M 參數 | 2000000 | 
| HNSW EF\$1CONSTRUCTION 參數 | 4096 | 
| HNSW EF\$1RUNTIME 參數 | 4096 | 

## 操作限制
<a name="operational-restrictions"></a>

### 索引持續性和回填
<a name="index-persistence-backfilling"></a>

更新程序有三個步驟。在第一個步驟中，修改 HASH 或 JSON 金鑰，並封鎖請求用戶端。第二個步驟是在背景執行，並更新包含修改後金鑰的每個索引。在第三個步驟中，用戶端會解除封鎖。因此，對於在與變動相同的連線上執行的查詢操作，該變更會立即顯示在搜尋結果中。不過，金鑰的插入或更新在短時間內可能不會出現在其他用戶端的搜尋結果中。在大量系統負載和/或大量資料變動期間，可見性延遲可能會變長。

向量搜尋功能會保留索引的定義，以及索引的內容。會儲存向量欄位的索引，但不會儲存 TAGS 和 NUMERIC 的索引，這表示必須在外部載入時重建它們 （完全同步或重新載入）。這表示在任何導致節點啟動或重新啟動的操作請求或事件期間，向量的索引定義和內容會從最新的快照還原。不需要使用者動作即可啟動此動作。不過，對於 TAGS 和 NUMERIC 索引，重建會在資料還原後立即做為回填操作執行。這在功能上等同於系統自動為每個定義的索引執行 FT.CREATE 命令。請注意，一旦還原資料，節點就可用於應用程式操作，但可能在索引回填完成之前，這表示應用程式會再次看到回填操作。

索引回填的完成不會在主要和複本之間同步。應用程式可能會意外看到這種缺乏同步的情況，因此建議應用程式在啟動搜尋操作之前，先驗證主要和所有複本的回填完成。

### 擴展限制
<a name="scaling-limits"></a>

在擴展事件期間，索引可能會在資料遷移時進行回填。這會導致搜尋查詢的召回率降低。

### 快照匯入/匯出和即時遷移
<a name="snapshot-import-export"></a>

來自具有搜尋索引之叢集的 RDB 檔案可以匯入至具有 8.2 版或更新版本的另一個 ElastiCache Valkey 叢集。新叢集會在載入 RDB 檔案時重建索引內容。不過，RDB 檔案中是否存在搜尋索引會限制該資料與舊版 Valkey 的相容性。只有另一個具有 Valkey 8.2 版或更新版本的 ElastiCache 叢集，才能了解向量搜尋功能定義的搜尋索引格式。不過，不包含索引的 RDB 檔案不會以此方式受到限制。

### 回填期間記憶體不足
<a name="out-of-memory-backfill"></a>

與 Valkey OSS 寫入操作類似，索引回填會受到out-of-memory的限制。如果在回填進行時填滿引擎記憶體，則會暫停所有回填。如果記憶體可用，則會繼續回填程序。當回填因記憶體不足而暫停時，可以刪除索引。

### 交易
<a name="transactions"></a>

命令 `FT.CREATE`、`FT.DROPINDEX`、`FT.ALIASDEL`、 `FT.ALIASADD`和 `FT.ALIASUPDATE`無法在交易內容中執行，即不在`MULTI/EXEC`區塊內或在 LUA 或 FUNCTION 指令碼內。

# 選擇適當的組態
<a name="choosing-configuration"></a>

在主控台體驗中，ElastiCache 可根據向量工作負載的記憶體和 cpu 需求，輕鬆選擇正確的執行個體類型。

## 記憶體使用量
<a name="memory-consumption"></a>

記憶體耗用取決於向量數量、維度數量、M 值和非向量資料數量，例如與向量相關聯的中繼資料或存放在執行個體中的其他資料。所需的總記憶體是實際向量資料所需的空間，以及向量索引所需的空間的組合。向量資料所需的空間是透過測量在 `HASH`或 `JSON`資料結構中存放向量所需的實際容量，以及對最接近記憶體板的負荷來計算，以獲得最佳記憶體配置。每個向量索引使用對存放在這些資料結構中的向量資料的參考，以及索引中向量的額外副本。建議依索引規劃此額外空間耗用。

向量數量取決於您決定將資料表示為向量的方式。例如，您可以選擇將單一文件表示為數個區塊，其中每個區塊代表向量。或者，您可以選擇將整個文件表示為單一向量。向量的維度取決於您選擇的內嵌模型。例如，如果您選擇使用AWS Titan 內嵌模型，則維度數目將為 1536。請注意，您應該測試執行個體類型，以確保其符合您的需求。

## 擴展工作負載
<a name="scaling-workload"></a>

向量搜尋支援所有三種擴展方法：水平、垂直和複本。擴展容量時，向量搜尋的行為就像一般的 Valkey，也就是說，增加個別節點的記憶體 （垂直擴展） 或增加節點數量 （水平擴展） 將增加整體容量。在叢集模式中，`FT.CREATE`命令可以傳送到叢集的任何主節點，系統會自動將新的索引定義分發給所有叢集成員。

不過，從效能角度來看，向量搜尋的行為與一般 Valkey 截然不同。向量搜尋的多執行緒實作表示其他 CPUs查詢和擷取輸送量中產生高達線性增加。水平擴展會產生擷取輸送量的線性增加，但可能會降低查詢輸送量。如果需要額外的查詢輸送量，則需要擴展複本或其他 CPUs。

# 向量搜尋命令
<a name="vector-search-commands"></a>

以下是向量搜尋支援的命令清單。

**Topics**
+ [FT.CREATE](vector-search-commands-ft.create.md)
+ [FT.SEARCH](vector-search-commands-ft.search.md)
+ [FT.DROPINDEX](vector-search-commands-ft.dropindex.md)
+ [FT.INFO](vector-search-commands-ft.info.md)
+ [FT.\$1LIST](vector-search-commands-ft.list.md)

# FT.CREATE
<a name="vector-search-commands-ft.create"></a>

`FT.CREATE` 命令會建立空索引並啟動回填程序。每個索引都包含多個欄位定義。每個欄位定義都會指定欄位名稱、欄位類型，以及每個索引鍵內的路徑，以找出宣告類型的值。某些欄位類型定義具有其他子類型指標。

對於 HASH 索引鍵上的索引，路徑與雜湊成員名稱相同。如有需要，選用的 `AS` 子句可用來重新命名 欄位。當成員名稱包含特殊字元時，重新命名欄位特別有用。

對於 JSON 索引鍵上的索引，路徑是宣告類型資料的 JSON 路徑。由於 JSON 路徑一律包含特殊字元，因此需要 `AS`子句。

**語法**

```
FT.CREATE <index-name>
ON HASH | JSON
[PREFIX <count> <prefix1> [<prefix2>...]]
SCHEMA 
(<field-identifier> [AS <alias>] 
| VECTOR [HNSW|FLAT] <attr_count> [<attribute_name> <attribute_value>])
| TAG [SEPARATOR <sep>] [CASESENSITIVE] 
| NUMERIC 
)+
```

**<index-name> （必要）：**這是您提供給索引的名稱。如果具有相同名稱的索引已存在，則會傳回錯誤。

**ON HASH \$1 JSON （選用）：**只有符合指定類型的索引鍵才會包含在此索引中。如果省略，則會假設 HASH。

**PREFIX <prefix-count> <prefix> （選用）：**如果指定此子句，則此索引只會包含以一個或多個指定字首相同位元組開頭的索引鍵。如果省略此子句，則會包含正確類型的所有金鑰。零長度字首也會符合正確類型的所有金鑰。

**欄位類型：**
+ TAG：標籤欄位是包含一或多個標籤值的字串。
  + SEPARATOR <sep> （選用）：`,.<>{}[]"':;!@#$%^&*()-+=~`用於分隔個別標籤的其中一個字元。如果省略，預設值為 `,`。
  + CASESENSITIVE （選用）：如果有，標籤比較會區分大小寫。預設值是標籤比較不區分大小寫。
+ NUMERIC：數字欄位包含數字。
+ VECTOR：向量欄位包含向量。目前支援兩種向量索引演算法：HNSW (Hierarchical Navigable Small World) 和 FLAT （暴力破解力）。每個演算法都有一組額外的屬性，有些是必要屬性和其他選用屬性。
  + FLAT：平面演算法提供確切的答案，但具有與索引向量數量成比例的執行時間，因此可能不適用於大型資料集。
    + DIM <number> （必要）：指定向量中的維度數目。
    + TYPE FLOAT32 （必要）：資料類型，目前僅支援 FLOAT32。
    + DISTANCE\$1METRIC 【L2 \$1 IP \$1 COSINE】 （必要）：指定距離演算法。
    + INITIAL\$1CAP <size> （選用）：初始索引大小。
  + HNSW：HNSW 演算法提供近似答案，但運作速度比 FLAT 快得多。
    + DIM <number> （必要）：指定向量中的維度數目。
    + TYPE FLOAT32 （必要）：資料類型，目前僅支援 FLOAT32。
    + DISTANCE\$1METRIC 【L2 \$1 IP \$1 COSINE】 （必要）：指定距離演算法。
    + INITIAL\$1CAP <size> （選用）：初始索引大小。
    + M <number> （選用）：每個圖層圖表中每個節點允許的傳出邊緣上限數量。在圖層零上，傳出邊緣的最大數量將為 2\$1M。 預設值為 16，上限為 512。
    + EF\$1CONSTRUCTION <number> （選用）：控制在索引建構期間檢查的向量數量。此參數的較高值將提高召回率，同時犧牲較長的索引建立時間。預設值為 200。最大值為 4096。
    + EF\$1RUNTIME <number> （選用）：控制查詢操作期間要檢查的向量數量。預設值為 10，最大值為 4096。您可以為每個執行的查詢設定此參數值。較高的值會增加查詢時間，但可改善查詢回收。

**回應：**確定或錯誤。

# FT.SEARCH
<a name="vector-search-commands-ft.search"></a>

執行指定索引的搜尋。系統會傳回符合查詢表達式的索引鍵。

```
FT.SEARCH <index-name> <query>
[NOCONTENT]
[RETURN <token_count> (<field-identifier> [AS <alias>])+]
[TIMEOUT timeout] 
[PARAMS <count> <name> <value> [<name> <value>]]
[LIMIT <offset> <count>]
```
+ <index> （必要）：您要查詢的此索引名稱。
+ <query> （必要）：查詢字串，請參閱下方以取得詳細資訊。
+ NOCONTENT （選用）：存在時，只會傳回產生的金鑰名稱，不會包含金鑰值。
+ 逾時 <逾時> （選用）：可讓您設定搜尋命令的逾時值。這必須是以毫秒為單位的整數。
+ PARAMS <count> <name1> <value1> <name2> <value2> ... （選用）： `count` 是引數數目，即值名稱對數目的兩倍。如需用量詳細資訊，請參閱查詢字串。
+ RETURN <count> <field1> <field2> ... （選用）：count 是要傳回的欄位數目。指定您要從文件中擷取的欄位，以及傳回值的任何別名。根據預設，除非設定 NOCONTENT 選項，否則所有欄位都會傳回，在這種情況下不會傳回任何欄位。如果計數設定為 0，則其行為與 NOCONTENT 相同。
+ LIMIT：<offset> <count>：可讓您選擇結果的一部分。第一個 <offset> 金鑰會略過，且最多只會包含 <count> 個金鑰。預設值為 LIMIT 0 10，最多傳回 10 個金鑰。
+ PARAMS：金鑰值對數量的兩倍。可以在查詢表達式中參考參數鍵/值對。如需詳細資訊，請參閱[向量搜尋查詢表達](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-overview.html#vector-search-query-expression)式。
+ DIALECT：<dialect> （選用）：指定您的方言。唯一支援的方言是 2。

**回應**

如果成功或發生錯誤，命令會傳回陣列。

成功時，回應陣列中的第一個項目代表相符金鑰的計數，後面接著每個相符金鑰的一個陣列項目。請注意，如果指定 `LIMIT`選項，它只會控制傳回的金鑰數目，而且不會影響第一個項目的值。

指定 `NOCONTENT` 時，回應中的每個項目僅包含相符的金鑰名稱。否則，每個項目都會包含相符的金鑰名稱，後面接著傳回欄位的陣列。索引鍵的結果欄位由一組名稱/值對組成。名字/值對適用於計算的距離。此對的名稱是從以「\$1\$1」開頭的向量欄位名稱建構，並以「\$1score」附加，且值為計算的距離。剩餘的名稱/值對是 `RETURN`子句所控制之金鑰的成員和值。

查詢字串符合此語法：

```
<filtering>=>[ KNN <K> @<vector_field_name> $<vector_parameter_name> <query-modifiers> ]
```

其中：
+ <filtering>：是 \$1 或篩選條件表達式。\$1 表示沒有篩選，因此會搜尋索引中的所有向量。您可以提供篩選條件表達式來指定要搜尋的向量子集。
+ <vector\$1field\$1name>：指定索引內向量欄位的名稱。
+ <K>：要傳回的最近鄰向量數目。
+ <vector\$1parameter\$1name>：其對應值提供 KNN 演算法查詢向量的 PARAM 名稱。請注意，此參數必須以小端數格式編碼為 32 位元 IEEE 754 二進位浮點。
+ <query-modifiers>：（選用） 修改此特定 KNN 搜尋的關鍵字/值對清單。目前支援兩個關鍵字：
  + EF\$1RUNTIME：此關鍵字隨附整數值，可覆寫建立索引時指定的 EF\$1RUNTIME 預設值。
  + AS：此關鍵字會伴隨字串值，成為結果中分數欄位的名稱，覆寫預設分數欄位名稱產生演算法。

**篩選條件表達式**

篩選條件表達式建構為包含在括號中的標籤和數值搜尋運算子的邏輯組合。

**標籤**

標籤搜尋運算子是以一或多個以 \$1 字元分隔的字串指定。如果指定的欄位包含任何一個指定的字串，則金鑰將滿足標籤搜尋運算子。

```
@<field_name>:{<tag>}
or
@<field_name>:{<tag1> | <tag2>}
or
@<field_name>:{<tag1> | <tag2> | ...}
```

例如，下列查詢會傳回藍色或黑色或綠色的文件。

`@color:{blue | black | green}`

另一個範例是，下列查詢會傳回包含 "hello world" 或 "hello universe" 的文件。

`@description:{hello world | hello universe}`

**數值範圍**

數值範圍運算子允許篩選查詢，只傳回指定開始和結束值之間的值。支援包含和獨佔範圍查詢。對於簡單的關聯式比較，\$1inf、-inf 可以與範圍查詢搭配使用。範圍搜尋運算子的語法為：

```
@<field_name>:[ [(] <bound> [(] <bound>]
```

...其中 <bound> 是數字或 \$1inf 或 -inf。沒有前置開放剖析的邊界是包含的，而具有前置開放剖析的邊界是排斥的。

使用下表做為將數學表達式映射至篩選查詢的指南：

```
min <= field <= max         @field:[min max]
min < field <= max          @field:[(min max]
min <= field < max            @field:[min (max]
min < field < max            @field:[(min (max]
field >= min                @field:[min +inf]
field > min                    @field:[(min +inf]
field <= max                @field:[-inf max]
field < max                    @field:[-inf (max]
field == val                @field:[val val]
```

**邏輯運算子**

多個標籤和數值搜尋運算子可用來建構使用邏輯運算子的複雜查詢。

**邏輯 AND**

若要設定邏輯 AND，請在述詞之間使用空格。例如：

`query1 query2 query3`

**邏輯 OR**

若要設定邏輯 OR，請在述詞之間使用空格。例如：

`query1 | query2 | query3`

**邏輯否定**

任何查詢都可以在每次查詢之前加上 `-` 字元來否定。負查詢會傳回不符合查詢的所有項目。這也包含沒有 欄位的金鑰。

例如，@genre：\$1comedy\$1 上的負面查詢會傳回所有非喜劇的書籍，以及所有沒有類型欄位的書籍。

下列查詢將傳回 2015 年至 2024 年之間未發佈或沒有年份欄位的所有「comedy」類型的書籍：@genre：【comedy】 -@year：【2015 2024】

**運算子優先順序**

一般運算子優先順序規則適用，即邏輯 NEGATE 是最高優先順序，後面接著邏輯 AND，然後是具有最低優先順序的邏輯 OR。括號可用來覆寫預設優先順序規則。

*合併邏輯運算子的範例*

邏輯運算子可以合併以形成複雜的篩選條件表達式。

下列查詢將傳回 2015 年至 2024 年間發佈的「comedy」或「horror」類型 (AND) 的所有書籍： `@genre:[comedy|horror] @year:[2015 2024]`

下列查詢將傳回 2015 年至 2024 年間發佈的「comedy」或「horror」類型 (OR) 的所有書籍： `@genre:[comedy|horror] | @year:[2015 2024]`

下列查詢將傳回 2015 年至 2024 年之間發佈的所有沒有類型欄位，或類型欄位不等於 "comedy" 的書籍： `-@genre:[comedy] @year:[2015 2024]`

# FT.DROPINDEX
<a name="vector-search-commands-ft.dropindex"></a>

**語法**

```
FT.DROPINDEX <index-name>
```

已刪除指定的索引。如果該索引不存在，則傳回 OK 或錯誤。
+ <index-name> （必要）：要刪除的索引名稱。

# FT.INFO
<a name="vector-search-commands-ft.info"></a>

**語法**

```
FT.INFO <index-name>
```

向量搜尋使用幾個額外的統計資料和計數器區段來增強 [FT.INFO](https://valkey.io/commands/info/) 命令。擷取 SEARCH 區段的請求將擷取下列所有統計資料：


| 金鑰名稱 | 值類型 | Description | 
| --- | --- | --- | 
| index\$1name | string | 索引的名稱 | 
| index\$1options | string | 預訂. 目前設定為「0」 | 
| index\$1definition | 陣列 | 如需這些陣列元素的定義，請參閱下文。 | 
| 屬性 | 屬性資訊的陣列 | 此陣列中每個已定義屬性的一個元素，請參閱下列屬性資訊定義。 | 
| num\$1docs | integer | 索引中目前包含的索引鍵數量 | 
| num\$1terms | integer | 預訂. 目前設定為「0」。 | 
| record\$1count | integer | 每個屬性的「大小」欄位總和。 | 
| hash\$1indexing\$1failures | integer | 屬性無法轉換為宣告屬性類型的次數。雖然名稱也適用於 JSON 金鑰。 | 
| backfill\$1in\$1progress | integer | 如果回填目前正在進行中，這會是 '1'，否則會是 '0' | 
| backfill\$1percent\$1complete | float | 回填完成的預估值，範圍 【0..1】 中的分數 | 
| mutation\$1queue\$1size | integer | 等待更新索引的金鑰數目。 | 
| recent\$1mutations\$1queue\$1delay | integer | 估計索引更新的延遲 （以秒為單位）。如果沒有進行中的更新，則為 0。 | 
| state | string | 回填狀態："ready" 表示回填已成功完成。"backfill\$1in\$1progress" 表示回填正在進行中。"backfill\$1paused\$1by\$1oom" 表示回填已因記憶體狀況不足而暫停。解決低記憶體條件後，恢復會繼續。 | 

index\$1definition 結構是索引鍵/值對的陣列，定義如下：


| 金鑰名稱 | 值類型 | Description | 
| --- | --- | --- | 
| key\$1type | string | 字串 'JSON' 或字串 'HASH' | 
| 字首 | 陣列 | 陣列中的每個元素都是索引的定義字首。如果在建立索引時未指定字首，則此陣列會有 0 個項目。 | 
| default\$1score | string | 預訂. 目前設定為「1」 | 

屬性資訊：屬性資訊是類型特定的。

數值屬性：


| 金錀 | 值類型 | Description | 
| --- | --- | --- | 
| identifier | string | 屬性在金鑰內的位置。雜湊成員名稱或 JSON 路徑 | 
| 別名 | string | 查詢描述中使用的屬性名稱。 | 
| type | string | 字串 "NUMERIC" | 
| size | integer | 此屬性中具有有效數值的索引鍵數目。 | 

標籤屬性：


| 金鑰名稱 | 值類型 | Description | 
| --- | --- | --- | 
| identifier | string | 屬性在金鑰內的位置。雜湊成員名稱或 JSON 路徑 | 
| 別名 | string | 查詢描述中使用的屬性名稱。 | 
| type | string | 字串 "TAG" | 
| SEPARATOR | character | 建立索引時定義的分隔符號字元 | 
| CASESENSITIVE | N/A | 此金鑰沒有相關聯的值。只有在使用此選項建立 屬性時，才會顯示此屬性。 | 
| size | integer | 此屬性中具有有效標籤值的索引鍵數目 | 

向量屬性：


| 金鑰名稱 | 值類型 | Description | 
| --- | --- | --- | 
| identifier | string | 屬性在金鑰內的位置。雜湊成員名稱或 JSON 路徑 | 
| 別名 | string | 查詢描述中使用的屬性名稱。 | 
| type | string | 字串 "VECTOR" | 
| index | character | 如需向量索引的進一步說明，請參閱下文。 | 

向量索引描述：


| 金鑰名稱 | 值類型 | Description | 
| --- | --- | --- | 
| 容量 | string | 索引的目前容量 | 
| 維度 | string | 每個向量中的元素數量 | 
| distance\$1metric | string | 其中一個「COSINE」、「L2」或「IP」 | 
| size | 陣列  | 向量索引的描述，請參閱下文。 | 
| data\$1type | string | 宣告的資料類型。目前僅支援「FLOAT32」。 | 
| 演算法 | 陣列  | 向量搜尋演算法的進一步說明。 | 

FLAT 向量搜尋演算法 描述：


| 金鑰名稱 | 值類型 | Description | 
| --- | --- | --- | 
| name | string | 演算法名稱：FLAT | 
| block\$1size | number | FLAT 索引區塊的大小。 | 

HNSW 向量索引描述：


| 金鑰名稱 | 值類型 | Description | 
| --- | --- | --- | 
| name | string | 演算法名稱：HNSW | 
| m | number | HNSW 的 "M" 參數 | 
| ef\$1construction | number | HNSW 的 "ef\$1construction" 參數 | 
| ef\$1runtime | number | HNSW 的 "ef\$1runtime" 參數。 | 

# FT.\$1LIST
<a name="vector-search-commands-ft.list"></a>

列出所有索引。

**語法**

```
FT._LIST 
```

傳回字串陣列，這些字串是目前定義的索引名稱。

# JSON for Valkey 和 Redis OSS 入門
<a name="json-gs"></a>

ElastiCache 支援原生 JavaScript 物件標記法 (JSON) 格式，這是一種簡單、無結構描述的方式來編碼 Valkey 和 Redis OSS 叢集內的複雜資料集。您可以在叢集內原生使用 JavaScript 物件標記法 (JSON) 格式存放和存取資料，並更新存放在這些叢集中的 JSON 資料，而不需要管理自訂程式碼來序列化和還原序列化。

除了針對透過 JSON 操作的應用程式使用 Valkey 和 Redis OSS API 操作之外，您現在可以有效率地擷取和更新 JSON 文件的特定部分，而無需操作整個物件。這可以提高效能並降低成本。您也可以使用 [Goessner 式](https://goessner.net/articles/JsonPath/) `JSONPath` 查詢，搜尋 JSON 文件內容。

您建立使用支援引擎版本的叢集後，JSON 資料類型和關聯的命令即自動可用。API 相容和 RDB 相容於 JSON 模組第 2 版，因此您可以輕鬆地將現有的 JSON 型 Valkey 和 Redis OSS 應用程式遷移至 ElastiCache。如需支援命令的詳細資訊，請參閱 [支援的 Valkey 和 Redis OSS 命令JSON 命令](json-list-commands.md)。

JSON 相關指標 `JsonBasedCmds` 和 `JsonBasedCmdsLatency` 已整合至 CloudWatch 中，以監控此資料類型的使用情況。如需詳細資訊，請參閱 [Valkey 和 Redis OSS 的指標](CacheMetrics.Redis.md)。

**注意**  
若要使用 JSON，您必須執行 Valkey 7.2 和更新版本，或 Redis OSS 6.2.6 或更新版本。

**Topics**
+ [JSON 資料類型概觀](json-document-overview.md)
+ [支援的 Valkey 和 Redis OSS 命令](json-list-commands.md)

# JSON 資料類型概觀
<a name="json-document-overview"></a>

ElastiCache 支援許多使用 JSON 資料類型的 Valkey 和 Redis OSS 命令。以下是 JSON 資料類型的概觀，以及支援命令的詳細清單。

## 術語
<a name="json-terminology"></a>


****  

| 術語 | 描述 | 
| --- | --- | 
|  JSON 文件 | 參考 JSON 金鑰的值。 | 
|  JSON 值 | 指一部分 JSON 文件，包括代表整份文件的根。值可以是容器或容器內的項目。 | 
|  JSON 元素 | 等於 JSON 值。 | 

## 支援的 JSON 標準
<a name="Supported-JSON-Standard"></a>

JSON 格式符合 [RFC 7159](https://www.ietf.org/rfc/rfc7159.txt) 和 [ECMA-404](https://www.ietf.org/rfc/rfc7159.txt) JSON 資料交換標準。支援 JSON 文字中的 UTF-8 [Unicode](https://www.unicode.org/standard/WhatIsUnicode.html)。

## 根元素
<a name="json-root-element"></a>

根元素可為任何 JSON 資料類型。請注意，在舊版 RFC 4627 中，只允許將物件或陣列當作根值。由於更新至 RFC 7159，JSON 文件的根可為任何 JSON 資料類型。

## 文件大小限制
<a name="json-document-size-limit"></a>

JSON 文件會以針對快速存取和修改最佳化的格式，儲存在內部。比起相同文件的等同序列化版本，這種格式一般會導致使用更多記憶體。

單一 JSON 文件的記憶體使用量限制為 64 MB，這是記憶體內資料結構的大小，而不是 JSON 字串。您可以使用 `JSON.DEBUG MEMORY` 命令，查看 JSON 文件使用的記憶體容量。

## JSON ACL
<a name="json-acls"></a>
+ 新類別 @json 類似於現有依資料類型類別 (@string、@hash 等)，加入以簡化管理 JSON 命令和資料的存取權。沒有其他現有的 Valkey 或 Redis OSS 命令是 @json 類別的成員。所有 JSON 命令都會強制執行任何索引鍵空間或命令限制和許可。
+ 有五個現有的 Valkey 和 Redis OSS ACL 類別已更新，以包含新的 JSON 命令：@read、@write、@fast、@slow 和 @admin。下表說明 JSON 命令對應至適當類別。


**ACL**  

| JSON 命令 | @read | @write | @fast | @slow | @admin | 
| --- | --- | --- | --- | --- | --- | 
|  JSON.ARRAPPEND |  | y | y |  |  | 
|  JSON.ARRINDEX | y |  | y |  |  | 
|  JSON.ARRINSERT |  | y | y |  |  | 
|  JSON.ARRLEN | y |  | y |  |  | 
|  JSON.ARRPOP |  | y | y |  |  | 
|  JSON.ARRTRIM |  | y | y |  |  | 
|  JSON.CLEAR |  | y | y |  |  | 
|  JSON.DEBUG | y |  |  | y | y | 
|  JSON.DEL |  | y | y |  |  | 
|  JSON.FORGET |  | y | y |  |  | 
|  JSON.GET | y |  | y |  |  | 
|  JSON.MGET | y |  | y |  |  | 
|  JSON.NUMINCRBY |  | y | y |  |  | 
|  JSON.NUMMULTBY |  | y | y |  |  | 
|  JSON.OBJKEYS | y |  | y |  |  | 
|  JSON.OBJLEN | y |  | y |  |  | 
|  JSON.RESP | y |  | y |  |  | 
|  JSON.SET |  | y |  | y |  | 
|  JSON.STRAPPEND |  | y | y |  |  | 
|  JSON.STRLEN | y |  | y |  |  | 
|  JSON.STRLEN | y |  | y |  |  | 
|  JSON.TOGGLE |  | y | y |  |  | 
|  JSON.TYPE | y |  | y |  |  | 
|  JSON.NUMINCRBY |  | y | y |  |  | 

## 巢狀深度限制
<a name="json-nesting-depth-limit"></a>

JSON 物件或陣列具有本身是另一個 JSON 物件或陣列的元素時，該內部物件或陣列稱之為在外部物件或陣列中「巢狀」。巢狀深度上限為 128。任何建立巢狀深度大於 128 文件的嘗試，都會遭到拒絕，並顯示錯誤。

## 命令語法
<a name="json-command-syntax"></a>

大多數命令需要金鑰名稱做為第一個引數。部分命令也有路徑引數。如果路徑引數為選用且未提供，則預設為根。

 標記法：
+ 必要引數以角括弧括住。例如：<key>
+ 選用引數以方括弧括住。例如：[path]
+ 其他選用引數會以省略號 ("…") 表示。例如：[json ...]

## 路徑語法
<a name="json-path-syntax"></a>

Redis JSON 支援兩種路徑語法：
+ **增強型語法** – 按照 [Goessner](https://goessner.net/articles/JsonPath/) 所述的 JSONPath 語法，如下表所示。為清楚說明，我們重新排序並修改表格中的描述。
+ **受限語法** – 查詢功能有限。

**注意**  
部分命令的結果對於使用哪種類型的路徑語法很敏感。

 如果查詢路徑以 '\$1' 開頭，它會使用增強型語法。否則，將使用受限語法。

**增強型語法**


****  

| 符號/表達式 | 描述 | 
| --- | --- | 
|  \$1 | 根元素。 | 
|  . 或 [] | 子運算子。 | 
|  .. | 遞迴下降。 | 
|  \$1 | 萬用字元。物件或陣列中的所有元素。 | 
|  [] | 陣列下標運算子。索引以 0 為基礎。 | 
|  [,] | 聯集運算子。 | 
|  [start:end:step] | 陣列分割運算子。 | 
|  ?() | 將篩選條件 (指令碼) 表達式套用至目前陣列或物件。 | 
|  () | 篩選條件表達式。 | 
|  @ | 用於指正在處理的目前節點的篩選條件表達式。 | 
|  == | 等於，用於篩選條件表達式。 | 
|  \$1= | 不等於，用於篩選條件表達式。 | 
|  > | 大於，用於篩選條件表達式。 | 
|  >= | 大於等於，用於篩選條件表達式。 | 
|  < | 小於，用於篩選條件表達式。 | 
|  <= | 小於等於，用於篩選條件表達式。 | 
|  && | 邏輯 AND，用於結合多個篩選條件表達式。 | 
|  \$1\$1 | 邏輯 OR，用於結合多個篩選條件表達式。 | 

**範例**

下列範例是根據 [Goessner](https://goessner.net/articles/JsonPath/) 的範例 XML 資料，我們已新增其他欄位來修改。

```
{ "store": {
    "book": [ 
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95,
        "in-stock": true,
        "sold": true
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99,
        "in-stock": false,
        "sold": true
      },
      { "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99,
        "in-stock": true,
        "sold": false
      },
      { "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99,
        "in-stock": false,
        "sold": false
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95,
      "in-stock": true,
      "sold": false
    }
  }
}
```


****  

| 路徑 | 描述 | 
| --- | --- | 
|  \$1.store.book[\$1].author | 商店中所有書籍的作者。 | 
|  \$1..author | 所有作者。 | 
|  \$1.store.\$1 | 商店的所有成員。 | 
|  \$1["store"].\$1 | 商店的所有成員。 | 
|  \$1.store..price | 商店裡所有商品的價格。 | 
|  \$1..\$1 | JSON 結構的所有遞迴成員。 | 
|  \$1..book[\$1] | 所有書籍。 | 
|  \$1..book[0] | 第一本書。 | 
|  \$1..book[-1] | 最後一本書。 | 
|  \$1..book[0:2] | 前兩本書。 | 
|  \$1..book[0,1] | 前兩本書。 | 
|  \$1..book[0:4] | 從索引 0 到 3 (不包括結尾索引) 的書籍。 | 
|  \$1..book[0:4:2] | 索引 0、2 的書籍。 | 
|  \$1..book[?(@.isbn)] | 有 ISBN 編號的所有書籍。 | 
|  \$1..book[?(@.price<10)] | 不到 10 美元的所有書籍。 | 
|  '\$1..book[?(@.price < 10)]' | 不到 10 美元的所有書籍。(如果路徑包含空格，必須以英文引號括住。) | 
|  '\$1..book[?(@["price"] < 10)]' | 不到 10 美元的所有書籍。 | 
|  '\$1..book[?(@.["price"] < 10)]' | 不到 10 美元的所有書籍。 | 
|  \$1..book[?(@.price>=10&&@.price<=100)] | 價格範圍介於 10 至 100 美元 (含) 的所有書籍。 | 
|  '\$1..book[?(@.price>=10 && @.price<=100)]' | 價格範圍介於 10 至 100 美元 (含) 的所有書籍。(如果路徑包含空格，必須以英文引號括住。) | 
|  \$1..book[?(@.sold==true\$1\$1@.in-stock==false)] | 售完或缺貨的所有書籍。 | 
|  '\$1..book[?(@.sold == true \$1\$1 @.in-stock == false)]' | 售完或缺貨的所有書籍。(如果路徑包含空格，必須以英文引號括住。) | 
|  '\$1.store.book[?(@.["category"] == "fiction")]' | 小說類別中的所有書籍。 | 
|  '\$1.store.book[?(@.["category"] \$1= "fiction")]' | 非小說類別中的所有書籍。 | 

其他篩選條件表達式範例：

```
127.0.0.1:6379> JSON.SET k1 . '{"books": [{"price":5,"sold":true,"in-stock":true,"title":"foo"}, {"price":15,"sold":false,"title":"abc"}]}'
OK
127.0.0.1:6379> JSON.GET k1 $.books[?(@.price>1&&@.price<20&&@.in-stock)]
"[{\"price\":5,\"sold\":true,\"in-stock\":true,\"title\":\"foo\"}]"
127.0.0.1:6379> JSON.GET k1 '$.books[?(@.price>1 && @.price<20 && @.in-stock)]'
"[{\"price\":5,\"sold\":true,\"in-stock\":true,\"title\":\"foo\"}]"
127.0.0.1:6379> JSON.GET k1 '$.books[?((@.price>1 && @.price<20) && (@.sold==false))]'
"[{\"price\":15,\"sold\":false,\"title\":\"abc\"}]"
127.0.0.1:6379> JSON.GET k1 '$.books[?(@.title == "abc")]'
[{"price":15,"sold":false,"title":"abc"}]

127.0.0.1:6379> JSON.SET k2 . '[1,2,3,4,5]'
127.0.0.1:6379> JSON.GET k2 $.*.[?(@>2)]
"[3,4,5]"
127.0.0.1:6379> JSON.GET k2 '$.*.[?(@ > 2)]'
"[3,4,5]"

127.0.0.1:6379> JSON.SET k3 . '[true,false,true,false,null,1,2,3,4]'
OK
127.0.0.1:6379> JSON.GET k3 $.*.[?(@==true)]
"[true,true]"
127.0.0.1:6379> JSON.GET k3 '$.*.[?(@ == true)]'
"[true,true]"
127.0.0.1:6379> JSON.GET k3 $.*.[?(@>1)]
"[2,3,4]"
127.0.0.1:6379> JSON.GET k3 '$.*.[?(@ > 1)]'
"[2,3,4]"
```

**受限語法**


****  

| 符號/表達式 | 描述 | 
| --- | --- | 
|  . 或 [] | 子運算子。 | 
|  [] | 陣列下標運算子。索引以 0 為基礎。 | 

**範例**


****  

| 路徑 | 描述 | 
| --- | --- | 
|  .store.book[0].author | 第一本書的作者。 | 
|  .store.book[-1].author | 最後一本書的作者。 | 
|  .address.city | 城市名稱。 | 
|  ["store"]["book"][0]["title"] | 第一本書的標題。 | 
|  ["store"]["book"][-1]["title"] | 最後一本書的標題。 | 

**注意**  
本文件中引用的所有 [Goessner](https://goessner.net/articles/JsonPath/) 內容均受[創用 CC 授權](https://creativecommons.org/licenses/by/2.5/)規範。

## 常見錯誤字首
<a name="json-error-prefixes"></a>

每個錯誤訊息都有一個字首。以下是常見錯誤字首清單。


****  

| 字首 | 描述 | 
| --- | --- | 
|  ERR | 一般錯誤。 | 
|  LIMIT | 超過大小上限時發生的錯誤。例如，超過文件大小上限或巢狀深度限制。 | 
|  NONEXISTENT | 沒有索引鍵或路徑。 | 
|  OUTOFBOUNDARIES | 超出範圍的陣列索引。 | 
|  SYNTAXERR | 語法錯誤。 | 
|  WRONGTYPE | 錯誤值類型。 | 

## JSON 相關指標
<a name="json-info-metrics"></a>

提供下列 JSON 資訊指標：


****  

| Info | 描述 | 
| --- | --- | 
|  json\$1total\$1memory\$1bytes | 分配給 JSON 物件的總記憶體。 | 
|  json\$1num\$1documents | Valkey 或 Redis OSS 中的文件總數。 | 

若要查詢核心指標，請執行下列命令：

```
info json_core_metrics
```

## ElastiCache for Valkey 和 Redis OSS 如何與 JSON 互動
<a name="json-differences"></a>

下一節說明 ElastiCache for Valkey 和 Redis OSS 如何與 JSON 資料類型互動。

### 運算子優先順序
<a name="json-operator-precedence"></a>

評估用於篩選的條件表達式時，&& 優先，然後評估 \$1\$1，就像大多數語言一樣。系統會先執行括弧內的操作。

### 路徑巢狀上限行為
<a name="json-max-path"></a>

 ElastiCache for Redis OSS 中的最大路徑巢狀限制為 128。`$.a.b.c.d...` 等值只能達到 128 個等級。

### 處理數值
<a name="json-about-numbers"></a>

JSON 沒有另外的整數和浮點數資料類型。均稱為數字。

數值表示法：

輸入收到 JSON 數字時，數字會轉換為兩個內部二進位表示法之一：64 位元帶正負號的整數，或 64 位元 IEEE 雙精確度浮點數。不會保留原始字串和全部格式化。因此，數字當作 JSON 回應的一部分輸出時，會從內部二進位表示法，轉換為使用一般格式化規則的可列印字串。這些規則可能導致產生的字串與接收的字串不同。

算術命令 `NUMINCRBY` 和 `NUMMULTBY`：
+ 如果兩個數字都是整數，且結果超出 `int64` 範圍，會自動變成 64 位元 IEEE 雙精確度浮點數。
+ 如果其中至少一個數字是浮點數，結果會是 64 位元 IEEE 雙精確度浮點數。
+ 如果結果超過 64 位元 IEEE 雙精確度範圍，命令會傳回 `OVERFLOW` 錯誤。

如需可用命令的詳細清單，請參閱[支援的 Valkey 和 Redis OSS 命令JSON 命令](json-list-commands.md)。

### 直接陣列篩選
<a name="json-direct-array-filtering"></a>

ElastiCache for Valkey 或 Redis OSS 會直接篩選陣列物件。

對於 之類的資料`[0,1,2,3,4,5,6]`和 之類的路徑查詢`$[?(@<4)]`，或 之類的資料`{"my_key":[0,1,2,3,4,5,6]}`和 之類的路徑查詢`$.my_key[?(@<4)]`，ElastiCache 會在這兩種情況下傳回 【1，2，3】。

### 陣列索引行為
<a name="json-direct-array-indexing"></a>

ElastiCache for Valkey 或 Redis OSS 允許陣列的正索引和負索引。針對長度為五的陣列，0 會查詢第一個元素，1 會查詢第二個，以此類推。負數從陣列結尾開始，所以 -1 會查詢第五個元素，-2 會查詢第四個元素，以此類推。

為了確保客戶的可預測行為，ElastiCache 不會將陣列索引向下或向上四捨五入，因此如果您的陣列長度為 5，呼叫索引 5 或更高，或 -6 或更低，則不會產生結果。

### 嚴格語法評估
<a name="json-strict-syntax-evaluation"></a>

即使路徑的子集包含有效路徑，MemoryDB 也不允許使用無效語法的 JSON 路徑。這是為了我們的客戶保持正確行為。

# 支援的 Valkey 和 Redis OSS 命令
<a name="json-list-commands"></a>

ElastiCache 支援下列 Valkey 和 Redis OSS JSON 命令：

**Topics**
+ [JSON.ARRAPPEND](json-arrappend.md)
+ [JSON.ARRINDEX](json-arrindex.md)
+ [JSON.ARRINSERT](json-arrinsert.md)
+ [JSON.ARRLEN](json-arrlen.md)
+ [JSON.ARRPOP](json-arrpop.md)
+ [JSON.ARRTRIM](json-arrtrim.md)
+ [JSON.CLEAR](json-clear.md)
+ [JSON.DEBUG](json-debug.md)
+ [JSON.DEL](json-del.md)
+ [JSON.FORGET](json-forget.md)
+ [JSON.GET](json-get.md)
+ [JSON.MGET](json-mget.md)
+ [JSON.MSET](json-mset.md)
+ [JSON.NUMINCRBY](json-numincrby.md)
+ [JSON.NUMMULTBY](json-nummultby.md)
+ [JSON.OBJLEN](json-objlen.md)
+ [JSON.OBJKEYS](json-objkeys.md)
+ [JSON.RESP](json-resp.md)
+ [JSON.SET](json-set.md)
+ [JSON.STRAPPEND](json-strappend.md)
+ [JSON.STRLEN](json-strlen.md)
+ [JSON.TOGGLE](json-toggle.md)
+ [JSON.TYPE](json-type.md)

# JSON.ARRAPPEND
<a name="json-arrappend"></a>

將一或多個值附加到路徑中的陣列值。

語法

```
JSON.ARRAPPEND <key> <path> <json> [json ...]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (必要) – JSON 路徑。
+ json (必要) – 要附加至陣列的 JSON 值。

**傳回**

如果路徑是增強型語法：
+ 整數陣列代表每個路徑的新陣列長度。
+ 如果值不是陣列，其相應的傳回值為 null。
+ 如果沒有路徑，會發生 `NONEXISTENT` 錯誤。

如果路徑是受限語法：
+ 整數，新陣列長度。
+ 如果選取多個陣列值，命令會傳回第一個更新陣列的新長度。
+ 如果路徑上的值不是陣列，會發生 `WRONGTYPE` 錯誤。
+ 如果輸入 json 引數之一不是有效的 JSON 字串，會發生 `SYNTAXERR` 錯誤。
+ 如果沒有路徑，會發生 `NONEXISTENT` 錯誤。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRAPPEND  k1 $[*] '"c"'
1) (integer) 1
2) (integer) 2
3) (integer) 3
127.0.0.1:6379> JSON.GET k1
"[[\"c\"],[\"a\",\"c\"],[\"a\",\"b\",\"c\"]]"
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRAPPEND  k1 [-1] '"c"'
(integer) 3
127.0.0.1:6379> JSON.GET k1
"[[],[\"a\"],[\"a\",\"b\",\"c\"]]"
```

# JSON.ARRINDEX
<a name="json-arrindex"></a>

搜尋路徑的陣列中第一個純量 JSON 值。
+ 將索引四捨五入到陣列的開頭和結尾，處理超出範圍的錯誤。
+ 如果開頭 > 結尾，傳回 -1 (找不到)。

語法

```
JSON.ARRINDEX <key> <path> <json-scalar> [start [end]]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (必要) – JSON 路徑。
+ json-scalar (必要) – 要搜尋的純量值。JSON 純量是指不是物件或陣列的值。也就是說，字串、數字、布林值和 null 是純量值。
+ start (選用) – 開頭索引，包含。如果未提供，預設為 0。
+ end (選用) - 結束索引，排除。如果未提供，預設為 0，表示包含最後一個元素。0 或 -1 表示包含最後一個元素。

**傳回**

如果路徑是增強型語法：
+ 整數陣列。每個值都是路徑的陣列中相符元素的索引。如果找不到，則值為 -1。
+ 如果值不是陣列，其相應的傳回值為 null。

如果路徑是受限語法：
+ 如果找不到，則為整數、相符元素的索引或 -1。
+ 如果路徑上的值不是陣列，會發生 `WRONGTYPE` 錯誤。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"], ["a", "b", "c"]]'
OK
127.0.0.1:6379> JSON.ARRINDEX k1 $[*] '"b"'
1) (integer) -1
2) (integer) -1
3) (integer) 1
4) (integer) 1
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"children": ["John", "Jack", "Tom", "Bob", "Mike"]}'
OK
127.0.0.1:6379> JSON.ARRINDEX k1 .children '"Tom"'
(integer) 2
```

# JSON.ARRINSERT
<a name="json-arrinsert"></a>

將一或多個值插入索引前路徑的陣列值。

語法

```
JSON.ARRINSERT <key> <path> <index> <json> [json ...]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (必要) – JSON 路徑。
+ index (必要) – 插入值之前的陣列索引。
+ json (必要) – 要附加至陣列的 JSON 值。

**傳回**

如果路徑是增強型語法：
+ 整數陣列代表每個路徑的新陣列長度。
+ 如果值是空陣列，其相應的傳回值為 null。
+ 如果值不是陣列，其相應的傳回值為 null。
+ 如果索引引數超出範圍，會發生 `OUTOFBOUNDARIES` 錯誤。

如果路徑是受限語法：
+ 整數，新陣列長度。
+ 如果路徑上的值不是陣列，會發生 `WRONGTYPE` 錯誤。
+ 如果索引引數超出範圍，會發生 `OUTOFBOUNDARIES` 錯誤。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRINSERT k1 $[*] 0 '"c"'
1) (integer) 1
2) (integer) 2
3) (integer) 3
127.0.0.1:6379> JSON.GET k1
"[[\"c\"],[\"c\",\"a\"],[\"c\",\"a\",\"b\"]]"
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRINSERT k1 . 0 '"c"'
(integer) 4
127.0.0.1:6379> JSON.GET k1
"[\"c\",[],[\"a\"],[\"a\",\"b\"]]"
```

# JSON.ARRLEN
<a name="json-arrlen"></a>

取得路徑上陣列值的長度。

語法

```
JSON.ARRLEN <key> [path] 
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。

**傳回**

如果路徑是增強型語法：
+ 整數陣列代表每個路徑的陣列長度。
+ 如果值不是陣列，其相應的傳回值為 null。
+ 如果沒有文件索引鍵，則為 null。

如果路徑是受限語法：
+ 整數，陣列長度。
+ 如果選取多個物件，命令會傳回第一個陣列的長度。
+ 如果路徑上的值不是陣列，會發生 `WRONGTYPE` 錯誤。
+ 如果沒有路徑，會發生 `NONEXISTENT JSON` 錯誤。
+ 如果沒有文件索引鍵，則為 null。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"], ["a", "b", "c"]]'
OK
127.0.0.1:6379> JSON.ARRLEN k1 $[*]
1) (integer) 0
2) (integer) 1
3) (integer) 2
4) (integer) 3

127.0.0.1:6379> JSON.SET k2 . '[[], "a", ["a", "b"], ["a", "b", "c"], 4]'
OK
127.0.0.1:6379> JSON.ARRLEN k2 $[*]
1) (integer) 0
2) (nil)
3) (integer) 2
4) (integer) 3
5) (nil)
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"], ["a", "b", "c"]]' 
OK 
127.0.0.1:6379> JSON.ARRLEN k1 [*] 
(integer) 0 
127.0.0.1:6379> JSON.ARRLEN k1 [1] 
(integer) 1 
127.0.0.1:6379> JSON.ARRLEN k1 [2] 
(integer) 2

127.0.0.1:6379> JSON.SET k2 . '[[], "a", ["a", "b"], ["a", "b", "c"], 4]' 
OK
127.0.0.1:6379> JSON.ARRLEN k2 [1] 
(error) WRONGTYPE JSON element is not an array 
127.0.0.1:6379> JSON.ARRLEN k2 [0] 
(integer) 0
127.0.0.1:6379> JSON.ARRLEN k2 [6] 
(error) OUTOFBOUNDARIES Array index is out of bounds
127.0.0.1:6379> JSON.ARRLEN k2 a.b 
(error) NONEXISTENT JSON path does not exist
```

# JSON.ARRPOP
<a name="json-arrpop"></a>

移除並傳回陣列索引的元素。彈出空陣列會傳回 null。

語法

```
JSON.ARRPOP <key> [path [index]]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。
+ index (選用) – 開始彈出的陣列位置。
  + 如果未提供，預設為 -1，表示最後一個元素。
  + 負值表示從最後一個元素數起的位置。
  + 超出範圍的索引會四捨五入到各自的陣列範圍。

**傳回**

如果路徑是增強型語法：
+ 大量字串陣列代表每個路徑的彈出值。
+ 如果值是空陣列，其相應的傳回值為 null。
+ 如果值不是陣列，其相應的傳回值為 null。

如果路徑是受限語法：
+ 大量字串，代表彈出的 JSON 值。
+ 如果陣列是空的，則為 null。
+ 如果路徑上的值不是陣列，會發生 `WRONGTYPE` 錯誤。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRPOP k1 $[*]
1) (nil)
2) "\"a\""
3) "\"b\""
127.0.0.1:6379> JSON.GET k1
"[[],[],[\"a\"]]"
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRPOP k1
"[\"a\",\"b\"]"
127.0.0.1:6379> JSON.GET k1
"[[],[\"a\"]]"

127.0.0.1:6379> JSON.SET k2 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRPOP k2 . 0
"[]"
127.0.0.1:6379> JSON.GET k2
"[[\"a\"],[\"a\",\"b\"]]"
```

# JSON.ARRTRIM
<a name="json-arrtrim"></a>

修剪路徑上的陣列，使其成為子陣列 [start, end]，都包含在內。
+ 如果陣列是空的，不必做任何事，會傳回 0。
+ 如果開頭 <0，則將其視為 0。
+ 如果結尾 >= 大小 (陣列的大小)，則將其視為 size-1。
+ 如果開頭 >= 大小或開頭 > 結尾，清空陣列並傳回 0。

語法

```
JSON.ARRTRIM <key> <path> <start> <end>
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (必要) – JSON 路徑。
+ start (必要) – 開頭索引，包含。
+ end (必要) – 結束索引，包含。

**傳回**

如果路徑是增強型語法：
+ 整數陣列代表每個路徑的新陣列長度。
+ 如果值是空陣列，其相應的傳回值為 null。
+ 如果值不是陣列，其相應的傳回值為 null。
+ 如果索引引數超出範圍，會發生 `OUTOFBOUNDARIES` 錯誤。

如果路徑是受限語法：
+ 整數，新陣列長度。
+ 如果陣列是空的，則為 null。
+ 如果路徑上的值不是陣列，會發生 `WRONGTYPE` 錯誤。
+ 如果索引引數超出範圍，會發生 `OUTOFBOUNDARIES` 錯誤。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"], ["a", "b", "c"]]'
OK
127.0.0.1:6379> JSON.ARRTRIM k1 $[*] 0 1
1) (integer) 0
2) (integer) 1
3) (integer) 2
4) (integer) 2
127.0.0.1:6379> JSON.GET k1
"[[],[\"a\"],[\"a\",\"b\"],[\"a\",\"b\"]]"
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"children": ["John", "Jack", "Tom", "Bob", "Mike"]}'
OK
127.0.0.1:6379> JSON.ARRTRIM k1 .children 0 1
(integer) 2
127.0.0.1:6379> JSON.GET k1 .children
"[\"John\",\"Jack\"]"
```

# JSON.CLEAR
<a name="json-clear"></a>

清除陣列或路徑上的物件。

語法

```
JSON.CLEAR <key> [path]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。

**傳回**
+ 整數，已清除的容器數目。
+ 清除一個空陣列或物件計為清除 1 個容器。
+ 清除非容器值會傳回 0。

**範例**

```
127.0.0.1:6379> JSON.SET k1 . '[[], [0], [0,1], [0,1,2], 1, true, null, "d"]'
OK
127.0.0.1:6379>  JSON.CLEAR k1  $[*]
(integer) 7
127.0.0.1:6379> JSON.CLEAR k1  $[*]
(integer) 4
127.0.0.1:6379> JSON.SET k2 . '{"children": ["John", "Jack", "Tom", "Bob", "Mike"]}'
OK
127.0.0.1:6379> JSON.CLEAR k2 .children
(integer) 1
127.0.0.1:6379> JSON.GET k2 .children
"[]"
```

# JSON.DEBUG
<a name="json-debug"></a>

報告資訊。支援的子命令如下：
+ MEMORY <key> [path] – 報告 JSON 值的記憶體使用量 (以位元組為單位)。如果未提供，路徑預設為根。
+ FIELDS <key> [path] – 報告指定文件路徑的欄位數目。如果未提供，路徑預設為根。每個非容器 JSON 值都計為一個欄位。物件和陣列遞迴計為每個內含 JSON 值的一個欄位。除根容器外，每個容器值都計為一個附加欄位。
+ HELP – 列印命令的說明訊息。

語法

```
JSON.DEBUG <subcommand & arguments>
```

取決於子命令：

MEMORY
+ 如果路徑是增強型語法：
  + 傳回整數陣列，代表每個路徑上的 JSON 值記憶體大小 (以位元組為單位)。
  + 如果 Valkey 或 Redis OSS 金鑰不存在，則傳回空陣列。
+ 如果路徑是受限語法：
  + 傳回整數、記憶體大小，以及 JSON 值 (以位元組為單位)。
  + 如果 Valkey 或 Redis OSS 金鑰不存在，則傳回 null。

FIELDS
+ 如果路徑是增強型語法：
  + 傳回整數陣列，代表每個路徑上的 JSON 值欄位數量。
  + 如果 Valkey 或 Redis OSS 金鑰不存在，則傳回空陣列。
+ 如果路徑是受限語法：
  + 傳回整數，JSON 值的欄位數量。
  + 如果 Valkey 或 Redis OSS 金鑰不存在，則傳回 null。

HELP – 傳回說明訊息的陣列。

**範例**

增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[1, 2.3, "foo", true, null, {}, [], {"a":1, "b":2}, [1,2,3]]'
OK
127.0.0.1:6379> JSON.DEBUG MEMORY k1 $[*]
1) (integer) 16
2) (integer) 16
3) (integer) 19
4) (integer) 16
5) (integer) 16
6) (integer) 16
7) (integer) 16
8) (integer) 50
9) (integer) 64
127.0.0.1:6379> JSON.DEBUG FIELDS k1 $[*]
1) (integer) 1
2) (integer) 1
3) (integer) 1
4) (integer) 1
5) (integer) 1
6) (integer) 0
7) (integer) 0
8) (integer) 2
9) (integer) 3
```

受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK
127.0.0.1:6379> JSON.DEBUG MEMORY k1
(integer) 632
127.0.0.1:6379> JSON.DEBUG MEMORY k1 .phoneNumbers
(integer) 166

127.0.0.1:6379> JSON.DEBUG FIELDS k1
(integer) 19
127.0.0.1:6379> JSON.DEBUG FIELDS k1 .address
(integer) 4

127.0.0.1:6379> JSON.DEBUG HELP
1) JSON.DEBUG MEMORY <key> [path] - report memory size (bytes) of the JSON element. Path defaults to root if not provided.
2) JSON.DEBUG FIELDS <key> [path] - report number of fields in the JSON element. Path defaults to root if not provided.
3) JSON.DEBUG HELP - print help message.
```

# JSON.DEL
<a name="json-del"></a>

刪除文件索引鍵中路徑上的 JSON 值。如果路徑是根，則相當於從 Valkey 或 Redis OSS 刪除金鑰。

語法

```
JSON.DEL <key> [path]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。

**傳回**
+ 刪除的元素數目。
+ 如果 Valkey 或 Redis OSS 金鑰不存在，則為 0。
+ 如果 JSON 路徑無效或不存在，則為 0。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}, "e": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.DEL k1 $.d.*
(integer) 3
127.0.0.1:6379> JSOn.GET k1
"{\"a\":{},\"b\":{\"a\":1},\"c\":{\"a\":1,\"b\":2},\"d\":{},\"e\":[1,2,3,4,5]}"
127.0.0.1:6379> JSON.DEL k1 $.e[*]
(integer) 5
127.0.0.1:6379> JSOn.GET k1
"{\"a\":{},\"b\":{\"a\":1},\"c\":{\"a\":1,\"b\":2},\"d\":{},\"e\":[]}"
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}, "e": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.DEL k1 .d.*
(integer) 3
127.0.0.1:6379> JSON.GET k1
"{\"a\":{},\"b\":{\"a\":1},\"c\":{\"a\":1,\"b\":2},\"d\":{},\"e\":[1,2,3,4,5]}"
127.0.0.1:6379> JSON.DEL k1 .e[*]
(integer) 5
127.0.0.1:6379> JSON.GET k1
"{\"a\":{},\"b\":{\"a\":1},\"c\":{\"a\":1,\"b\":2},\"d\":{},\"e\":[]}"
```

# JSON.FORGET
<a name="json-forget"></a>

[JSON.DEL](json-del.md) 的別名。

# JSON.GET
<a name="json-get"></a>

在一或多個路徑傳回序列化 JSON。

語法

```
JSON.GET <key>
[INDENT indentation-string]
[NEWLINE newline-string]
[SPACE space-string]
[NOESCAPE]
[path ...]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ INDENT/NEWLINE/SPACE (選用) – 控制傳回 JSON 字串的格式，即「漂亮列印」。個別預設值為空字串。可在任何組合中覆寫。可以按任何順序指定。
+ NOESCAPE - 選用，允許顯示以相容舊版，且沒有其他效果。
+ path (選用) – 零個或更多 JSON 路徑，如果提供 none，則預設為根。路徑引數必須放在最後。

**傳回**

增強型路徑語法：

 如果提供一個路徑：
+ 傳回值陣列的序列化字串。
+ 如果未選取任何值，此命令會傳回空陣列。

 如果提供多個路徑：
+ 傳回字串化 JSON 物件，其中每個路徑都是索引鍵。
+ 如果混合增強型和受限路徑語法，結果會按照增強型語法。
+ 如果沒有路徑，則其對應的值會是空陣列。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK
127.0.0.1:6379> JSON.GET k1 $.address.*
"[\"21 2nd Street\",\"New York\",\"NY\",\"10021-3100\"]"
127.0.0.1:6379> JSON.GET k1 indent "\t" space " " NEWLINE "\n" $.address.*
"[\n\t\"21 2nd Street\",\n\t\"New York\",\n\t\"NY\",\n\t\"10021-3100\"\n]"
127.0.0.1:6379> JSON.GET k1 $.firstName $.lastName $.age
"{\"$.firstName\":[\"John\"],\"$.lastName\":[\"Smith\"],\"$.age\":[27]}"            
127.0.0.1:6379> JSON.SET k2 . '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}}'
OK
127.0.0.1:6379> json.get k2 $..*
"[{},{\"a\":1},{\"a\":1,\"b\":2},1,1,2]"
```

 受限路徑語法：

```
 127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK
127.0.0.1:6379> JSON.GET k1 .address
"{\"street\":\"21 2nd Street\",\"city\":\"New York\",\"state\":\"NY\",\"zipcode\":\"10021-3100\"}"
127.0.0.1:6379> JSON.GET k1 indent "\t" space " " NEWLINE "\n" .address
"{\n\t\"street\": \"21 2nd Street\",\n\t\"city\": \"New York\",\n\t\"state\": \"NY\",\n\t\"zipcode\": \"10021-3100\"\n}"
127.0.0.1:6379> JSON.GET k1 .firstName .lastName .age
"{\".firstName\":\"John\",\".lastName\":\"Smith\",\".age\":27}"
```

# JSON.MGET
<a name="json-mget"></a>

取得多個文件索引鍵的路徑上序列化 JSON。這會針對不存在的索引鍵或 JSON 路徑，傳回 null。

**語法**

```
JSON.MGET <key> [key ...] <path>
```
+ 金鑰 （必要） – 文件類型的一或多個 Valkey 或 Redis OSS 金鑰。
+ path (必要) – JSON 路徑。

**傳回**
+ 大量字串陣列。陣列的大小等於命令中的索引鍵數量。陣列的每個元素都填入 (a) 路徑定位的序列化 JSON，或 (b) 如果沒有索引鍵、文件中沒有路徑，或路徑無效 (語法錯誤)，則為 null。
+ 如果有任何指定的索引鍵，且不是 JSON 索引鍵，命令會傳回 `WRONGTYPE` 錯誤。

**範例**

增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021"}}'
OK
127.0.0.1:6379> JSON.SET k2 . '{"address":{"street":"5 main Street","city":"Boston","state":"MA","zipcode":"02101"}}'
OK
127.0.0.1:6379> JSON.SET k3 . '{"address":{"street":"100 Park Ave","city":"Seattle","state":"WA","zipcode":"98102"}}'
OK
127.0.0.1:6379> JSON.MGET k1 k2 k3 $.address.city
1) "[\"New York\"]"
2) "[\"Boston\"]"
3) "[\"Seattle\"]"
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021"}}'
OK
127.0.0.1:6379> JSON.SET k2 . '{"address":{"street":"5 main Street","city":"Boston","state":"MA","zipcode":"02101"}}'
OK
127.0.0.1:6379> JSON.SET k3 . '{"address":{"street":"100 Park Ave","city":"Seattle","state":"WA","zipcode":"98102"}}'
OK

127.0.0.1:6379> JSON.MGET k1 k2 k3 .address.city
1) "\"New York\""
2) "\"Seattle\""
3) "\"Seattle\""
```

# JSON.MSET
<a name="json-mset"></a>

支援 Valkey 8.1 版和更新版本。

設定多個金鑰的 JSON 值。操作是原子的。已設定所有值或未設定任何值。

**語法**

```
JSON.MSET key path json [ key path json ... ]
```
+ 如果路徑呼叫物件成員：
  + 如果父元素不存在，命令將傳回 NONEXISTENT 錯誤。
  + 如果父元素存在，但不是物件，則命令會傳回 ERROR。
  + 如果有父元素且為物件：
    + 如果沒有成員，只會在父物件是路徑中的最後一個子系時，將新成員附加至父物件。否則，命令將傳回 NONEXISTENT 錯誤。
    + 如果有該成員，其值將以 JSON 值取代。
+ 如果路徑呼叫陣列索引：
  + 如果父元素不存在，命令將傳回 NONEXISTENT 錯誤。
  + 如果父元素存在，但不是陣列，則命令會傳回 ERROR。
  + 如果父元素存在，但索引超出範圍，則命令將傳回 OUTOFBOUNDARIES 錯誤。
  + 如果有父元素且索引有效，該元素將以新的 JSON 值取代。
+ 如果路徑呼叫物件或陣列，該值 (物件或陣列) 將以新的 JSON 值取代。

**傳回**
+ 簡易字串回覆：如果操作成功，則為「OK」。
+ 簡單錯誤回覆：如果操作失敗。

**範例**

增強型路徑語法：

```
127.0.0.1:6379> JSON.MSET k1 . '[1,2,3,4,5]' k2 . '{"a":{"a":1, "b":2, "c":3}}' k3 . '{"a": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.GET k1
"[1,2,3,4,5]"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.MSET k2 $.a.* '0' k3 $.a[*] '0'
OK
127.0.0.1:6379> JSON.GET k2
"{\"a\":{\"a\":0,\"b\":0,\"c\":0}}"
127.0.0.1:6379> JSON.GET k3
"{\"a\":[0,0,0,0,0]}"
```

受限路徑語法：

```
127.0.0.1:6379> JSON.MSET k1 . '{"name": "John","address": {"street": "123 Main St","city": "Springfield"},"phones": ["555-1234","555-5678"]}'
OK
127.0.0.1:6379> JSON.MSET k1 .address.street '"21 2nd Street"' k1 .address.city '"New York"'
OK
127.0.0.1:6379> JSON.GET k1 .address.street
"\"21 2nd Street\""
127.0.0.1:6379> JSON.GET k1 .address.city
"\"New York\""
```

# JSON.NUMINCRBY
<a name="json-numincrby"></a>

以指定的數字增加路徑上的數值。

語法

```
JSON.NUMINCRBY <key> <path> <number>
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (必要) – JSON 路徑。
+ number (必要) – 數字。

**傳回**

如果路徑是增強型語法：
+ 大量字串陣列代表每個路徑上產生的值。
+ 如果值不是數字，則其對應的傳回值為 null。
+ 如果無法剖析數字，會發生 `WRONGTYPE` 錯誤。
+ 如果結果超出 64 位元 IEEE 雙精確度的範圍，會發生 `OVERFLOW` 錯誤。
+ 如果沒有文件索引鍵，則為 `NONEXISTENT`。

如果路徑是受限語法：
+ 大量字串代表結果值。
+ 如果選取多個值，命令會傳回上次所更新值的結果。
+ 如果路徑上的值不是數字，會發生 `WRONGTYPE` 錯誤。
+ 如果無法剖析數字，會發生 `WRONGTYPE` 錯誤。
+ 如果結果超出 64 位元 IEEE 雙精確度的範圍，會發生 `OVERFLOW` 錯誤。
+ 如果沒有文件索引鍵，則為 `NONEXISTENT`。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k1 $.d[*] 10
"[11,12,13]"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[1],\"c\":[1,2],\"d\":[11,12,13]}"

127.0.0.1:6379> JSON.SET k1 $ '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k1 $.a[*] 1
"[]"
127.0.0.1:6379> JSON.NUMINCRBY k1 $.b[*] 1
"[2]"
127.0.0.1:6379> JSON.NUMINCRBY k1 $.c[*] 1
"[2,3]"
127.0.0.1:6379> JSON.NUMINCRBY k1 $.d[*] 1
"[2,3,4]"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[2,3],\"d\":[2,3,4]}"

127.0.0.1:6379> JSON.SET k2 $ '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k2 $.a.* 1
"[]"
127.0.0.1:6379> JSON.NUMINCRBY k2 $.b.* 1
"[2]"
127.0.0.1:6379> JSON.NUMINCRBY k2 $.c.* 1
"[2,3]"
127.0.0.1:6379> JSON.NUMINCRBY k2 $.d.* 1
"[2,3,4]"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":2,\"b\":3},\"d\":{\"a\":2,\"b\":3,\"c\":4}}"

127.0.0.1:6379> JSON.SET k3 $ '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"b"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k3 $.a.* 1
"[null]"
127.0.0.1:6379> JSON.NUMINCRBY k3 $.b.* 1
"[null,2]"
127.0.0.1:6379> JSON.NUMINCRBY k3 $.c.* 1
"[null,null]"
127.0.0.1:6379> JSON.NUMINCRBY k3 $.d.* 1
"[2,null,4]"
127.0.0.1:6379> JSON.GET k3
"{\"a\":{\"a\":\"a\"},\"b\":{\"a\":\"a\",\"b\":2},\"c\":{\"a\":\"a\",\"b\":\"b\"},\"d\":{\"a\":2,\"b\":\"b\",\"c\":4}}"
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k1 .d[1] 10
"12"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[1],\"c\":[1,2],\"d\":[1,12,3]}"

127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k1 .a[*] 1
(error) NONEXISTENT JSON path does not exist
127.0.0.1:6379> JSON.NUMINCRBY k1 .b[*] 1
"2"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[1,2],\"d\":[1,2,3]}"
127.0.0.1:6379> JSON.NUMINCRBY k1 .c[*] 1
"3"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[2,3],\"d\":[1,2,3]}"
127.0.0.1:6379> JSON.NUMINCRBY k1 .d[*] 1
"4"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[2,3],\"d\":[2,3,4]}"

127.0.0.1:6379> JSON.SET k2 . '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k2 .a.* 1
(error) NONEXISTENT JSON path does not exist
127.0.0.1:6379> JSON.NUMINCRBY k2 .b.* 1
"2"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":1,\"b\":2},\"d\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.NUMINCRBY k2 .c.* 1
"3"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":2,\"b\":3},\"d\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.NUMINCRBY k2 .d.* 1
"4"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":2,\"b\":3},\"d\":{\"a\":2,\"b\":3,\"c\":4}}"

127.0.0.1:6379> JSON.SET k3 . '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"b"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k3 .a.* 1
(error) WRONGTYPE JSON element is not a number
127.0.0.1:6379> JSON.NUMINCRBY k3 .b.* 1
"2"
127.0.0.1:6379> JSON.NUMINCRBY k3 .c.* 1
(error) WRONGTYPE JSON element is not a number
127.0.0.1:6379> JSON.NUMINCRBY k3 .d.* 1
"4"
```

# JSON.NUMMULTBY
<a name="json-nummultby"></a>

以指定數字乘於路徑上的數值。

語法

```
JSON.NUMMULTBY <key> <path> <number>
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (必要) – JSON 路徑。
+ number (必要) – 數字。

**傳回**

如果路徑是增強型語法：
+ 大量字串陣列代表每個路徑上產生的值。
+ 如果值不是數字，則其對應的傳回值為 null。
+ 如果無法剖析數字，會發生 `WRONGTYPE` 錯誤。
+ 如果結果超出 64 位元 IEEE 雙精確度浮點數範圍，會發生 `OVERFLOW` 錯誤。
+ 如果沒有文件索引鍵，則為 `NONEXISTENT`。

如果路徑是受限語法：
+ 大量字串代表結果值。
+ 如果選取多個值，命令會傳回上次所更新值的結果。
+ 如果路徑上的值不是數字，會發生 `WRONGTYPE` 錯誤。
+ 如果無法剖析數字，會發生 `WRONGTYPE` 錯誤。
+ 如果結果超出 64 位元 IEEE 雙精確度範圍，會發生 `OVERFLOW` 錯誤。
+ 如果沒有文件索引鍵，則為 `NONEXISTENT`。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k1 $.d[*] 2
"[2,4,6]"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[1],\"c\":[1,2],\"d\":[2,4,6]}"

127.0.0.1:6379> JSON.SET k1 $ '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k1 $.a[*] 2
"[]"
127.0.0.1:6379> JSON.NUMMULTBY k1 $.b[*] 2
"[2]"
127.0.0.1:6379> JSON.NUMMULTBY k1 $.c[*] 2
"[2,4]"
127.0.0.1:6379> JSON.NUMMULTBY k1 $.d[*] 2
"[2,4,6]"

127.0.0.1:6379> JSON.SET k2 $ '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k2 $.a.* 2
"[]"
127.0.0.1:6379> JSON.NUMMULTBY k2 $.b.* 2
"[2]"
127.0.0.1:6379> JSON.NUMMULTBY k2 $.c.* 2
"[2,4]"
127.0.0.1:6379> JSON.NUMMULTBY k2 $.d.* 2
"[2,4,6]"

127.0.0.1:6379> JSON.SET k3 $ '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"b"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k3 $.a.* 2
"[null]"
127.0.0.1:6379> JSON.NUMMULTBY k3 $.b.* 2
"[null,2]"
127.0.0.1:6379> JSON.NUMMULTBY k3 $.c.* 2
"[null,null]"
127.0.0.1:6379> JSON.NUMMULTBY k3 $.d.* 2
"[2,null,6]"
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k1 .d[1] 2
"4"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[1],\"c\":[1,2],\"d\":[1,4,3]}"

127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k1 .a[*] 2
(error) NONEXISTENT JSON path does not exist
127.0.0.1:6379> JSON.NUMMULTBY k1 .b[*] 2
"2"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[1,2],\"d\":[1,2,3]}"
127.0.0.1:6379> JSON.NUMMULTBY k1 .c[*] 2
"4"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[2,4],\"d\":[1,2,3]}"
127.0.0.1:6379> JSON.NUMMULTBY k1 .d[*] 2
"6"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[2,4],\"d\":[2,4,6]}"

127.0.0.1:6379> JSON.SET k2 . '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k2 .a.* 2
(error) NONEXISTENT JSON path does not exist
127.0.0.1:6379> JSON.NUMMULTBY k2 .b.* 2
"2"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":1,\"b\":2},\"d\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.NUMMULTBY k2 .c.* 2
"4"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":2,\"b\":4},\"d\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.NUMMULTBY k2 .d.* 2
"6"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":2,\"b\":4},\"d\":{\"a\":2,\"b\":4,\"c\":6}}"

127.0.0.1:6379> JSON.SET k3 . '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"b"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k3 .a.* 2
(error) WRONGTYPE JSON element is not a number
127.0.0.1:6379> JSON.NUMMULTBY k3 .b.* 2
"2"
127.0.0.1:6379> JSON.GET k3
"{\"a\":{\"a\":\"a\"},\"b\":{\"a\":\"a\",\"b\":2},\"c\":{\"a\":\"a\",\"b\":\"b\"},\"d\":{\"a\":1,\"b\":\"b\",\"c\":3}}"
127.0.0.1:6379> JSON.NUMMULTBY k3 .c.* 2
(error) WRONGTYPE JSON element is not a number
127.0.0.1:6379> JSON.NUMMULTBY k3 .d.* 2
"6"
127.0.0.1:6379> JSON.GET k3
"{\"a\":{\"a\":\"a\"},\"b\":{\"a\":\"a\",\"b\":2},\"c\":{\"a\":\"a\",\"b\":\"b\"},\"d\":{\"a\":2,\"b\":\"b\",\"c\":6}}"
```

# JSON.OBJLEN
<a name="json-objlen"></a>

取得路徑上物件值中的索引鍵數目。

語法

```
JSON.OBJLEN <key> [path]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。

**傳回**

如果路徑是增強型語法：
+ 整數陣列代表每個路徑的物件長度。
+ 如果值不是物件，其相應的傳回值為 null。
+ 如果沒有文件索引鍵，則為 null。

如果路徑是受限語法：
+ 整數，物件中的索引鍵數目。
+ 如果選取多個物件，命令會傳回第一個物件的長度。
+ 如果路徑上的值不是物件，會發生 `WRONGTYPE` 錯誤。
+ 如果沒有路徑，會發生 `NONEXISTENT JSON` 錯誤。
+ 如果沒有文件索引鍵，則為 null。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{}, "b":{"a":"a"}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":{"a":3,"b":4}}, "e":1}'
OK
127.0.0.1:6379> JSON.OBJLEN k1 $.a
1) (integer) 0
127.0.0.1:6379> JSON.OBJLEN k1 $.a.*
(empty array)
127.0.0.1:6379> JSON.OBJLEN k1 $.b
1) (integer) 1
127.0.0.1:6379> JSON.OBJLEN k1 $.b.*
1) (nil)
127.0.0.1:6379> JSON.OBJLEN k1 $.c
1) (integer) 2
127.0.0.1:6379> JSON.OBJLEN k1 $.c.*
1) (nil)
2) (nil)
127.0.0.1:6379> JSON.OBJLEN k1 $.d
1) (integer) 3
127.0.0.1:6379> JSON.OBJLEN k1 $.d.*
1) (nil)
2) (nil)
3) (integer) 2
127.0.0.1:6379> JSON.OBJLEN k1 $.*
1) (integer) 0
2) (integer) 1
3) (integer) 2
4) (integer) 3
5) (nil)
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{}, "b":{"a":"a"}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":{"a":3,"b":4}}, "e":1}'
OK
127.0.0.1:6379> JSON.OBJLEN k1 .a
(integer) 0
127.0.0.1:6379> JSON.OBJLEN k1 .a.*
(error) NONEXISTENT JSON path does not exist
127.0.0.1:6379> JSON.OBJLEN k1 .b
(integer) 1
127.0.0.1:6379> JSON.OBJLEN k1 .b.*
(error) WRONGTYPE JSON element is not an object
127.0.0.1:6379> JSON.OBJLEN k1 .c
(integer) 2
127.0.0.1:6379> JSON.OBJLEN k1 .c.*
(error) WRONGTYPE JSON element is not an object
127.0.0.1:6379> JSON.OBJLEN k1 .d
(integer) 3
127.0.0.1:6379> JSON.OBJLEN k1 .d.*
(integer) 2
127.0.0.1:6379> JSON.OBJLEN k1 .*
(integer) 0
```

# JSON.OBJKEYS
<a name="json-objkeys"></a>

取得路徑上物件值中的索引鍵名稱。

語法

```
JSON.OBJKEYS <key> [path]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。

**傳回**

如果路徑是增強型語法：
+ 大量字串陣列。每個元素都是相符物件中的索引鍵陣列。
+ 如果值不是物件，其相應的傳回值是空白值。
+ 如果沒有文件索引鍵，則為 null。

如果路徑是受限語法：
+ 大量字串陣列。每個元素都是物件中的索引鍵名稱。
+ 如果選取多個物件，命令會傳回第一個物件的索引鍵。
+ 如果路徑上的值不是物件，會發生 `WRONGTYPE` 錯誤。
+ 如果沒有文件索引鍵，則為 null。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{}, "b":{"a":"a"}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":{"a":3,"b":4}}, "e":1}'
OK
127.0.0.1:6379> JSON.OBJKEYS k1 $.*
1) (empty array)
2) 1) "a"
3) 1) "a"
   2) "b"
4) 1) "a"
   2) "b"
   3) "c"
5) (empty array)
127.0.0.1:6379> JSON.OBJKEYS k1 $.d
1) 1) "a"
   2) "b"
   3) "c"
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{}, "b":{"a":"a"}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":{"a":3,"b":4}}, "e":1}'
OK
127.0.0.1:6379> JSON.OBJKEYS k1 .*
1) "a"
127.0.0.1:6379> JSON.OBJKEYS k1 .d
1) "a"
2) "b"
3) "c"
```

# JSON.RESP
<a name="json-resp"></a>

傳回 Valkey 或 Redis OSS 序列化通訊協定 (RESP) 中指定路徑的 JSON 值。如果值是容器，回應為 RESP 陣列或巢狀陣列。
+ JSON null 映射至 RESP null 大量字串。
+ JSON 布林值映射至個別 RESP 簡單字串。
+ 整數映射至 RESP 整數。
+ 64 位 IEEE 雙精確度浮點數映射至 RESP 大量字串。
+ JSON 字串映射至 RESP 大量字串。
+ JSON 陣列表示為 RESP 陣列，其中第一個元素是簡單字串 [，接著字串的元素。
+ JSON 物件表示為 RESP 陣列，其中第一個元素是簡單字串 \$1，接著索引鍵值組，每個都是 RESP 大量字串。

語法

```
JSON.RESP <key> [path]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。

**傳回**

如果路徑是增強型語法：
+ 陣列的陣列。每個陣列元素呈現一個路徑上值的 RESP 形式。
+ 如果沒有文件索引鍵，則為空陣列。

如果路徑是受限語法：
+ 陣列代表路徑上值的 RESP 形式。
+ 如果沒有文件索引鍵，則為 null。

**範例**

增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK

127.0.0.1:6379> JSON.RESP k1 $.address
1) 1) {
   2) 1) "street"
      2) "21 2nd Street"
   3) 1) "city"
      2) "New York"
   4) 1) "state"
      2) "NY"
   5) 1) "zipcode"
      2) "10021-3100"

127.0.0.1:6379> JSON.RESP k1 $.address.*
1) "21 2nd Street"
2) "New York"
3) "NY"
4) "10021-3100"

127.0.0.1:6379> JSON.RESP k1 $.phoneNumbers
1) 1) [
   2) 1) {
      2) 1) "type"
         2) "home"
      3) 1) "number"
         2) "555 555-1234"
   3) 1) {
      2) 1) "type"
         2) "office"
      3) 1) "number"
         2) "555 555-4567"

127.0.0.1:6379> JSON.RESP k1 $.phoneNumbers[*]
1) 1) {
   2) 1) "type"
      2) "home"
   3) 1) "number"
      2) "212 555-1234"
2) 1) {
   2) 1) "type"
      2) "office"
   3) 1) "number"
      2) "555 555-4567"
```

受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK

127.0.0.1:6379> JSON.RESP k1 .address
1) {
2) 1) "street"
   2) "21 2nd Street"
3) 1) "city"
   2) "New York"
4) 1) "state"
   2) "NY"
5) 1) "zipcode"
   2) "10021-3100"

127.0.0.1:6379> JSON.RESP k1
 1) {
 2) 1) "firstName"
    2) "John"
 3) 1) "lastName"
    2) "Smith"
 4) 1) "age"
    2) (integer) 27
 5) 1) "weight"
    2) "135.25"
 6) 1) "isAlive"
    2) true
 7) 1) "address"
    2) 1) {
       2) 1) "street"
          2) "21 2nd Street"
       3) 1) "city"
          2) "New York"
       4) 1) "state"
          2) "NY"
       5) 1) "zipcode"
          2) "10021-3100"
 8) 1) "phoneNumbers"
    2) 1) [
       2) 1) {
          2) 1) "type"
             2) "home"
          3) 1) "number"
             2) "212 555-1234"
       3) 1) {
          2) 1) "type"
             2) "office"
          3) 1) "number"
             2) "555 555-4567"
 9) 1) "children"
    2) 1) [
10) 1) "spouse"
    2) (nil)
```

# JSON.SET
<a name="json-set"></a>

設定路徑上的 JSON 值。

如果路徑呼叫物件成員：
+ 如果沒有父元素，該命令會傳回 NONEXISTENT 錯誤。
+ 如果有父元素但不是物件，該命令會傳回 ERROR。
+ 如果有父元素且為物件：
  +  如果沒有成員，只會在父物件是路徑中的最後一個子系時，將新成員附加至父物件。否則命令會傳回 NONEXISTENT 錯誤。
  +  如果有該成員，其值將以 JSON 值取代。

如果路徑呼叫陣列索引：
+ 如果沒有父元素，該命令會傳回 NONEXISTENT 錯誤。
+ 如果有父元素但不是陣列，該命令會傳回 ERROR。
+ 如果有父元素但索引超出範圍，該命令會傳回 OUTOFBOUNDARIES 錯誤。
+ 如果有父元素且索引有效，該元素將以新的 JSON 值取代。

如果路徑呼叫物件或陣列，該值 (物件或陣列) 將以新的 JSON 值取代。

語法

```
JSON.SET <key> <path> <json> [NX | XX] 
```

[NX \$1 XX] 您可以在其中有 0 或 1 個 [NX \$1 XX] 識別碼。
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (必要) – JSON 路徑。對於新金鑰，JSON 路徑必須是根 "."。
+ NX （選用） – 如果路徑是根，則只有在金鑰不存在時才設定值。也就是插入新文件。如果路徑不是根，請只在沒有路徑時才設定值。也就是將值插入文件中。
+ XX （選用） – 如果路徑是根，則只有在金鑰存在時才設定值。也就是取代現有文件。如果路徑不是根，請只在有路徑時才設定值。也就是更新現有值。

**傳回**
+ 成功時有簡單字串 'OK'。
+ 如果不符合 NX 或 XX 條件，即為 null。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.SET k1 $.a.* '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"a\":{\"a\":0,\"b\":0,\"c\":0}}"

127.0.0.1:6379> JSON.SET k2 . '{"a": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.SET k2 $.a[*] '0'
OK
127.0.0.1:6379> JSON.GET k2
"{\"a\":[0,0,0,0,0]}"
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"c":{"a":1, "b":2}, "e": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.SET k1 .c.a '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"c\":{\"a\":0,\"b\":2},\"e\":[1,2,3,4,5]}"
127.0.0.1:6379> JSON.SET k1 .e[-1] '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"c\":{\"a\":0,\"b\":2},\"e\":[1,2,3,4,0]}"
127.0.0.1:6379> JSON.SET k1 .e[5] '0'
(error) OUTOFBOUNDARIES Array index is out of bounds
```

# JSON.STRAPPEND
<a name="json-strappend"></a>

將字串附加到路徑上的 JSON 字串。

語法

```
JSON.STRAPPEND <key> [path] <json_string>
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。
+ json\$1string (必要) – 字串的 JSON 表示法。請注意，JSON 字串必須加上英文引號。例如：'"string example"'。

**傳回**

如果路徑是增強型語法：
+ 整數陣列代表字串在每個路徑的新長度。
+ 如果路徑上的值不是字符串，則其對應的傳回值為 null。
+ 如果輸入 json 引數不是有效 JSON 字串，會發生 `SYNTAXERR` 錯誤。
+ 如果沒有路徑，會發生 `NONEXISTENT` 錯誤。

如果路徑是受限語法：
+ 整數，字串的新長度。
+ 如果選取多個字串值，該命令會傳回上次所更新字串的新長度。
+ 如果路徑上的值不是字串，會發生 `WRONGTYPE` 錯誤。
+ 如果輸入 json 引數不是有效 JSON 字串，會發生 `WRONGTYPE` 錯誤。
+ 如果沒有路徑，會發生 `NONEXISTENT` 錯誤。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.STRAPPEND k1 $.a.a '"a"'
1) (integer) 2
127.0.0.1:6379> JSON.STRAPPEND k1 $.a.* '"a"'
1) (integer) 3
127.0.0.1:6379> JSON.STRAPPEND k1 $.b.* '"a"'
1) (integer) 2
2) (nil)
127.0.0.1:6379> JSON.STRAPPEND k1 $.c.* '"a"'
1) (integer) 2
2) (integer) 3
127.0.0.1:6379> JSON.STRAPPEND k1 $.c.b '"a"'
1) (integer) 4
127.0.0.1:6379> JSON.STRAPPEND k1 $.d.* '"a"'
1) (nil)
2) (integer) 2
3) (nil)
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.STRAPPEND k1 .a.a '"a"'
(integer) 2
127.0.0.1:6379> JSON.STRAPPEND k1 .a.* '"a"'
(integer) 3
127.0.0.1:6379> JSON.STRAPPEND k1 .b.* '"a"'
(integer) 2
127.0.0.1:6379> JSON.STRAPPEND k1 .c.* '"a"'
(integer) 3
127.0.0.1:6379> JSON.STRAPPEND k1 .c.b '"a"'
(integer) 4
127.0.0.1:6379> JSON.STRAPPEND k1 .d.* '"a"'
(integer) 2
```

# JSON.STRLEN
<a name="json-strlen"></a>

取得路徑上 JSON 字串值的長度。

語法

```
JSON.STRLEN <key> [path] 
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。

**傳回**

如果路徑是增強型語法：
+ 整數陣列代表每個路徑上的字串值長度。
+ 如果值不是字串，其對應的傳回值為 null。
+ 如果沒有文件索引鍵，則為 null。

如果路徑是受限語法：
+ 整數，字串的長度。
+ 如果選取多個字串值，該命令會傳回第一個字串的長度。
+ 如果路徑上的值不是字串，會發生 `WRONGTYPE` 錯誤。
+ 如果沒有路徑，會發生 `NONEXISTENT` 錯誤。
+ 如果沒有文件索引鍵，則為 null。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.STRLEN k1 $.a.a
1) (integer) 1
127.0.0.1:6379> JSON.STRLEN k1 $.a.*
1) (integer) 1
127.0.0.1:6379> JSON.STRLEN k1 $.c.*
1) (integer) 1
2) (integer) 2
127.0.0.1:6379> JSON.STRLEN k1 $.c.b
1) (integer) 2
127.0.0.1:6379> JSON.STRLEN k1 $.d.*
1) (nil)
2) (integer) 1
3) (nil)
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.STRLEN k1 .a.a
(integer) 1
127.0.0.1:6379> JSON.STRLEN k1 .a.*
(integer) 1
127.0.0.1:6379> JSON.STRLEN k1 .c.*
(integer) 1
127.0.0.1:6379> JSON.STRLEN k1 .c.b
(integer) 2
127.0.0.1:6379> JSON.STRLEN k1 .d.*
(integer) 1
```

# JSON.TOGGLE
<a name="json-toggle"></a>

在路徑上將布林值切換為 true 或 false。

語法

```
JSON.TOGGLE <key> [path] 
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。

**傳回**

如果路徑是增強型語法：
+ 整數陣列 (0 - false，1 - true)，代表每個路徑上產生的布林值。
+ 如果值不是布林值，其對應的傳回值為 null。
+ 如果沒有文件索引鍵，則為 `NONEXISTENT`。

如果路徑是受限語法：
+ 字串 ("true" / "false")，代表產生的布林值。
+ 如果沒有文件索引鍵，則為 `NONEXISTENT`。
+ 如果路徑上的值不是布林值，會發生 `WRONGTYPE` 錯誤。

**範例**

 增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"a":true, "b":false, "c":1, "d":null, "e":"foo", "f":[], "g":{}}'
OK
127.0.0.1:6379> JSON.TOGGLE k1 $.*
1) (integer) 0
2) (integer) 1
3) (nil)
4) (nil)
5) (nil)
6) (nil)
7) (nil)
127.0.0.1:6379> JSON.TOGGLE k1 $.*
1) (integer) 1
2) (integer) 0
3) (nil)
4) (nil)
5) (nil)
6) (nil)
7) (nil)
```

 受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . true
OK
127.0.0.1:6379> JSON.TOGGLE k1
"false"
127.0.0.1:6379> JSON.TOGGLE k1
"true"

127.0.0.1:6379> JSON.SET k2 . '{"isAvailable": false}'
OK
127.0.0.1:6379> JSON.TOGGLE k2 .isAvailable
"true"
127.0.0.1:6379> JSON.TOGGLE k2 .isAvailable
"false"
```

# JSON.TYPE
<a name="json-type"></a>

報告指定路徑上值的類型。

語法

```
JSON.TYPE <key> [path]
```
+ key （必要） – JSON 文件類型的 Valkey 或 Redis OSS 金鑰。
+ path (選用) – JSON 路徑。如果未提供，則預設為根。

**傳回**

如果路徑是增強型語法：
+ 字串陣列代表每個路徑上值的類型。該類型是 \$1"null", "boolean", "string", "number", "integer", "object" and "array"\$1 之一。
+ 如果沒有路徑，其對應的傳回值為 null。
+ 如果沒有文件索引鍵，則為空陣列。

如果路徑是受限語法：
+ 字串，值的類型
+ 如果沒有文件索引鍵，則為 null。
+ 如果 JSON 路徑無效或不存在，則為 null。

**範例**

增強型路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '[1, 2.3, "foo", true, null, {}, []]'
OK
127.0.0.1:6379> JSON.TYPE k1 $[*]
1) integer
2) number
3) string
4) boolean
5) null
6) object
7) array
```

受限路徑語法：

```
127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK
127.0.0.1:6379> JSON.TYPE k1
object
127.0.0.1:6379> JSON.TYPE k1 .children
array
127.0.0.1:6379> JSON.TYPE k1 .firstName
string
127.0.0.1:6379> JSON.TYPE k1 .age
integer
127.0.0.1:6379> JSON.TYPE k1 .weight
number
127.0.0.1:6379> JSON.TYPE k1 .isAlive
boolean
127.0.0.1:6379> JSON.TYPE k1 .spouse
null
```

# 為您的 ElastiCache 資源加上標籤
<a name="Tagging-Resources"></a>

為協助您管理叢集和其他 ElastiCache 資源，您可以用標籤形式將自己的中繼資料指派給每個資源。標籤可讓您以不同的方式分類AWS資源，例如依用途、擁有者或環境。當您有許多相同類型的資源時，這將會很有用，因為—您可以依據先前指派的標籤，快速識別特定的資源。本主題說明標籤並示範如何建立它們。

**警告**  
根據最佳實務，建議您不要在標籤中包含敏感資料。

## 標籤基本概念
<a name="Tagging-basics"></a>

標籤是您指派給AWS資源的標籤。每個標籤皆包含由您定義的一個金鑰與一個選用值。標籤可讓您以不同的方式分類AWS資源，例如依用途或擁有者。例如，您可以為您帳戶的 ElastiCache 叢集定義一組標籤，協助您追蹤各個執行個體的擁有者與使用者群組。

我們建議您為每種資源類型建立符合您需求的標籤金鑰。使用一致的標籤金鑰組可讓您更輕鬆管理您的 資源。您可以根據您新增的標籤搜尋和篩選資源。如需如何實作有效資源標記策略的詳細資訊，請參閱 [AWS白皮書標記最佳實務](https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf)。

標籤對 ElastiCache 來說不具任何語意意義，且會嚴格解譯為字元字串。此外，標籤不會自動指派給您的資源。您可以編輯標籤索引鍵和值，也可以隨時從資源中移除標籤。您可以將標籤的值設為 `null`。如果您新增的標籤具有與該資源上現有標籤相同的索引鍵，則新值會覆寫舊值。如果您刪除資源，也會刪除任何該資源所使用的標籤。此外，如果您為複寫群組新增或刪除標籤，也會為該複寫群組中的所有節點新增或移除其標籤。

 您可以使用AWS 管理主控台、AWS CLI和 ElastiCache API 來使用標籤。

如果您使用的是 IAM，您可以控制AWS帳戶中哪些使用者具有建立、編輯或刪除標籤的許可。如需詳細資訊，請參閱[資源層級許可](IAM.ResourceLevelPermissions.md)。

## 您可以標記的資源
<a name="Tagging-your-resources"></a>

您可以為帳戶中現有的大多數 ElastiCache 資源新增標籤。下表列出支援標籤建立的資源。如果您使用的是AWS 管理主控台，您可以使用標籤[編輯器將標籤](https://docs.aws.amazon.com/ARG/latest/userguide/tag-editor.html)套用至資源。有些資源畫面可讓您在建立資源時指定資源的標籤；例如，具有 Name 索引鍵和您指定值的標籤。在大多數的案例中，主控台會立即在建立資源後套用標籤 (而非在資源建立過程時)。主控台可根據 **Name** 標籤整理資源，但此標籤對 ElastiCache 服務來說不具任何語意意義。

 此外，有些資源建立動作可讓您在建立資源時指定資源的標籤。若標籤無法在資源建立時套用，我們會轉返資源建立程序。這可確保資源不是具有標籤建立，就是不會建立，因此無論何時都不會有不具有標籤的資源。藉由在建立時為資源建立標籤，您可以消除在資源建立後執行自訂標籤指令碼的必要。

 如果您使用的是 Amazon ElastiCache API、CLI AWS或AWS SDK，您可以使用相關 ElastiCache API 動作上的 `Tags` 參數來套用標籤。這些類別為：
+ `CreateServerlessCache`
+ `CreateCacheCluster`
+ `CreateReplicationGroup`
+ `CopyServerlessCacheSnapshot`
+ `CopySnapshot`
+ `CreateCacheParameterGroup`
+ `CreateCacheSecurityGroup`
+ `CreateCacheSubnetGroup`
+ `CreateServerlessCacheSnapshot`
+ `CreateSnapshot`
+ `CreateUserGroup`
+ `CreateUser`
+ `PurchaseReservedCacheNodesOffering`

下表說明可標記的 ElastiCache 資源，以及可使用 ElastiCache API、CLI AWS或AWS SDK 建立時可標記的資源。


**ElastiCache 資源的標記支援**  

| 資源 | 支援標籤 | 支援在建立時標記 | 
| --- | --- | --- | 
| serverlesscache | 是 | 是 | 
| parametergroup | 是 | 是 | 
| securitygroup | 是 | 是 | 
| subnetgroup | 是 | 是 | 
| replicationgroup | 是 | 是 | 
| 叢集 | 是 | 是 | 
| reserved-instance | 是 | 是 | 
| serverlesscachesnapshot | 是 | 是 | 
| 快照 | 是 | 是 | 
| user | 是 | 是 | 
| usergroup | 是 | 是 | 

**注意**  
您無法為全域資料存放區加上標籤。

您可以在 IAM 政策中將標籤式的資源層級許可套用到支援在建立時新增標籤的 ElastiCache API 動作，以對可在建立時為資源加上標籤的使用者和群組實作精密控制。您的資源從建立時便已獲得妥善的保護，標籤會立即套用到您的資源。因此，控制資源使用情況的任何標籤式資源層級許可都會立即生效。您可以更準確的追蹤和報告您的資源。您可以強制新資源使用標籤，並控制哪些標籤金鑰和值會在您的資源上設定。

如需詳細資訊，請參閱[為資源加上標籤的範例](#Tagging-your-resources-example)。

 如需為資源加上標籤以便計費的詳細資訊，請參閱「[使用成本配置標籤監控成本](Tagging.md)」。

## 標記快取和快照
<a name="Tagging-replication-groups-snapshots"></a>

以下規則適用於屬於請求作業一部分的標記程序：
+ **CreateReplicationGroup**：
  + 如果請求中包含 `--primary-cluster-id`和 `--tags` 參數，則請求標籤會新增至複寫群組，並傳播到複寫群組中的所有叢集。如果主要叢集有現有的標籤，則會以請求標籤覆寫這些標籤，以在所有節點之間具有一致的標籤。

    如果沒有請求標籤，則主要叢集標籤會新增至複寫群組，並傳播至所有叢集。
  + 如果提供 `--snapshot-name` 或 `--serverless-cache-snapshot-name`：

    如果請求中包含標籤，複寫群組只會使用這些標籤進行標記。如果請求中不含任何標籤，就會將快照標籤新增至複寫群組。
  + 如果提供 `--global-replication-group-id`：

    如果請求中包含標籤，則請求標籤會新增至複寫群組並傳播至所有叢集。
+ **CreateCacheCluster**：
  +  如果提供 `--replication-group-id`：

    如果請求中包含標籤，則只會使用這些標籤來標記叢集。如果請求中未包含任何標籤，叢集會繼承複寫群組標籤，而不是主要叢集的標籤。
  + 如果提供 `--snapshot-name`：

    如果請求中包含標籤，則只會使用這些標籤來標記叢集。如果請求中未包含任何標籤，快照標籤將新增至叢集。
+ **CreateServerlessCache**：
  + 如果請求中包含標籤，就只會將這些請求標籤新增至無伺服器快取。
+ **CreateSnapshot**：
  +  如果提供 `--replication-group-id`：

    如果請求中包含標籤，就只會將這些請求標籤新增至快照。如果請求中不含任何標籤，就會將複寫群組標籤新增至快照。
  + 如果提供 `--cache-cluster-id`：

    如果請求中包含標籤，就只會將這些請求標籤新增至快照。如果請求中未包含任何標籤，叢集標籤將新增至快照。
  + 針對自動快照：

    標籤會從複寫群組標籤傳播。
+ **CreateServerlessCacheSnapshot** : 
  + 如果請求中包含標籤，就只會將這些請求標籤新增至無伺服器快取快照。
+ **CopySnapshot**：
  + 如果請求中包含標籤，就只會將這些請求標籤新增至快照。如果請求中不含任何標籤，就會將來源快照標籤新增至複製的快照。
+ **CopyServerlessCacheSnapshot** : 
  + 如果請求中包含標籤，就只會將這些請求標籤新增至無伺服器快取快照。
+ **AddTagsToResource** 和 **RemoveTagsFromResource**：
  + 將從複寫群組新增/移除標籤，並將動作傳播到複寫群組中的所有叢集。
**注意**  
**AddTagsToResource** 與 **RemoveTagsFromResource** 無法用於預設參數和安全群組。
+ **IncreaseReplicaCount** 和 **ModifyReplicationGroupShardConfiguration**: 
  + 新增至複寫群組的所有新叢集都會套用與複寫群組相同的標籤。

## 標籤限制
<a name="Tagging-restrictions"></a>

以下基本限制適用於 標籤：
+ 每一資源最多標籤數 – 50
+ 針對每一個資源，每個標籤鍵必須是唯一的，且每個標籤鍵只能有一個值。
+ 索引鍵長度上限 - 128 個 UTF-8 Unicode 字元。
+ 值長度上限 - 256 個 UTF-8 Unicode 字元。
+ 雖然 ElastiCache 允許在標籤中使用任何字元，但其他服務的限制可能更嚴格。服務間允許的字元包括：可用 UTF-8 表示的英文字母、數字和空格，還有以下字元：\$1 - = . \$1 : / @
+ 標籤鍵與值皆區分大小寫。
+ 字`aws:`首會保留供AWS使用。如果標籤具有此字首的標籤金鑰，則您無法編輯或刪除標籤的金鑰或值。具 `aws:` 字首的標籤，不算在受資源限制的標籤計數內。

您無法僅根據標籤終止、停止或刪除資源。您必須指定資源識別符。例如，若要刪除您套用稱為 `DeleteMe` 標籤金鑰的快照，您必須搭配快照的資源識別符 (例如 `DeleteSnapshot`) 使用 `snap-1234567890abcdef0` 動作。

如需深入了解可加上標籤的 ElastiCache 資源，請參閱「[您可以標記的資源](#Tagging-your-resources)」。

## 為資源加上標籤的範例
<a name="Tagging-your-resources-example"></a>
+ 使用標籤建立無伺服器快取。此範例使用 Memcached 做為引擎。

  ```
  aws elasticache create-serverless-cache \
      --serverless-cache-name CacheName \
      --engine memcached
      --tags Key="Cost Center", Value="1110001" Key="project",Value="XYZ"
  ```
+ 新增標籤至無伺服器快取

  ```
  aws elasticache add-tags-to-resource \
  --resource-name arn:aws:elasticache:us-east-1:111111222233:serverlesscache:my-cache \
  --tags Key="project",Value="XYZ" Key="Elasticache",Value="Service"
  ```
+ 將標籤新增到複寫群組。

  ```
  aws elasticache add-tags-to-resource \
  --resource-name arn:aws:elasticache:us-east-1:111111222233:replicationgroup:my-rg \
  --tags Key="project",Value="XYZ" Key="Elasticache",Value="Service"
  ```
+ 使用標籤建立快取叢集。

  ```
  aws elasticache create-cache-cluster \
  --cluster-id testing-tags \
  --cluster-description cluster-test \
  --cache-subnet-group-name test \
  --cache-node-type cache.t2.micro \
  --engine valkey \
  --tags Key="project",Value="XYZ" Key="Elasticache",Value="Service"
  ```
+ 使用標籤建立快取叢集。此範例使用 Redis 做為引擎。

  ```
  aws elasticache create-cache-cluster \
  --cluster-id testing-tags \
  --cluster-description cluster-test \
  --cache-subnet-group-name test \
  --cache-node-type cache.t2.micro \
  --engine valkey \
  --tags Key="project",Value="XYZ" Key="Elasticache",Value="Service"
  ```
+ 建立包含標籤的無伺服器快照。此範例使用 Memcached 做為引擎。

  ```
  aws elasticache create-serverless-cache-snapshot \
  --serverless-cache-name testing-tags \
  --serverless-cache-snapshot-name bkp-testing-tags-scs \
  --tags Key="work",Value="foo"
  ```
+ 使用標籤建立快照。

  快照目前僅適用於 Redis。在此情況下，如果您對請求新增了標籤，即使複寫群組包含標籤，快照也只會接收請求標籤。

  ```
  aws elasticache create-snapshot \
  --replication-group-id testing-tags \
  --snapshot-name bkp-testing-tags-rg \
  --tags Key="work",Value="foo"
  ```

## 標籤型存取控制政策範例
<a name="Tagging-access-control"></a>

1. 只有在叢集具有 Project=XYZ 標籤時，才允許 `AddTagsToResource` 動作傳送至叢集。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "elasticache:AddTagsToResource",
               "Resource": [
                   "arn:aws:elasticache:*:*:cluster:*"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/Project": "XYZ"
                   }
               }
           }
       ]
   }
   ```

------

1. 如果複寫群組包含 Project 和 Service 標籤，且索引鍵與 Project 和 Service 不同，便允許該複寫群組的 `RemoveTagsFromResource` 動作。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "elasticache:RemoveTagsFromResource",
               "Resource": [
                   "arn:aws:elasticache:*:*:replicationgroup:*"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/Service": "Elasticache",
                       "aws:ResourceTag/Project": "XYZ"
                   },                
                   "ForAnyValue:StringNotEqualsIgnoreCase": {
                       "aws:TagKeys": [
                           "Project",
                           "Service"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 只有在標籤不是 Project 和 Service 時，才允許對任何資源執行 `AddTagsToResource`。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "elasticache:AddTagsToResource",
               "Resource": [
                   "arn:aws:elasticache:*:*:*:*"
               ],
               "Condition": {
                   "ForAnyValue:StringNotEqualsIgnoreCase": {
                       "aws:TagKeys": [ 
                           "Service", 
                           "Project" 
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 如果請求具有 `Tag Project=Foo`，則拒絕 `CreateReplicationGroup` 動作。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "elasticache:CreateReplicationGroup",
               "Resource": [
                   "arn:aws:elasticache:*:*:replicationgroup:*"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:RequestTag/Project": "Foo"
                   }
               }
           }
       ]
   }
   ```

------

1. 如果來源快照具有 Project=XYZ 標籤，且請求標籤是 Service=Elasticache，則拒絕 `CopySnapshot` 動作。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "elasticache:CopySnapshot",
               "Resource": [
                   "arn:aws:elasticache:*:*:snapshot:*"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/Project": "XYZ",
                       "aws:RequestTag/Service": "Elasticache"
                   }
               }
           }
       ]
   }
   ```

------

1. 如果請求標籤 `CreateCacheCluster` 遺失或不等於 `Project`、`Dev` 或 `QA`，則拒絕 `Prod` 動作。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
             {
               "Effect": "Allow",
               "Action": [
                   "elasticache:CreateCacheCluster"
               ],
               "Resource": [
                   "arn:aws:elasticache:*:*:parametergroup:*",
                   "arn:aws:elasticache:*:*:subnetgroup:*",
                   "arn:aws:elasticache:*:*:securitygroup:*",
                   "arn:aws:elasticache:*:*:replicationgroup:*"
               ]
           },
           {
               "Effect": "Deny",
               "Action": [
                   "elasticache:CreateCacheCluster"
               ],
               "Resource": [
                   "arn:aws:elasticache:*:*:cluster:*"
               ],
               "Condition": {
                   "Null": {
                       "aws:RequestTag/Project": "true"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": [
                   "elasticache:CreateCacheCluster",
                   "elasticache:AddTagsToResource"
               ],
               "Resource": "arn:aws:elasticache:*:*:cluster:*",
               "Condition": {
                   "StringEquals": {
                       "aws:RequestTag/Project": [
                           "Dev",
                           "Prod",
                           "QA"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

如需條件索引鍵的相關資訊，請參閱 [使用條件索引鍵](IAM.ConditionKeys.md)。

# 使用成本配置標籤監控成本
<a name="Tagging"></a>

將成本配置標籤新增至 Amazon ElastiCache 中的資源時，您可以將發票上的費用依資源標籤值分組，藉此追蹤成本。

ElastiCache 成本配置標籤是您所定義並與 ElastiCache 資源建立關聯的索引鍵值組。索引鍵與值皆會區分大小寫。您可以使用標籤索引鍵來定義類別，而標籤值可為該類別中的某個項目。例如，您可以定義標籤索引鍵 `CostCenter`，且標籤值為 `10010`，指出資源是指派給 10010 成本中心。您也可利用 `Environment` 之類的索引鍵，和 `test` 或 `production` 之類的值，以使用標籤來指定用於測試或生產的資源。我們建議您使用一組一致的標籤索引鍵，讓您更輕鬆地追蹤與資源關聯的成本。

使用成本分配標籤來整理AWS帳單，以反映您自己的成本結構。若要這樣做，請註冊以取得包含標籤索引鍵值AWS的帳戶帳單。接著，若要查看合併資源的成本，請根據具有相同標籤鍵值的資源來整理您的帳單資訊。例如，您可以使用特定應用程式名稱來標記數個資源，然後整理帳單資訊以查看該應用程式跨數項服務的總成本。

您也可以結合標籤來以更高的細節層次追蹤成本。例如，若要按區域追蹤您的服務成本，您可以使用標籤索引鍵 `Service` 和 `Region`。在某個資源上，您會有值 `ElastiCache` 和 `Asia Pacific (Singapore)`，而在另一個資源上，則有值 `ElastiCache` 和 `Europe (Frankfurt)`。如此一來您就可以依區域劃分來查看您的 ElastiCache 總成本。如需詳細資訊，請參閱《*AWS Billing使用者指南*》中的[使用成本分配標籤](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

您可以將 ElastiCache 成本分配標籤新增至 ElastiCache 節點型叢集。新增、列出、修改、複製或移除標籤時，該操作只會套用至指定的叢集。

**ElastiCache 成本配置標籤的特性**
+ 成本配置標籤會套用至 ElastiCache 資源，這些資源是在 CLI 和 API 作業中以 ARN 的形式指定。資源類型會是「叢集」。

  ARN 範例：`arn:aws:elasticache:<region>:<customer-id>:<resource-type>:<resource-name>`

  範例 ARN：`arn:aws:elasticache:us-west-2:1234567890:cluster:my-cluster`
+ 標籤金鑰是標籤必要的名稱。索引鍵的字串值的長度可以是 1 到 128 個 Unicode 字元，不可在前面加上 `aws:`。此字串只能包含一組 Unicode 字母、數字、空格、底線 ( \$1 )、句點 ( . )、冒號 ( : )、反斜線 ( \$1 )、等號 ( = )、加號 ( \$1 )、連字號 ( - ) 或 @ 符號 (@)。

   
+ 標籤值為標籤的選用值。值的字串值長度可以是 1 到 256 個 Unicode 字元，不可在前面加上 `aws:`。此字串只能包含一組 Unicode 字母、數字、空格、底線 ( \$1 )、句點 ( . )、冒號 ( : )、反斜線 ( \$1 )、等號 ( = )、加號 ( \$1 )、連字號 ( - ) 或 @ 符號 (@)。

   
+ ElastiCache 資源最多可有 50 個標籤。

   
+ 標籤組中的值不必是唯一的。例如，您可以有一個標籤組，其中的索引鍵 `Service` 和 `Application` 都有值 `ElastiCache`。

AWS不會將任何語意意義套用至您的標籤。標籤將嚴格解譯為字元字串。AWS不會對任何 ElastiCache 資源自動設定任何標籤。

# 使用 管理您的成本分配標籤 AWS CLI
<a name="Tagging.Managing.CLI"></a>

您可以使用 AWS CLI 新增、修改或移除成本分配標籤。

成本分配標籤會套用至 ElastiCache 叢集。要加標籤的叢集是使用 ARN (Amazon Resource Name) 來指定。

範例 ARN：`arn:aws:elasticache:us-west-2:1234567890:cluster:my-cluster`

**Topics**
+ [使用 列出標籤 AWS CLI](#Tagging.Managing.CLI.List)
+ [使用 新增標籤 AWS CLI](#Tagging.Managing.CLI.Add)
+ [使用 修改標籤 AWS CLI](#Tagging.Managing.CLI.Modify)
+ [使用 移除標籤 AWS CLI](#Tagging.Managing.CLI.Remove)

## 使用 列出標籤 AWS CLI
<a name="Tagging.Managing.CLI.List"></a>

您可以使用 AWS CLI 來列出現有 ElastiCache 資源上的標籤，方法是使用 [list-tags-for-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticache/list-tags-for-resource.html)操作。

下列程式碼使用 AWS CLI 列出 us-west-2 `my-cluster` 區域中 Memcached 叢集上的標籤。

若為 Linux、macOS 或 Unix：

```
aws elasticache list-tags-for-resource \
  --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster
```

針對 Windows：

```
aws elasticache list-tags-for-resource ^
  --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster
```

下列程式碼使用 AWS CLI 列出區域 us-west-2 `my-cluster-001` 中`my-cluster`叢集中 Valkey 或 Redis OSS 節點上的標籤。

若為 Linux、macOS 或 Unix：

```
aws elasticache list-tags-for-resource \
  --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster-001
```

針對 Windows：

```
aws elasticache list-tags-for-resource ^
  --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster-001
```

此操作的輸出看起來應該類似以下，這是資源上所有標籤的清單。

```
{
   "TagList": [
      {
         "Value": "10110",
         "Key": "CostCenter"
      },
      {
         "Value": "EC2",
         "Key": "Service"
      }
   ]
}
```

如果資源上沒有標籤，輸出會是空的標籤清單。

```
{
   "TagList": []
}
```

如需詳細資訊，請參閱適用於 ElastiCache AWS CLI 的 [list-tags-for-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticache/list-tags-for-resource.html)。

## 使用 新增標籤 AWS CLI
<a name="Tagging.Managing.CLI.Add"></a>

您可以使用 CLI [add-tags-to-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticache/add-tags-to-resource.html) 操作 AWS CLI ，將標籤新增至現有的 ElastiCache 資源。如果標籤索引鍵不存在於資源上，則索引鍵和值會新增至資源。如果索引鍵已存在於資源上，則與該索引鍵相關聯的值會更新為新的值。

下列程式碼使用 AWS CLI 將索引鍵 `Service` 和 `Region` 與值 `elasticache`和 `us-west-2`分別新增至區域 us-west-2  `my-cluster-001` 中叢集中的節點。 `my-cluster`

**Memcached**

若為 Linux、macOS 或 Unix：

```
aws elasticache add-tags-to-resource \
 --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster \
 --tags Key=Service,Value=elasticache \
        Key=Region,Value=us-west-2
```

針對 Windows：

```
aws elasticache add-tags-to-resource ^
 --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster ^
 --tags Key=Service,Value=elasticache ^
        Key=Region,Value=us-west-2
```

**Redis**

若為 Linux、macOS 或 Unix：

```
aws elasticache add-tags-to-resource \
 --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster-001 \
 --tags Key=Service,Value=elasticache \
        Key=Region,Value=us-west-2
```

針對 Windows：

```
aws elasticache add-tags-to-resource ^
 --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster-001 ^
 --tags Key=Service,Value=elasticache ^
        Key=Region,Value=us-west-2
```

此操作的輸出看起來應該類似以下，這是在操作後資源上所有標籤的清單。

```
{
   "TagList": [
      {
         "Value": "elasticache",
         "Key": "Service"
      },
      {
         "Value": "us-west-2",
         "Key": "Region"
      }
   ]
}
```

如需詳細資訊，請參閱適用於 ElastiCache AWS CLI 的 [add-tags-to-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticache/add-tags-to-resource.html)。

當您使用 操作 建立新叢集時 AWS CLI ，您也可以使用 將標籤新增至叢集[create-cache-cluster](https://docs.aws.amazon.com/cli/latest/reference/elasticache/create-cache-cluster.html)。使用 ElastiCache 管理主控台建立叢集時無法新增標籤。建立叢集之後，您可以接著使用主控台來將標籤新增至叢集。

## 使用 修改標籤 AWS CLI
<a name="Tagging.Managing.CLI.Modify"></a>

您可以使用 AWS CLI 來修改 ElastiCache 叢集上的標籤。

若要修改標籤：
+ 使用 [add-tags-to-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticache/add-tags-to-resource.html) 來新增標籤和值，或是變更與現有標籤關聯的值。
+ 使用 [remove-tags-from-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticache/remove-tags-from-resource.html) 來從資源移除指定的標籤。

這兩項操作的輸出會是指定叢集上標籤和其值的清單。

## 使用 移除標籤 AWS CLI
<a name="Tagging.Managing.CLI.Remove"></a>

您可以使用 AWS CLI 操作，從現有的 ElastiCache for Memcached 叢集中移除標籤[remove-tags-from-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticache/remove-tags-from-resource.html)。

對於 Memcached，下列程式碼使用 AWS CLI ，`Region`從 us-west-2 區域中叢集`my-cluster-001`中的節點移除具有金鑰 `Service`和 `my-cluster`的標籤。

若為 Linux、macOS 或 Unix：

```
aws elasticache remove-tags-from-resource \
 --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster \
 --tag-keys PM Service
```

針對 Windows：

```
aws elasticache remove-tags-from-resource ^
 --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster ^
 --tag-keys PM Service
```

對於 Redis OSS，下列程式碼使用 AWS CLI ，`Region`從 us-west-2 區域中叢集`my-cluster-001`中的節點移除具有金鑰 `Service`和 `my-cluster`的標籤。

若為 Linux、macOS 或 Unix：

```
aws elasticache remove-tags-from-resource \
 --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster-001 \
 --tag-keys PM Service
```

針對 Windows：

```
aws elasticache remove-tags-from-resource ^
 --resource-name arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster-001 ^
 --tag-keys PM Service
```

此操作的輸出看起來應該類似以下，這是在操作後資源上所有標籤的清單。

```
{
   "TagList": []
}
```

如需詳細資訊，請參閱適用於 ElastiCache AWS CLI 的 [remove-tags-from-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticache/remove-tags-from-resource.html)。

# 使用 ElastiCache API 管理成本配置標籤
<a name="Tagging.Managing.API"></a>

您可以使用 ElastiCache API 來新增、修改或移除成本配置標籤。

成本配置標籤會套用至 ElastiCache for Memcached 叢集。要加標籤的叢集是使用 ARN (Amazon Resource Name) 來指定。

範例 ARN：`arn:aws:elasticache:us-west-2:1234567890:cluster:my-cluster`

**Topics**
+ [使用 ElastiCache API 列出標籤](#Tagging.Managing.API.List)
+ [使用 ElastiCache API 新增標籤](#Tagging.Managing.API.Add)
+ [使用 ElastiCache API 修改標籤](#Tagging.Managing.API.Modify)
+ [使用 ElastiCache API 移除標籤](#Tagging.Managing.API.Remove)

## 使用 ElastiCache API 列出標籤
<a name="Tagging.Managing.API.List"></a>

您可以使用 ElastiCache API，透過 [ListTagsForResource](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ListTagsForResource.html) 作業列出現有資源上的標籤。

對於 Memcached，下列程式碼使用 ElastiCache API 列出 us-west-2 `my-cluster` 區域中資源上的標籤。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=ListTagsForResource
   &ResourceName=arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Version=2015-02-02
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

對於 Redis OSS，下列程式碼使用 ElastiCache API 列出 us-west-2 `my-cluster-001` 區域中資源上的標籤。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=ListTagsForResource
   &ResourceName=arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster-001
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Version=2015-02-02
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

## 使用 ElastiCache API 新增標籤
<a name="Tagging.Managing.API.Add"></a>

您可以使用 ElastiCache API，透過 [AddTagsToResource](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_AddTagsToResource.html) 作業將標籤新增至現有的 ElastiCache 叢集。如果標籤索引鍵不存在於資源上，則索引鍵和值會新增至資源。如果索引鍵已存在於資源上，則與該索引鍵相關聯的值會更新為新的值。

下列程式碼使用 ElastiCache API 分別新增索引鍵 `Service`和 `Region` 與值 `elasticache`和 `us-west-2`。對於 Memcached，這會套用至資源 `my-cluster`。對於 Redis OSS，這會套用至 us-west-2 `my-cluster-001` 區域中的資源。

**Memcached**

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=AddTagsToResource
   &ResourceName=arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Tags.member.1.Key=Service 
   &Tags.member.1.Value=elasticache
   &Tags.member.2.Key=Region
   &Tags.member.2.Value=us-west-2
   &Version=2015-02-02
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

**Redis**

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=AddTagsToResource
   &ResourceName=arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster-001
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &Tags.member.1.Key=Service 
   &Tags.member.1.Value=elasticache
   &Tags.member.2.Key=Region
   &Tags.member.2.Value=us-west-2
   &Version=2015-02-02
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

如需詳細資訊，請參閱 *Amazon ElastiCache API 參考*中的「[AddTagsToResource](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_AddTagsToResource.html)」。

## 使用 ElastiCache API 修改標籤
<a name="Tagging.Managing.API.Modify"></a>

您可以使用 ElastiCache API 來修改 ElastiCache 叢集上的標籤。

若要修改標籤的值：
+ 使用 [AddTagsToResource](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_AddTagsToResource.html) 操作來新增標籤和值，或是變更現有標籤的值。
+ 使用 [RemoveTagsFromResource](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_RemoveTagsFromResource.html) 來從資源移除標籤。

這兩項操作的輸出會是指定資源上標籤和其值的清單。

使用 [RemoveTagsFromResource](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_RemoveTagsFromResource.html) 來從資源移除標籤。

## 使用 ElastiCache API 移除標籤
<a name="Tagging.Managing.API.Remove"></a>

您可以使用 ElastiCache API，透過 [RemoveTagsFromResource](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_RemoveTagsFromResource.html) 作業從現有 ElastiCache for Memcached 叢集移除標籤。

下列程式碼使用 ElastiCache API，將含有索引鍵 `Service` 和 `Region` 的標籤從 us-west-2 區域中 `my-cluster` 叢集裡的 `my-cluster-001` 節點移除。

```
https://elasticache.us-west-2.amazonaws.com/
   ?Action=RemoveTagsFromResource
   &ResourceName=arn:aws:elasticache:us-west-2:0123456789:cluster:my-cluster-001
   &SignatureVersion=4
   &SignatureMethod=HmacSHA256
   &TagKeys.member.1=Service
   &TagKeys.member.2=Region
   &Version=2015-02-02
   &Timestamp=20150202T192317Z
   &X-Amz-Credential=<credential>
```

# 使用 Amazon ElastiCache Well-Architected Lens
<a name="WellArchitechtedLens"></a>

本節描述 Amazon ElastiCache Well-Architected Lens，它提供了一套設計原則和指引，有助於設計出架構良好的 ElastiCache 工作負載。
+ ElastiCache Lens 可加入 [AWS  Well-Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html) 之中。
+ 每個支柱都有一組問題，可幫助您展開有關 ElastiCache 架構的討論。
  + 每個問題都有一些引導練習，且配有分數以便製作報告。
    + *必要* - 進入 prod 之前的必要前提 (缺少代表高風險)
    + *最佳* - 客戶能達到的最佳狀態
    + *良好* - 我們建議客戶達到的狀態 (缺少代表中等風險)
+ Well-Architected 的術語
  + [元件](https://docs.aws.amazon.com/wellarchitected/latest/framework/definitions.html) – 一起根據需求交付的程式碼、組態 AWS 和資源。元件會與其他元件互動，而且經常等同於微型服務架構中的服務。
  + [工作負載](https://docs.aws.amazon.com/wellarchitected/latest/framework/definitions.html) - 一組共同提供商業價值的元件。工作負載的範例包括行銷網站、電子商務網站、行動應用程式後端系統、分析平台等。

**注意**  
本指南尚未更新，以包含 ElastiCache 無伺服器快取和新 Valkey 引擎的相關資訊。

**Topics**
+ [Amazon ElastiCache Well-Architected Lens 卓越運作支柱](OperationalExcellencePillar.md)
+ [Amazon ElastiCache Well-Architected Lens 安全支柱](SecurityPillar.md)
+ [Amazon ElastiCache Well-Architected Lens 可靠性支柱](ReliabilityPillar.md)
+ [Amazon ElastiCache Well-Architected Lens 效能效率支柱](PerformanceEfficiencyPillar.md)
+ [Amazon ElastiCache Well-Architected Lens 成本最佳化支柱](CostOptimizationPillar.md)

# Amazon ElastiCache Well-Architected Lens 卓越運作支柱
<a name="OperationalExcellencePillar"></a>

卓越營運支柱著重於執行和監控系統，以提供商業價值並持續改善流程和程序。重要主題包括自動化變更、回應事件，以及定義管理日常作業的標準。

**Topics**
+ [OE 1：如何了解及回應 ElastiCache 叢集觸發的警示和事件？](#OperationalExcellencePillarOE1)
+ [OE 2：何時及如何擴展您現有的 ElastiCache 叢集？](#OperationalExcellencePillarOE2)
+ [OE 3：如何管理 ElastiCache 叢集資源並讓叢集保持最新狀態？](#OperationalExcellencePillarOE3)
+ [OE 4：如何管理用戶端與您的 ElastiCache 叢集的連線？](#OperationalExcellencePillarOE4)
+ [OE 5：如何為工作負載部署 ElastiCache 元件？](#OperationalExcellencePillarOE5)
+ [OE 6：如何規劃故障因應措施及減少故障？](#OperationalExcellencePillarOE6)
+ [OE 7：如何疑難排解 Valkey 或 Redis OSS 引擎事件？](#OperationalExcellencePillarOE7)

## OE 1：如何了解及回應 ElastiCache 叢集觸發的警示和事件？
<a name="OperationalExcellencePillarOE1"></a>

**問題難易度簡介：**當您操作 ElastiCache 叢集時，您可以選擇在特定事件發生時接收通知和警示。根據預設，ElastiCache 會記錄與資源相關的[事件](ECEvents.md)，例如容錯移轉、節點取代、擴展操作、排程維護等。每個事件都包含日期與時間、來源名稱與來源類型，以及說明。

**問題難易度優點：**只要能夠了解並管理觸發叢集產生警示的事件背後的基本原因，就能更有效地操作並適當回應事件。
+ **【必要】** 在 ElastiCache ElastiCache 主控台 （選取您的區域之後） 或使用 [Amazon Command Line Interface](https://aws.amazon.com/cli) (AWS CLI) [describe-events](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-events.html) 命令和 [ElastiCache API 來檢閱 ElastiCache ](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeEvents.html)產生的事件。將 ElastiCache 設定為使用 Amazon Simple Notification Service (Amazon SNS) 傳送重要叢集事件的通知。使用 Amazon SNS 搭配您的叢集，就可透過程式設計的方式對 ElastiCache 事件採取行動。
  + 事件分成兩大類：目前事件和排定事件。目前事件清單包括：資源建立和刪除、擴展操作、容錯移轉、節點重新開機、建立快照、叢集參數修改、CA 憑證更新、失敗事件 (叢集佈建失敗 - VPC 或 ENI、擴展失敗 - ENI 和快照失敗)。排定事件清單包括：排定在維護時段進行更換的節點，以及重新排定的節點更換作業。
  + 雖然您不需要立即回應其中一些事件，但務必先查看所有失敗事件：
    + ElastiCache:AddCacheNodeFailed
    + ElastiCache:CacheClusterProvisioningFailed
    + ElastiCache:CacheClusterScalingFailed
    + ElastiCache:CacheNodesRebooted
    + ElastiCache：SnapshotFailed （僅限 Valkey 或 Redis OSS)
  + **[資源]：**
    + [管理 ElastiCache Amazon SNS 通知](ECEvents.SNS.md)
    + [事件通知和 Amazon SNS](ElastiCacheSNS.md)
+ **【最佳】** 若要自動回應事件，請利用 SNS AWS 和 Lambda 函數等產品和服務功能。遵循最佳實務進行小量、頻繁、可恢復的變更，以程式碼形式隨著時間讓您的操作演進。您應使用 Amazon CloudWatch 指標來監控您的叢集。

  **【資源】：**針對使用 [Lambda 和 SNS 的使用案例，使用 AWS Lambda、Amazon Route 53 和 Amazon SNS 監控 ElastiCache （停用叢集模式） 僅供讀取複本端點 Amazon SNS](https://aws.amazon.com/blogs/database/monitor-amazon-elasticache-for-redis-cluster-mode-disabled-read-replica-endpoints-using-aws-lambda-amazon-route-53-and-amazon-sns/)。

## OE 2：何時及如何擴展您現有的 ElastiCache 叢集？
<a name="OperationalExcellencePillarOE2"></a>

**問題難易度簡介：**將 ElastiCache 叢集調整成適當規模是一種平衡動作，只要基礎工作負載類型發生變更就需評估該動作。您的目標是讓您的工作負載在適當規模的環境下運作。

**問題難易度優點：**資源過度利用可能會導致延遲增加且整體效能降低。另一方面來說，使用不足可能會導致資源過度佈建，而以非最佳成本最佳化。只要適當調整環境的規模，您就能在效能效率與成本最佳化之間取得平衡。為了補救資源過度利用或利用不足的情形，ElastiCache 可採取兩種維度進行縮減。您可以增加或減少節點容量來垂直擴展。您也可以新增和移除節點來水平擴展。
+ **[必要] **解決主節點上 CPU 和網路過度利用的方法，是卸載讀取操作並將其重新導向至複本節點。使用複本節點進行讀取操作，可降低主節點的使用率。這可以透過連接到停用叢集模式的 ElastiCache 讀取器端點，或使用啟用叢集模式的 READONLY 命令，在您的 Valkey 或 Redis OSS 用戶端程式庫中設定。

  **[資源]：**
  + [在 ElastiCache 中尋找連線端點](Endpoints.md)
  + [適當調整叢集規模](https://aws.amazon.com/blogs/database/five-workload-characteristics-to-consider-when-right-sizing-amazon-elasticache-redis-clusters/)
  + [讀取命令](https://valkey.io/commands/readonly)
+ **[必要] **監控重要叢集資源 (如 CPU、記憶體和網路) 的使用率。需追蹤這些特定叢集資源的使用率，才能在擴展和擴展操作類型方面做出明智的決策。對於停用 ElastiCache 叢集模式，主要節點和複本節點可以垂直擴展。複本節點也可以從 0 到 5 個節點水平擴展。若叢集模式已啟用，叢集的每個碎片內情況也相同。此外，您可以增加或減少碎片的數量。

  **[資源]：**
  + [使用 Amazon CloudWatch 監控 ElastiCache 的最佳實務](https://aws.amazon.com/blogs/database/monitoring-best-practices-with-amazon-elasticache-for-redis-using-amazon-cloudwatch/)
  + [擴展適用於 Valkey 和 Redis OSS 的 ElastiCache 叢集](Scaling.md)
  + [擴展 Memcached 的 ElastiCache 叢集](Scaling.md)
+ **[最佳] **隨著時間監控趨勢可幫助您偵測到在特定時間點監控時，可能無法察覺的工作負載變更。若要偵測更長期的趨勢，請使用 CloudWatch 指標來掃描更長的時間範圍。長期觀測 CloudWatch 指標所獲得的經驗，應能幫助您預測預測叢集資源使用率。CloudWatch 資料點和指標最多可使用 455 天。

  **[資源]：**
  + [使用 CloudWatch 指標監控 ElastiCache ](CacheMetrics.md)
  + [使用 CloudWatch 指標監控 Memcached](CacheMetrics.md)
  + [使用 Amazon CloudWatch 監控 ElastiCache 的最佳實務](https://aws.amazon.com/blogs/database/monitoring-best-practices-with-amazon-elasticache-for-redis-using-amazon-cloudwatch/)
+ **[最佳] **如果您的 ElastiCache 資源是使用 CloudFormation 所建立，則最佳實務是使用 CloudFormation 範本進行變更，以保持操作一致性，並避免發生未受管理的組態變更和堆疊漂移。

  **[資源]：**
  + [CloudFormation 的 ElastiCache 資源類型參考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElastiCache.html)
+ **[最佳] **使用叢集操作資料自動化擴展操作，並在 CloudWatch 中定義閾值以設定警示。使用 CloudWatch 事件和 Simple Notification Service (SNS) 觸發 Lambda 函數，並執行 ElastiCache API 以自動擴展您的叢集。例如，在 `EngineCPUUtilization` 指標經過長時間之後達到 80% 時，將碎片新增至叢集。另一個選項是使用 `DatabaseMemoryUsedPercentages` 作為記憶體型閾值。

  **[資源]：**
  + [使用 Amazon CloudWatch 警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)
  + [什麼是 Amazon CloudWatch 事件？](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html)
  + [AWS Lambda 搭配 Amazon Simple Notification Service 使用](https://docs.aws.amazon.com/lambda/latest/dg/with-sns.html)
  + [ElastiCache API 參考](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/Welcome.html)

## OE 3：如何管理 ElastiCache 叢集資源並讓叢集保持最新狀態？
<a name="OperationalExcellencePillarOE3"></a>

**問題難易度簡介：**大規模操作時，您必須能夠精確找出並識別所有 ElastiCache 資源。推出新的應用程式功能時，您需要在所有 ElastiCache 環境類型中建立對稱的叢集版本：開發、測試和生產。資源屬性可讓您針對不同的操作目標分隔環境，例如在推出新功能和啟用新的安全機制時。

**問題難易度優點：**將開發、測試和生產環境加以分隔，是最佳操作實務。在整個環境中利用充分了解並妥善記載的程序對叢集和節點套用最新的軟體修補程式，同樣也是最佳實務。利用原生 ElastiCache 功能可讓您的工程團隊專注於達成業務目標，而不需分心處理 ElastiCache 維護工作。
+ **[最佳] **在可用的最新引擎版本上執行，並且一推出自助式更新就盡快套用。ElastiCache 會在您指定的叢集維護時段自動更新其基礎設施。不過，叢集中執行的節點則會透過自助式更新進行更新。這些更新有兩種類型：安全修補程式或次要軟體更新。您務必了解修補程式類型的差異，以及套用的時機。

  **[資源]：**
  + [Amazon ElastiCache 中的自助式更新](Self-Service-Updates.md)
  + [Amazon ElastiCache 受管維護與服務更新說明頁面](https://aws.amazon.com/elasticache/elasticache-maintenance/)
+ **[最佳]** 使用標籤來整理您的 ElastiCache 資源。在複寫群組上使用標籤，而非在個別節點上使用。您可以設定在查詢資源時顯示的標籤，也可以使用標籤來執行搜尋和套用篩選器。您可使用資源群組輕鬆建立和維護擁有共同標籤集的資源集合。

  **[資源]：**
  + [標記最佳實務](https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf)
  + [CloudFormation 的 ElastiCache 資源類型參考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElastiCache.html)
  + [參數群組](ParameterGroups.Engine.md#ParameterGroups.Redis)

## OE 4：如何管理用戶端與您的 ElastiCache 叢集的連線？
<a name="OperationalExcellencePillarOE4"></a>

**問題難易度簡介：**大規模操作時，您需要了解用戶端如何與 ElastiCache 叢集連線，以便管理應用程式操作層面 (例如回應時間)。

**問題難易度優點：**選擇最合適的連線機制，可確保應用程式不會因為連線錯誤 (例如逾時) 而中斷連線。
+ **[必要] **將讀取與寫入操作分開，並連線至複本節點來執行讀取操作。不過，請注意，當您將寫入與讀取分開時，由於 Valkey 和 Redis OSS 複寫的非同步性質，在寫入金鑰後立即將無法讀取金鑰。WAIT 命令可用來改善真實世界的資料安全性，並強制複本先確認寫入才能回應用戶端，但要付出整體效能成本的代價。您可以使用停用叢集模式的 ElastiCache 讀取器端點，在 ElastiCache 用戶端程式庫中設定用於讀取操作的複本節點。對於啟用的叢集模式，請使用 READONLY 命令。對於許多 ElastiCache 用戶端程式庫，依預設或透過組態設定實作 READONLY。

  **[資源]：**
  + [在 ElastiCache 中尋找連線端點](Endpoints.md)
  + [READONLY](https://valkey.io/commands/readonly)
+ **[必要] **使用連線集區。無論在用戶端或伺服器端建立 TCP 連線，都會伴隨 CPU 時間成本，而集區可讓您重複使用 TCP 連線。

  為了減少連線額外負荷，建議您使用連線集區。有了連線集區，您的應用程式就可以「隨意」重複使用和釋出連線，而不會因建立連線而產生成本。您可以透過 ElastiCache 用戶端程式庫 （如果支援） 實作連線集區，並使用適用於您應用程式環境的架構，或從頭開始建置。
+ **[最佳]** 確實將用戶端的通訊端逾時設定為至少 1 秒 (相較於數個用戶端中的一般預設值「無」)。
  + 若設定的逾時值太低，可能導致伺服器負載較高時發生逾時。若設定的值太高，則可能導致您的應用程式花費很長的時間來偵測連線問題。
  + 藉由在用戶端應用程式中實作連線集區來控制新連線的數量。這樣做可降低開啟和關閉連線所需的延遲和 CPU 使用率，並且在叢集上已啟用 TLS 的情況下執行 TLS 交握。

  **【資源】：**[設定 ElastiCache 以獲得更高的可用性](https://aws.amazon.com/blogs/database/configuring-amazon-elasticache-for-redis-for-higher-availability/)
+ **[良好]** 使用管道傳輸 (您的使用案例允許的話) 可大幅提高效能。
  + 使用管道傳輸可減少應用程式用戶端與叢集之間的往返時間 (RTT)，而且即使用戶端尚未讀取先前的回應，也可以處理新的請求。
  + 使用管道傳輸可一次將多個命令傳送至伺服器，而不需等待回覆/確認。管道傳輸的缺點在於，當您最後大量截取所有回應時，可能已有錯誤發生，但您直到最後才察覺到。
  + 當傳回錯誤而忽略錯誤請求時，實作方法來重試請求。

  **[資源]：**[管道傳輸](https://valkey.io/topics/pipelining/)

## OE 5：如何為工作負載部署 ElastiCache 元件？
<a name="OperationalExcellencePillarOE5"></a>

**問題層級簡介：**ElastiCache 環境可透過 AWS 主控台手動部署，或透過 APIs、CLI、工具組等以程式設計方式部署。卓越運作最佳實務建議您，盡可能透過程式碼自動化部署。此外，ElastiCache 叢集可依工作負載加以區隔，也可相互結合以達到成本最佳化。

**問題難易度優點：**為您的 ElastiCache 環境選擇最合適的部署機制，就能隨著時間推移提升卓越運作的成效。建議您盡可能以程式碼形式執行操作，以便盡量減少人為錯誤並增加事件的重複能力、彈性和回應時間。

只要了解工作負載隔離的需求，您就可以選擇讓每一項工作負載擁有專用的 ElastiCache 環境，或將多個工作負載結合為單一叢集或其組合。了解當中的權衡，有助於在卓越運作和成本最佳化之間取得平衡
+ **[必要] **了解 ElastiCache 可用的部署選項，並盡可能將這些程序自動化。自動化的可能途徑包括 CloudFormation、 AWS CLI/SDK 和 APIs。

  **[資源]：**
  + [Amazon ElastiCache 資源類型參考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElastiCache.html)
  + [elasticache](https://docs.aws.amazon.com/cli/latest/reference/elasticache/index.html)
  + [Amazon ElastiCache API 參考](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/Welcome.html)
+ **[必要] **為所有工作負載決定所需的叢集隔離層級。
  + **[最佳]：**高度隔離 - 工作負載對叢集的對應為 1:1。能夠以每個工作負載為基礎，對 ElastiCache 資源的存取、調整大小、擴展及管理實施最精細的控制。
  + **[較佳]：**中度隔離 - 依用途採 M:1 隔離，但可能跨多個工作負載共用 (例如，一個叢集專門用來快取工作負載，而另一個叢集專門用來傳訊)。
  + **[良好]：**低度隔離 - 所有用途均採 M:1 隔離，完全共用。建議用於可接受共用存取的工作負載。

## OE 6：如何規劃故障因應措施及減少故障？
<a name="OperationalExcellencePillarOE6"></a>

**問題難易度簡介：**卓越運作包括執行定期的「預先檢測」活動來預測故障情形，以找出可能的故障來源，有利於及早將其移除或緩解。ElastiCache 提供盧容錯移轉 API，可基於測試目的用於模擬節點故障事件。

**問題難易度優點：**透過提前測試故障情況，您就可以了解它們如何影響您的工作負載。這樣就能安全測試回應程序及其有效性，並且讓您的團隊熟悉其執行過程。

**[必要]** 定期以開發/測試帳戶執行容錯移轉測試。[TestFailover](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_TestFailover.html)

## OE 7：如何疑難排解 Valkey 或 Redis OSS 引擎事件？
<a name="OperationalExcellencePillarOE7"></a>

**問題難易度簡介：**卓越運作需要能夠同時調查服務層級和引擎層級的資訊，以分析叢集的運作狀況和狀態。ElastiCache 可以向 Amazon CloudWatch 和 Amazon Kinesis Data Firehose 發出 Valkey 或 Redis OSS 引擎日誌。

**問題層級優點：**在 ElastiCache 叢集上啟用 Valkey 或 Redis OSS 引擎日誌，可讓您深入了解影響叢集運作狀態和效能的事件。Valkey 或 Redis OSS 引擎日誌會直接從引擎提供無法透過 ElastiCache 事件機制取得的資料。透過仔細觀察 ElastiCache 事件 （請參閱先前的 OE-1) 和引擎日誌，可以在從 ElastiCache 服務和引擎觀點進行故障診斷時判斷事件順序。
+ **【必要】** 確保 Redis OSS 引擎記錄功能已啟用，該功能可從適用於 Redis OSS 和更新版本的 ElastiCache 6.2 版取得。此功能可在建立叢集期間啟用，或是在建立後，藉由修改叢集來啟用。
  + 判斷 Amazon CloudWatch Logs 或 Amazon Kinesis Data Firehose 是否為 Redis OSS 引擎日誌的適當目標。
  + 在 CloudWatch 或 Kinesis Data Firehose 內選取適當的目標日誌，以用來保留日誌。如果您有多個叢集，請考慮讓每個叢集使用不同的目標日誌，因為這樣做有助於在故障診斷時隔離資料。

  **[資源]：**
  + 日誌傳送：[日誌傳送](Log_Delivery.md)
  + 記錄目的地：[Amazon CloudWatch Logs](Logging-destinations.md#Destination_Specs_CloudWatch_Logs)
  + Amazon CloudWatch Logs 簡介：[什麼是 Amazon CloudWatch Logs？](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)
  + Amazon Kinesis Data Firehose 簡介：[什麼是 Amazon Kinesis Data Firehose?](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html)
+ **【最佳】** 如果使用 Amazon CloudWatch Logs，請考慮利用 Amazon CloudWatch Logs Insights 查詢 Valkey 或 Redis OSS 引擎日誌以取得重要資訊。

  例如，針對包含 Valkey 或 Redis OSS 引擎日誌的 CloudWatch Log 群組建立查詢，該日誌將傳回 LogLevel 為「WARNING」的事件，例如：

  ```
  fields @timestamp, LogLevel, Message
  | sort @timestamp desc
  | filter LogLevel = "WARNING"
  ```

  **[資源]：**[使用 CloudWatch Logs Insights 分析日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)

# Amazon ElastiCache Well-Architected Lens 安全支柱
<a name="SecurityPillar"></a>

安全支柱著重於保護資訊和系統。重要主題包括資料的機密性和完整性、識別和管理誰可以透過權限為主的管理做什麼、保護系統，以及建立控制項來偵測安全事件。

**Topics**
+ [SEC 1：您採取哪些步驟來控制授權存取 ElastiCache 資料的行為？](#SecurityPillarSEC1)
+ [SEC 2：您的應用程式是否需有額外的授權才能對 ElastiCache 進行網路為主及更高的控制？](#SecurityPillarSEC2)
+ [SEC 3：是否存在可能不小心執行命令而造成資料遺失或故障的風險？](#SecurityPillarSEC3)
+ [SEC 4：如何使用 ElastiCache 確保靜態資料加密](#SecurityPillarSEC4)
+ [SEC 5：如何使用 ElastiCache 加密傳輸中的資料？](#SecurityPillarSEC5)
+ [SEC 6：如何限制對控制平面資源的存取權？](#SecurityPillarSEC6)
+ [SEC 7：如何偵測和回應安全事件？](#SecurityPillarSEC7)

## SEC 1：您採取哪些步驟來控制授權存取 ElastiCache 資料的行為？
<a name="SecurityPillarSEC1"></a>

**問題難易度簡介：**所有 ElastiCache 叢集都設計為可從 VPC 中的 Amazon Elastic Compute Cloud 執行個體、無伺服器函數 (AWS Lambda) 或容器 (Amazon Elastic Container Service) 進行存取。最常遇到的情況是從同一個 Amazon Virtual Private Cloud (Amazon Virtual Private Cloud) 內的 Amazon Elastic Compute Cloud 執行個體存取 ElastiCache 叢集。您必須先授權讓 Amazon EC2 執行個體存取叢集，才能從 Amazon EC2 執行個體連線至叢集。若要存取 VPC 中執行的 ElastiCache 叢集，則必須對叢集的網路輸入權限。

**問題難易度優點：**進入叢集的網路輸入是透過 VPC 安性群組控制。安全群組會做為您 Amazon EC2 執行個體的虛擬防火牆，負責控制傳入及傳出流量。傳入規則會控制傳入至您的執行個體的流量，以及傳出規則會控制從您的執行個體傳出的流量。以 ElastiCache 為例，啟動叢集時，它需要與安全群組建立關聯。這樣可確保組成叢集的所有節點都已設有傳入和傳出流量規則。此外，ElastiCache 會設定為只能在私有子網路上部署，如此就只能透過 VPC 的私有網路存取這些子網路。
+ **[必要] **與叢集相關聯的安全群組會控制叢集的網路輸入和存取。根據預設，安全群組不會定義任何傳入規則，因此沒有 ElastiCache 的輸入路徑。若要啟用此功能，請在安全群組上設定傳入規則，指定來源 IP 地址/範圍、TCP 類型流量和 ElastiCache 叢集的連接埠 （例如 ElastiCache for Valkey 和 Redis OSS 的預設連接埠 6379)。雖然可以允許非常廣泛的輸入來源，例如 VPC 內的所有資源 (0.0.0.0/0)，但建議在定義傳入規則時盡可能精細，例如僅授權對在與特定安全群組相關聯的 Amazon EC2 執行個體上執行的 Valkey 或 Redis OSS 用戶端進行傳入存取。

  **[資源]：**
  + [子網路和子網路群組](SubnetGroups.md)
  + [存取您的叢集或複寫群組](accessing-elasticache.md)
  + [使用安全群組控制前往資源的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html#DefaultSecurityGroupdefault%20security%20group)
  + [適用於 Linux 執行個體的 Amazon Elastic Compute Cloud 安全群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html#creating-your-own-security-groups)
+ **【必要】 **AWS Identity and Access Management 政策可指派給允許其存取 ElastiCache 資料的 AWS Lambda 函數。若要啟用此功能，請使用 `AWSLambdaVPCAccessExecutionRole`許可建立 IAM 執行角色，然後將角色指派給 AWS Lambda 函數。

  **[資源]：**設定 Lambda 函數使其能夠存取 Amazon VPC 中的 Amazon ElastiCache：[教學課程：設定 Lambda 函數使其能夠存取 Amazon VPC 中的 Amazon ElastiCache](https://docs.aws.amazon.com/lambda/latest/dg/services-elasticache-tutorial.html)

## SEC 2：您的應用程式是否需有額外的授權才能對 ElastiCache 進行網路為主及更高的控制？
<a name="SecurityPillarSEC2"></a>

**問題層級簡介：**在需要限制或控制對個別用戶端層級叢集的存取的情況下，建議透過 AUTH 命令進行驗證。ElastiCache 身分驗證字符搭配選用的使用者和使用者群組管理，可讓 ElastiCache 在允許用戶端執行命令和存取金鑰之前要求密碼，藉此改善資料平面安全性。

**問題層級優點：**為了協助保護您的資料安全，ElastiCache 提供機制來防止未經授權存取您的資料。當中包括強制執行角色型存取控制 (RBAC) AUTH，或是強制用戶端使用 AUTH 字符 (密碼) 來連線到 ElastiCache，然後才能執行授權的命令。
+ **【最佳】 **對於適用於 Redis OSS 的 ElastiCache 6.x 版和更新版本，以及適用於 Valkey 的 ElastiCache 7.2 版和更新版本，請透過定義使用者群組、使用者和存取字串來定義身分驗證和授權控制。將使用者指派至使用者群組，然後將使用者群組指派至叢集。若要使用 RBAC，則必須在建立叢集時選取它，並且必須啟用傳輸中加密。確保您使用的是支援 TLS 的 Valkey 或 Redis OSS 用戶端，以便能夠利用 RBAC。

  **[資源]：**
  + [將 RBAC 套用至 ElastiCache 的複寫群組](Clusters.RBAC.md#rbac-using)
  + [使用存取字串指定許可](Clusters.RBAC.md#Access-string)
  + [ACL](https://valkey.io/topics/acl/)
  + [支援的 ElastiCache 版本](VersionManagement.md#supported-engine-versions)
+ **【最佳】 **對於適用於 Redis OSS 的 6.x 之前的 ElastiCache 版本，除了為 AUTH 設定強式字符/密碼和維護嚴格的密碼政策之外，最佳實務是輪換密碼/字符。ElastiCache 在任一特定時間點最多可管理兩 (2) 個身分驗證字符。您也可以修改叢集，以明確要求使用身分驗證字符。

  **【資源】：**[修改現有 ElastiCache 叢集上的 AUTH 字符](auth.md#auth-modifyng-token)

## SEC 3：是否存在可能不小心執行命令而造成資料遺失或故障的風險？
<a name="SecurityPillarSEC3"></a>

**問題層級簡介：**有許多 Valkey 或 Redis OSS 命令，如果錯誤執行或由惡意執行者執行，可能會對操作產生負面影響。從效能和資料安全的角度來看，這些命令可能會產生預料之外的後果。例如，開發人員可能會在開發環境中例行呼叫 FLUSHALL 命令，而由於錯誤可能會在生產系統上不小心嘗試呼叫此命令，進而導致意外的資料遺失。

**問題難易度優點：**從適用於 Redis OSS 的 ElastiCache 5.0.3 版開始，您可以重新命名可能對工作負載造成干擾的特定命令。重新命名命令有助於防止它們在叢集上意外執行。
+ **[必要]**

  **[資源]：**
  + [適用於 Redis OSS 的 ElastiCache 5.0.3 版 （已棄用，請使用 5.0.6 版）](engine-versions.md#redis-version-5-0.3)
  + [ElastiCache 5.0.3 版的 Redis OSS 參數變更](ParameterGroups.Engine.md#ParameterGroups.Redis.5-0-3)
  + [Redis OSS 安全性](https://redis.io/docs/management/security/)

## SEC 4：如何使用 ElastiCache 確保靜態資料加密
<a name="SecurityPillarSEC4"></a>

**問題層級簡介：**雖然 ElastiCache 是記憶體內資料存放區，但可以加密任何可能保留 （在儲存上） 做為叢集標準操作一部分的資料。這包括寫入 Amazon S3 的排程和手動備份，以及因同步和交換操作而儲存到磁碟儲存空間的資料。M6g 和 R6g 系列中的執行個體類型也具有永遠開啟記憶體內加密功能。

**問題層級優點：**ElastiCache 提供選用的靜態加密，以提高資料安全性。
+ **[必要] **只有在建立 ElastiCache 叢集 (複寫群組) 後，才能啟用靜態加密。無法藉由修改現有叢集來開始加密靜態資料。根據預設，ElastiCache 會提供和管理靜態加密中使用的金鑰。

  **[資源]：**
  + [靜態加密限制](at-rest-encryption.md#at-rest-encryption-constraints)
  + [啟用靜態加密](at-rest-encryption.md#at-rest-encryption-enable)
+ **[最佳] **利用 Amazon EC2 執行個體類型，它會在資料位於記憶體中時加密資料 (例如 M6g 或 R6g)。盡可能考慮管理自己的靜態加密金鑰。對於更嚴格的資料安全環境， AWS Key Management Service (KMS) 可用於自我管理客戶主金鑰 (CMK)。透過與 ElastiCache 整合 AWS Key Management Service，您可以建立、擁有和管理用於 ElastiCache 叢集靜態資料加密的金鑰。

  **[資源]：**
  + [使用來自 的客戶受管金鑰 AWS Key Management Service](at-rest-encryption.md#using-customer-managed-keys-for-elasticache-security)
  + [AWS 金鑰管理服務](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)
  + [AWS  KMS 概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)

## SEC 5：如何使用 ElastiCache 加密傳輸中的資料？
<a name="SecurityPillarSEC5"></a>

**問題難易度簡介：**一般常會要求在傳輸過程中減少資料遭到入侵的情況。這代表分散式系統元件內的資料，以及應用程式用戶端和叢集節點之間的資料。ElastiCache 允許在用戶端和叢集之間以及叢集節點本身之間加密傳輸中的資料，以支援此需求。M6g 和 R6g 系列中的執行個體類型也具有永遠開啟記憶體內加密功能。

**問題難易度優點：**Amazon ElastiCache 傳輸中加密是一項選用功能，可讓您在資料最易遭受攻擊的點，也就是資料在地點間傳輸時，增加資料的安全性。
+ **【必要】 **傳輸中加密只能在建立時於叢集 （複寫群組） 上啟用。請注意，由於加密/解密資料需要進行額外處理，因此實作傳輸中加密會對效能造成一些影響。若要了解其影響，建議您分別在啟用傳輸中加密之前和之後建立工作負載的基準。

  **[資源]：**
  + [傳輸中加密概觀](in-transit-encryption.md#in-transit-encryption-overview)

## SEC 6：如何限制對控制平面資源的存取權？
<a name="SecurityPillarSEC6"></a>

**問題層級簡介：IAM **政策和 ARN 啟用 ElastiCache for Valkey 和 Redis OSS 的精細存取控制，允許更嚴格的控制來管理叢集的建立、修改和刪除。

**問題難易度優點：**Amazon ElastiCache 資源 (例如複寫群組、節點等) 的管理工作可根據 IAM 政策限於具有特定許可的  AWS  帳戶，藉此改善資源的安全和可靠性。
+ **【必要】 **透過將特定 AWS Identity and Access Management政策指派給使用者來 AWS 管理對 Amazon ElastiCache 資源的存取，從而更精確地控制哪些帳戶可以在叢集上執行哪些動作。

  **[資源]：**
  + [管理您的 ElastiCache 資源的存取許可概觀](IAM.Overview.md)
  + [針對 Amazon ElastiCache 使用以身分為基礎的政策 (IAM 政策)](IAM.IdentityBasedPolicies.md)

## SEC 7：如何偵測和回應安全事件？
<a name="SecurityPillarSEC7"></a>

**問題難易度簡介：**在啟用 RBAC 的情況下進行部署時，ElastiCache 會匯出 CloudWatch 指標以通知使用者有安全事件。這些指標有助於找出企圖進行驗證、存取金鑰，或連線的 RBAC 使用者企圖執行未獲授權之命令的失敗嘗試。

此外， AWS 產品和服務資源可透過自動化部署和記錄所有動作和修改以供日後檢閱/稽核，協助保護整體工作負載。

**問題難易度優點：**藉由監控事件可讓您的組織根據您的需求、政策和程序做出回應。自動監控和回應這些安全事件，可強化您的整體安全態勢。
+ **[必要] **熟悉與 RBAC 身分驗證和授權失敗相關的已發佈 CloudWatch 指標。
  + AuthenticationFailures = 嘗試向 Valkey 或 Redis OSS 驗證失敗
  + KeyAuthorizationFailures = 使用者嘗試在未經許可的情況下存取金鑰失敗
  + CommandAuthorizationFailures = 使用者嘗試在未經許可的情況下執行命令失敗

  **[資源]：**
  + [Valkey 或 Redis OSS 的指標](CacheMetrics.Redis.md)
+ **[最佳] **建議在這些指標上設定警示和通知，並視需要做出回應。

  **[資源]：**
  + [使用 Amazon CloudWatch 警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)
+ **【最佳】 **使用 Valkey 或 Redis OSS ACL LOG 命令來收集更多詳細資訊

  **[資源]：**
  + [ACL LOG](https://valkey.io/commands/acl-log/)
+ **[最佳] **熟悉  AWS  產品和服務功能，因為它與監控、記錄及分析 ElastiCache 部署和事件相關

  **[資源]：**
  + [使用  AWS CloudTrail 記錄 Amazon ElastiCache API 呼叫](logging-using-cloudtrail.md)
  + [elasticache-redis-cluster-automatic-backup-check](https://docs.aws.amazon.com/config/latest/developerguide/elasticache-redis-cluster-automatic-backup-check.html)
  + [使用 CloudWatch 指標監控用量](CacheMetrics.md)

# Amazon ElastiCache Well-Architected Lens 可靠性支柱
<a name="ReliabilityPillar"></a>

可靠性支柱著重於執行其預期功能的工作負載，以及如何從失敗中快速復原以滿足需求。關鍵主題包括分散式系統設計、復原規劃，以及適應不斷變化的需求。

**Topics**
+ [REL 1：如何支援高可用性 (HA) 架構部署？](#ReliabilityPillarREL1)
+ [REL 2：如何使用 ElastiCache 來達成您的復原點目標 (RPO)？](#ReliabilityPillarREL2)
+ [REL 3：如何支援災難復原 (DR) 需求？](#ReliabilityPillarREL3)
+ [REL 4：如何有效地規劃容錯移轉？](#ReliabilityPillarREL4)
+ [REL 5：您的 ElastiCache 元件是否設計為可擴展？](#ReliabilityPillarREL5)

## REL 1：如何支援高可用性 (HA) 架構部署？
<a name="ReliabilityPillarREL1"></a>

**問題難易度簡介：**了解 Amazon ElastiCache 的高可用性架構，將可讓您在可用性事件期間彈性地進行操作。

**問題難易度優點：**架構 ElastiCache 叢集使其能夠彈性地從故障中恢復，就可確保提高 ElastiCache 部署的可用性。
+ **[必要] **判斷您的 ElastiCache 叢集需要的可靠性層級。不同的工作負載具有不同的彈性標準，從完全暫時性工作負載到關鍵任務工作負載都有。為您操作所在的每一種環境 (例如開發、測試和生產) 定義需求。

  快取引擎：ElastiCache for Memcached 與 ElastiCache for Valkey 和 Redis OSS

  1. ElastiCache for Memcached 不提供任何複寫機制，主要用於暫時性工作負載。

  1. ElastiCache for Valkey 和 Redis OSS 提供如下所述的 HA 功能
+ **【最佳】 **對於需要 HA 的工作負載，請在叢集模式中使用 ElastiCache，每個碎片至少有兩個複本，即使對於只需要一個碎片的小型輸送量需求工作負載也是如此。

  1. 若叢集模式已啟用，則會自動啟用多可用區。

     多可用區可在進行任何規劃或意外的維護工作以及減少可用區域故障時。藉由自動從主節點容錯移轉至複本的方式，將停機時間降至最低。

  1. 對於碎片工作負載，至少三個碎片在容錯移轉事件期間提供更快的復原，因為 Valkey 或 Redis OSS 叢集通訊協定需要大部分的主要節點才能達到規定人數。

  1. 在整體可用性中設定兩個或多個複本。

     若有兩個複本，就能在其中一個複本進行維護的情況下，改善讀取可擴展性以及讀取可用性。

  1. 使用以 Graviton2 為基礎的節點類型 (大多數區域中的預設節點)。

     ElastiCache 已在這些節點上新增最佳化效能。因此，您可以獲得更好的複寫和同步處理效能，進而改善整體可用性。

  1. 監控和調整大小以處理預期的流量峰值：在繁重負載下，引擎可能會變得沒有回應，這會影響可用性。 `BytesUsedForCache`和 `DatabaseMemoryUsagePercentage`是記憶體用量的良好指標，而 `ReplicationLag` 是根據寫入速率的複寫運作狀態指標。您可以使用這些指標來觸發叢集擴展。

  1. 利用[在生產容錯移轉事件之前容錯移轉 API](https://docs.amazonaws.cn/en_us/AmazonElastiCache/latest/APIReference/API_TestFailover.html) 進行測試，確保用戶端的彈性。

  **[資源]：**
  + [設定 ElastiCache for Redis OSS 以獲得更高的可用性](https://aws.amazon.com/blogs/database/configuring-amazon-elasticache-for-redis-for-higher-availability/)
  + [使用複寫群組的高可用性](Replication.md)

## REL 2：如何使用 ElastiCache 來達成您的復原點目標 (RPO)？
<a name="ReliabilityPillarREL2"></a>

**問題難易度簡介：**了解工作負載 RPO，以做出明智的 ElastiCache 備份和復原策略決策。

**問題難易度優點：**備妥 RPO 策略就可在發生災難復原的情況下，改善業務連續性。設計備份與還原政策可協助您達成 ElastiCache 資料的復原點目標 (RPO)。ElastiCache 提供存放在 Amazon S3 中的快照功能，以及可設定的保留政策。這些快照會在定義的備份時段拍攝，並由服務自動處理。如果您的工作負載需要更精細程度的備份，您可以選擇每天最多建立 20 個手動備份。手動建立的備份不受服務保留政策的約束，可以無限期保留。
+ **[必要] **了解並記錄 ElastiCache 部署的 RPO。
  + 請注意，Memcached 不提供任何備份程序。
  + 檢閱 ElastiCache 備份與還原功能的各項功能。
+ **[最佳] **備妥通訊良好的程序來備份叢集。
  + 視需要啟動手動備份。
  + 檢閱自動備份的保留政策。
  + 請注意，手動備份將無限期保留。
  + 將自動備份排程在低使用量的期間進行。
  + 針對讀取複本執行備份操作，以確保對叢集效能的影響降到最低。
+ **[良好] **利用排程的 ElastiCache 備份功能，在既定時段定期備份您的資料。
  + 定期測試從備份還原的程序。
+ **[資源]：**
  + [Redis OSS](https://aws.amazon.com/elasticache/faqs/#Redis)
  + [ElastiCache 的備份和還原](backups.md)
  + [建立手動備份](backups-manual.md)
  + [排程自動備份](backups-automatic.md)
  + [備份和還原 ElastiCache 叢集](https://aws.amazon.com/blogs/aws/backup-and-restore-elasticache-redis-nodes/)

## REL 3：如何支援災難復原 (DR) 需求？
<a name="ReliabilityPillarREL3"></a>

**問題難易度簡介：**災難復原是任何工作負載規劃的重要環節。ElastiCache 提供多種選項，可根據工作負載彈性需求實作災難復原。使用 Amazon ElastiCache 全域資料存放區，您可以寫入一個區域中的叢集，讓資料可從其他兩個跨區域複本叢集讀取，進而實現跨區域的低延遲讀取和災難復原。

**問題難易度優點：**了解各種災難情境並規劃因應措施，就可確保業務連續性。災難復原策略必須在成本、效能影響和可能的資料遺失之間取得平衡。
+ **[必要] **根據工作負載需求，為您所有的 ElastiCache 元件制定並記錄災難復原策略。ElastiCache 的獨特之處在於，有些使用案例是完全暫時性的，不需要任何災難復原策略，而有些使用案例則完全相反，需要極為健全的災難復原策略。所有選項都必須針對成本最佳化加以權衡，也就是說，彈性越大，所需的基礎設施數量也越多。

  了解區域層級和多區域層級可用的災難復原選項。
  + 建議採用多可用區部署來防範可用區域故障。務必在多可用區架構中的叢集模式啟用的情況下進行部署，且最少有 3 個可用區域可使用。
  + 建議使用全域資料存放區來防範區域故障。
+ **[最佳] **針對需要區域層級彈性的工作負載啟用全域資料存放區。
  + 制定計劃，以在主要區域降級時容錯移轉至次要區域。
  + 在生產環境中進行容錯移轉之前，先測試多區域容錯移轉程序。
  + 監控 `ReplicationLag` 指標，以了解容錯移轉事件期間資料遺失可能造成的影響。
+ **[資源]：**
  + [減少故障](disaster-recovery-resiliency.md#FaultTolerance)
  + [使用全域資料存放區跨 AWS 區域複寫](Redis-Global-Datastore.md)
  + [從備份還原並選擇性地調整叢集規模](backups-restoring.md)
  + [使用異地同步備份將 ElastiCache for Valkey 和 Redis OSS 的停機時間降至最低](AutoFailover.md)

## REL 4：如何有效地規劃容錯移轉？
<a name="ReliabilityPillarREL4"></a>

**問題難易度簡介：**啟用多可用區的自動容錯移轉功能是 ElastiCache 的最佳實務。在某些情況下，ElastiCache for Valkey 和 Redis OSS 會在服務操作中取代主節點。範例情況包括規劃的維護事件，以及少見的節點故障或可用區域問題。容錯移轉成功與否，取決於 ElastiCache 和您的用戶端程式庫組態。

**問題層級優點：**遵循 ElastiCache 容錯移轉的最佳實務搭配特定 ElastiCache 用戶端程式庫，可協助您將容錯移轉事件期間的潛在停機時間降至最低。
+ **[必要] **若叢集模式已停用，請使用逾時，如此用戶端就能偵測出是否需要與舊的主節點中斷連線，並使用更新的主要端點 IP 地址重新連線至新的主節點。若叢集模式已啟用，則用戶端程式庫會負責偵測基礎叢集拓撲中的變更。這最常透過 ElastiCache 用戶端程式庫中的組態設定來完成，這也可讓您設定頻率和重新整理方法。每個用戶端程式庫都提供自己的設定，如需詳細資訊，可參閱各自對應的文件。

  **[資源]：**
  + [使用異地同步備份將 ElastiCache for Valkey 和 Redis OSS 中的停機時間降至最低](AutoFailover.md)
  + 檢閱 ElastiCache 用戶端程式庫的最佳實務。
+ **[必要] **容錯移轉成功與否，取決於主節點和複本節點之間是否有運作狀態良好的複寫環境。檢閱並了解 Valkey 和 Redis OSS 複寫的非同步性質，以及報告主要節點和複本節點之間複寫延遲的可用 CloudWatch 指標。對於需要更高資料安全性的使用案例，請利用 WAIT 命令強制複本在回應連線的用戶端之前確認寫入。

  **[資源]：**
  + [Valkey 或 Redis OSS 的指標](CacheMetrics.Redis.md)
  +  [使用 Amazon CloudWatch 監控 ElastiCache 的最佳實務](https://aws.amazon.com/blogs/database/monitoring-best-practices-with-amazon-elasticache-for-redis-using-amazon-cloudwatch/)
+ **[最佳] **使用 ElastiCache 測試容錯移轉 API 在容錯移轉期間定期驗證應用程式的回應能力。

  **[資源]：**
  + [在 ElastiCache 上測試自動容錯移轉至僅供讀取複本](https://aws.amazon.com/blogs/database/testing-automatic-failover-to-a-read-replica-on-amazon-elasticache-for-redis/)
  + [測試自動容錯移轉](AutoFailover.md#auto-failover-test)

## REL 5：您的 ElastiCache 元件是否設計為可擴展？
<a name="ReliabilityPillarREL5"></a>

**問題難易度簡介：**藉由了解擴展功能和可用的部署拓撲，您的 ElastiCache 元件就可隨著時間進行調整，以因應不斷變化的工作負載需求。ElastiCache 提供 4 種擴展方式：縮減/橫向擴展 (水平) 以及上/下縱向擴展 (垂直)。

**問題難易度優點：**遵循 ElastiCache 部署的最佳實務可提供最大程度的擴展彈性，並符合水平擴展的 Well Architected 原則，進而將故障的影響降至最低。
+ **[必要] **了解叢集模式已啟用與叢集模式已停用的拓撲之間的差異。幾乎所有情況下都建議您在叢集模式已啟用時進行部署，因為這樣就能隨著時間提供更高的可擴展性。叢集模式已停用的元件會在藉由新增讀取複本進行水平擴展的能力上受到限制。
+ **[必要] **了解擴展的時機和方式。
  + 如需更多 READIOPS：新增複本
  + 如需更多 WRITEOPS：新增碎片 (橫向擴展)
  + 如需更多網路 IO：使用網路最佳化的執行個體，縱向擴展
+ **[最佳] **在叢集模式已啟用的情況下部署 ElastiCache 元件，並偏向部署更多、更小的節點，而不是較少、較大的節點。這樣做可有效地限制節點故障的影響範圍。
+ **[最佳] **在叢集中包含複本，以增強擴展事件期間的回應能力
+ **[良好] **若叢集模式已停用，請利用讀取複本來增加整體讀取容量。ElastiCache 在叢集模式已停用時最多可支援 5 個讀取複本，以及縱向擴展。
+ **[資源]：**
  + [擴展 ElastiCache 叢集](Scaling.md)
  + [線上縱向擴展](redis-cluster-vertical-scaling.md#redis-cluster-vertical-scaling-scaling-up)

# Amazon ElastiCache Well-Architected Lens 效能效率支柱
<a name="PerformanceEfficiencyPillar"></a>

效能效率支柱著重於有效率地使用 IT 和運算資源。重要主題包括根據工作負載需求選取適當的資源類型和大小、監控效能，以及做出明智的決策，以便隨著業務需求的發展維持效率。

**Topics**
+ [PE 1：如何監控 Amazon ElastiCache 叢集的效能？](#PerformanceEfficiencyPillarPE1)
+ [PE 2：如何將工作分配到各個 ElastiCache 叢集節點？](#PerformanceEfficiencyPillarPE2)
+ [PE 3：針對快取工作負載，如何追蹤和報告快取的有效性和效能？](#PerformanceEfficiencyPillarPE3)
+ [PE 4：如何利用您的工作負載讓網路資源和連線得到最佳運用？](#PerformanceEfficiencyPillarPE4)
+ [PE 5：如何管理刪除和/或移出索引鍵？](#PerformanceEfficiencyPillarPE5)
+ [PE 6：如何在 ElastiCache 中建立資料模型並與資料互動？](#PerformanceEfficiencyPillarPE6)
+ [PE 7：如何記錄 Amazon ElastiCache 叢集中執行緩慢的命令？](#PerformanceEfficiencyPillarPE7)
+ [PE8：自動擴展功能如何協助提高 ElastiCache 叢集的效能？](#PerformanceEfficiencyPillarPE8)

## PE 1：如何監控 Amazon ElastiCache 叢集的效能？
<a name="PerformanceEfficiencyPillarPE1"></a>

**問題難易度簡介：**藉由了解現有的監控指標，您就能識別目前的使用率。適當監控有助於識別影響叢集效能的潛在瓶頸。

**問題難易度優點：**了解與叢集相關聯的指標有助於引導最佳化技術，進而降低延遲並增加輸送量。
+ **[必要] **使用工作負載的子集進行基準效能測試。
  + 您應該使用像是負載測試這類機制來監控實際工作負載的效能。
  + 在執行這些測試的同時監控 CloudWatch 指標，便能對可用的指標有所了解，並且建立效能基準。
+ **【最佳】 **對於 ElastiCache for Valkey 和 Redis OSS 工作負載，重新命名運算上昂貴的命令，例如 `KEYS`，以限制使用者在生產叢集上執行封鎖命令的能力。
  + 執行引擎 6.x for Redis OSS 的 ElastiCache 工作負載可以利用角色型存取控制來限制特定命令。使用AWS主控台或 CLI 建立使用者和使用者群組，並將使用者群組與叢集建立關聯，即可控制對命令的存取。在 Redis OSS 6 中，啟用 RBAC 時，我們可以使用 "-@dangerous"，而且會不允許該使用者使用昂貴的命令，例如 KEYS、MONITOR、SORT 等。
  + 對於引擎 5.x 版，請使用叢集`rename-commands`參數群組上的 參數重新命名命令。
+ **[較佳]** 分析緩慢的查詢並尋找最佳化技術。
  + 對於 ElastiCache for Valkey 和 Redis OSS 工作負載，請透過分析慢速日誌進一步了解您的查詢。例如，您可以使用下列命令`valkey-cli slowlog get 10`來顯示超過延遲閾值的最後 10 個命令 （預設為 10 毫秒）。
  + 某些查詢可以使用複雜的 ElastiCache for Valkey 和 Redis OSS 資料結構更有效率地執行。舉例來說，針對數值樣式範圍的查詢，應用程式可以使用排序集來實作簡單的數值索引。管理這些索引可以減少對資料集執行掃描的次數，並且以更高的效能效率傳回資料。
  + 對於 ElastiCache for Valkey 和 Redis OSS 工作負載， `redis-benchmark`提供簡單的界面，以使用使用者定義的輸入來測試不同命令的效能，例如用戶端數量和資料大小。
  + 由於 Memcached 僅支援簡單的索引鍵層級命令，因此請考慮建置其他索引鍵作為索引，以避免反覆查看索引鍵空間來處理用戶端查詢。
+ **[資源]：**
  + [使用 CloudWatch 指標監控用量](CacheMetrics.md)
  + [使用 Amazon CloudWatch 警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)
  + [Valkey 和 Redis OSS 特定參數](ParameterGroups.Engine.md#ParameterGroups.Redis)
  + [SLOWLOG](https://valkey.io/commands/slowlog/)
  + [ 基準測試](https://valkey.io/topics/benchmark/)

## PE 2：如何將工作分配到各個 ElastiCache 叢集節點？
<a name="PerformanceEfficiencyPillarPE2"></a>

**問題難易度簡介：**應用程式連線到 Amazon ElastiCache 節點的方式可能會影響叢集的效能和可擴展性。

**問題難易度優點：**正確使用叢集中的可用節點，可確保將工作分配到可用的資源。以下技術也有助於避免資源閒置。
+ **[必要] **讓用戶端連線到適當的 ElastiCache 端點。
  + ElastiCache for Valkey 和 Redis OSS 會根據使用的叢集模式實作不同的端點。若叢集模式已啟用，ElastiCache 會提供組態端點。若叢集模式已停用，ElastiCache 會提供主要端點 (通常用於寫入) 和讀取器端點 (用於平衡複本之間的讀取)。正確實作這些端點可提升效能並且更輕鬆地擴展操作。除非有特定需求，否則避免連線到個別節點端點。
  + 針對多節點 Memcached 叢集，ElastiCache 提供了可進行自動探索的設定端點。建議使用雜湊演算法將工作平均分配到各個快取節點。許多 Memcached 用戶端程式庫會實作一致的雜湊。檢查您使用的程式庫文件，查看其是否支援一致性雜湊以及其實作方式。您可以在[這裡](BestPractices.LoadBalancing.md)找到有關實做這些功能的詳細資訊。
+ **【更佳】 **利用 ElastiCache for Valkey 和 Redis OSS 叢集模式啟用的叢集來改善可擴展性。
  + ElastiCache for Valkey 和 Redis OSS （啟用叢集模式） 叢集支援[線上擴展操作](scaling-redis-cluster-mode-enabled.md#redis-cluster-resharding-online) （輸出/輸入和上/下），以協助在碎片之間動態分配資料。使用組態端點可確保您的叢集感知用戶端能夠因應叢集拓撲中的變更進行調整。
  + 您也可以在 ElastiCache for Valkey 和 Redis OSS （啟用叢集模式） 叢集中的可用碎片之間移動雜湊槽，以重新平衡叢集。這樣做有助於更有效率地在可用碎片中分配工作。
+ **[較佳] **實施策略來識別和修復工作負載中的快速鍵。
  + 考慮多維度 Valkey 或 Redis OSS 資料結構的影響，例如清單、串流、集等。這些資料結構存放在位於單一節點的單一金鑰中。相當大型的多維度索引鍵可能比其他資料類型利用更多的網路容量和記憶體，並且可能造成該節點的使用率不成比例。您的工作負載設計應盡可能將資料存取分散到多個獨立的索引鍵。
  + 工作負載中的快速鍵可能會影響使用中節點的效能。對於 ElastiCache for Valkey 和 Redis OSS 工作負載，`valkey-cli --hotkeys`如果 LFU 記憶體上限政策已就緒，您可以使用 偵測熱鍵。
  + 請考慮將快速鍵複寫到多個節點，讓分配到各節點的存取權更平均。此方法要求用戶端寫入多個主節點 (Valkey 或 Redis OSS 節點本身不提供此功能），並維護要讀取的金鑰名稱清單，以及原始金鑰名稱。
  + ElastiCache 引擎 7.2 for Valkey 和更新版本，以及 ElastiCache 第 6 版 for Redis OSS 和更新版本，所有 都支援伺服器輔助[用戶端快取](https://valkey.io/topics/client-side-caching/)。這可讓應用程式等待索引鍵變更，然後再回頭對 ElastiCache 進行網路呼叫。
+ **[資源]：**
  + [設定 ElastiCache for Valkey 和 Redis OSS 以獲得更高的可用性](https://aws.amazon.com/blogs/database/configuring-amazon-elasticache-for-redis-for-higher-availability/)
  + [在 ElastiCache 中尋找連線端點](Endpoints.md)
  + [負載平衡最佳實務](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/BestPractices.LoadBalancing.html)
  + [Valkey 或 Redis OSS 的線上重新分片 （啟用叢集模式）](scaling-redis-cluster-mode-enabled.md#redis-cluster-resharding-online)
  + [Valkey 和 Redis OSS 中的用戶端快取](https://valkey.io/topics/client-side-caching/)

## PE 3：針對快取工作負載，如何追蹤和報告快取的有效性和效能？
<a name="PerformanceEfficiencyPillarPE3"></a>

**問題難易度簡介：**快取是 ElastiCache 上常見的工作負載，因此您務必了解如何管理快取的有效性和效能。

**問題難易度優點：**您的應用程式可能會出現效能遲緩的跡象。假如能夠使用快取專用指標做出明智的決策來提高應用程式效能，這點對於快取工作負載而言至關重要。
+ **[必要]** 測量並追蹤經過一段時間的快取命中率。快取的效率是由其「快取命中率」所決定。快取命中率的計算定義是索引鍵命中總數除以命中加未命中總數。命中率越接近 1，表示快取越有效。快取未命中數量是造成快取命中率低的原因。快取中找不到請求的索引鍵時，就會產生快取未命中數。快取中沒有某個索引鍵是因為該索引鍵已移出或刪除、已過期或不曾存在。了解索引鍵為什麼不在快取中，並制定適當的策略將其納入快取中。

  **[資源]：**
  + [Valkey 和 Redis OSS 的指標](CacheMetrics.Redis.md)
+ **[必要]** 測量並收集應用程式快取效能，並結合延遲和 CPU 使用率值，以了解是否需要調整存留時間或其他應用程式元件。ElastiCache 針對每一種資料結構提供了一組用於彙總延遲的 CloudWatch 指標。這些延遲指標是使用 INFO 命令的 commandstats 統計資料計算，不包含網路和 I/O 時間。這只是 ElastiCache 處理操作所花費的時間。

  **[資源]：**
  + [Valkey 和 Redis OSS 的指標](CacheMetrics.Redis.md)
  + [使用 Amazon CloudWatch 監控 ElastiCache 的最佳實務](https://aws.amazon.com/blogs/database/monitoring-best-practices-with-amazon-elasticache-for-redis-using-amazon-cloudwatch/)
+ **[最佳] **選擇最合乎您需要的快取策略。快取未命中數量是造成快取命中率低的原因。如果您的工作負載設計是維持低快取未命中數量 (例如即時通訊)，那麼最好檢閱您的快取策略，並對工作負載套用最適當的解決方案 (例如查詢檢測) 來測量記憶體和效能。您實際用來填入和維護快取的策略，取決於您的用戶端需要快取的資料，以及該資料的存取模式。例如，您不太可能對串流應用程式上的個人化推薦和熱門新聞報導採用相同的策略。

  **[資源]：**
  + [Memcached 的快取策略](Strategies.md)
  + [快取最佳實務](https://aws.amazon.com/caching/best-practices/)
  + [Performance at Scale with Amazon ElastiCache (利用 Amazon ElastiCache 大規模提高效能) 白皮書](https://d0.awsstatic.com/whitepapers/performance-at-scale-with-amazon-elasticache.pdf)

## PE 4：如何利用您的工作負載讓網路資源和連線得到最佳運用？
<a name="PerformanceEfficiencyPillarPE4"></a>

**問題層級簡介：**許多應用程式用戶端都支援 ElastiCache for Valkey、Memcached 和 Redis OSS，且實作可能有所不同。您需要了解現有的網路和連線管理，以分析潛在的效能影響。

**問題難易度優點：**有效運用網路資源可改善叢集的效能效率。下列建議可減少網路需求，並改善叢集延遲和輸送量。
+ **[必要] **主動管理與您的 ElastiCache 叢集的連線。
  + 在應用程式中使用連線集區，可減少因開啟和關閉連線而對叢集造成的額外負荷量。在 Amazon CloudWatch 中使用 `CurrConnections` 和 `NewConnections` 監控連線行為。
  + 適時確實地關閉用戶端連線，以避免洩漏連線。連線管理策略包括確實地關閉未使用的連線，以及設定連線逾時。
  + 針對 Memcached 工作負載保留了用於處理連線的可設定記憶體數量，稱為 `memcached_connections_overhead`。
+ **[較佳] **壓縮大型物件以減少記憶體並改善網路輸送量。
  + 資料壓縮可減少所需的網路輸送量 (Gbps)，但會增加應用程式壓縮和解壓縮資料的工作量。
  + 壓縮還可以減少索引鍵耗用的記憶體數量
  + 請根據您應用程式的需求，考慮壓縮比和壓縮速度之間的權衡。
+ **[資源]：**
  + [ElastiCache - 全域資料存放區](https://aws.amazon.com/elasticache/redis/global-datastore/)
  + [Memcached 專用參數](ParameterGroups.Engine.md#ParameterGroups.Memcached)
  + [ElastiCache 5.0.3 for Redis OSS 增強了 I/O 處理以提升效能](https://aws.amazon.com/about-aws/whats-new/2019/03/amazon-elasticache-for-redis-503-enhances-io-handling-to-boost-performance/)
  + [Valkey 和 Redis OSS 的指標](CacheMetrics.Redis.md)
  + [設定 ElastiCache 以獲得更高的可用性](https://aws.amazon.com/blogs/database/configuring-amazon-elasticache-for-redis-for-higher-availability/)

## PE 5：如何管理刪除和/或移出索引鍵？
<a name="PerformanceEfficiencyPillarPE5"></a>

**問題難易度簡介：**工作負載各有不同的需求，在叢集節點接近記憶體耗用限制時，也各有不同的預期行為。ElastiCache 有不同的政策來處理這些情況。

**問題難易度優點：**適當管理可用記憶體並且了解移出政策，將有助於確保在超過執行個體記憶體限制時，能夠察覺到叢集行為。
+ **[必要] **檢測資料存取權以評估要套用的政策。找出適當的最大記憶體政策，以控制是否要在叢集上執行移出，以及移出的方式。
  + 當達到叢集上的最大記憶體耗用量，而且已設有允許移出的政策時，就會進行移除。在此情況下，叢集的行為會取決於指定的移出政策。您可以使用叢集參數群組`maxmemory-policy`上的 來管理此政策。
  + 預設政策 `volatile-lru` 會藉由將已設定到期時間 (TTL 值) 的索引鍵移出來釋出記憶體。最不常用 (LFU) 和最近最少使用 (LRU) 政策會根據使用情形移除索引鍵。
  + 針對 Memcached 工作負載，有一項預設的 LRU 政策可用來控制每個節點上的移出作業。您可以使用 Amazon CloudWatch 上的「移出」指標來監控 Amazon ElastiCache 叢集上的移出數量。
+ **[較佳] **將刪除行為標準化，就可控制對叢集的效能影響，進而避免非預期的效能瓶頸發生。
  + 對於 ElastiCache for Valkey 和 Redis OSS 工作負載，從叢集明確移除金鑰時， `UNLINK` 就像 `DEL`：它會移除指定的金鑰。然而，該命令會在不同的執行緒中執行實際的記憶體回收，因此不會封鎖，但 `DEL` 會封鎖。實際的移除操作會在之後以非同步方式進行。
  + 對於 ElastiCache 6.x 版的 Redis OSS 工作負載，可以使用 `lazyfree-lazy-user-del` 參數在參數群組中修改`DEL`命令的行為。
+ **[資源]：**
  + [使用 ElastiCache 參數群組設定引擎參數](ParameterGroups.md)
  + [UNLINK](https://valkey.io/commands/unlink/)
  + [使用 進行雲端財務管理AWS](https://aws.amazon.com/aws-cost-management/)

## PE 6：如何在 ElastiCache 中建立資料模型並與資料互動？
<a name="PerformanceEfficiencyPillarPE6"></a>

**問題難易度簡介：**ElastiCache 的應用相當依賴所使用的資料結構和資料模型，但同樣需要考慮基礎資料存放區 (如有的話)。了解可用的資料結構，並確保您使用最符合您需求的資料結構。

**問題難易度優點：**ElastiCache 中的資料建模包含數層，包括應用程式使用案例、資料類型，以及資料元素之間的關係。此外，每個資料類型和命令都有自己的記錄效能簽章。
+ **[最佳] **最佳實務是減少意外覆寫資料的情況。使用盡可能減少索引鍵名稱重疊的命名慣例。資料結構的慣用命名是使用像是 `APPNAME:CONTEXT:ID` 這類階層方法，例如 `ORDER-APP:CUSTOMER:123`。

  **[資源]：**
  + [索引鍵命名](https://docs.gitlab.com/ee/development/redis.html#key-naming)
+ **【最佳】 **ElastiCache for Valkey 和 Redis OSS 命令具有 Big O 表示法定義的時間複雜性。命令的這種時間複雜度是其影響的演算/數學表示法。當您在應用程式中引入新的資料類型時，需仔細查看相關命令的時間複雜度。時間複雜度為 O(1) 的命令在時間上是恆定的，並不取決於輸入大小，但是時間複雜度為 O(N) 的命令在時間上是線性的，因此會受輸入大小的影響。由於 ElastiCache for Valkey 和 Redis OSS 的單一執行緒設計，大量的高時間複雜性操作將導致效能降低和潛在的操作逾時。

  **[資源]：**
  + [命令](https://valkey.io/commands/)
+ **[最佳] **使用 API 來取得叢集中資料模型的 GUI 可見度。

  **[資源]：**
  + [Redis OSS 命令程式](https://www.npmjs.com/package/ElastiCache for Redis-commander)
  + [Redis OSS 瀏覽器](https://github.com/humante/redis-browser)
  + [Redsmin](https://www.redsmin.com/)

## PE 7：如何記錄 Amazon ElastiCache 叢集中執行緩慢的命令？
<a name="PerformanceEfficiencyPillarPE7"></a>

**問題難易度簡介：**透過擷取、彙總和通知長時間執行的命令，達到效能調整效益。藉由了解命令執行所需的時間，就可以判斷哪些命令會導致效能不佳，以及哪些命令造成引擎無法以最佳效能執行。ElastiCache 也能夠將此資訊轉送至 Amazon CloudWatch 或 Amazon Kinesis Data Firehose。

**問題難易度優點：**針對慢速命令記錄到專用的永久位置並提供通知事件，有助於進行詳細的效能分析，並可用於觸發自動化事件。
+ **【必要】 **執行 Valkey 引擎 7.2 或更新版本的 ElastiCache，或在叢集上執行 Redis OSS 引擎 6.0 或更新版本、正確設定的參數群組和啟用的 SLOWLOG 記錄。
  + 只有在引擎版本相容性設定為 Valkey 7.2 及更高版本，或 Redis OSS 6.0 版或更高版本時，才能使用必要的參數。
  + 當命令的伺服器執行時間超過指定的值時，SLOWLOG 記錄就會發生。叢集的行為取決於相關聯的參數群組參數，也就是 `slowlog-log-slower-than` 和 `slowlog-max-len`。
  + 變更會立即生效。
+ **[最佳] **利用 CloudWatch 或 Kinesis Data Firehose 的功能。
  + 使用 CloudWatch、CloudWatch Logs Insights 及 Amazon Simple Notification Service 的篩選和警示功能，就能實現效能監控和事件通知。
  + 使用 Kinesis Data Firehose 的串流功能將 SLOWLOG 日誌封存到永久儲存體，或觸發自動化叢集參數調整。
  + 判斷 JSON 或純文字格式最合乎您的需要。
  + 提供 IAM 許可以發佈到 CloudWatch 或 Kinesis Data Firehose。
+ **[較佳] **將 `slowlog-log-slower-than` 設定為預設值以外的值。
  + 此參數決定命令在記錄為慢速執行命令之前，在 Valkey 或 Redis OSS 引擎內執行 的時間長度。預設值為 10,000 微秒 (10 毫秒)。對於某些工作負載而言，預設值可能太高。
  + 根據應用程式需求和測試結果，決定更合乎您工作負載的值；不過，太低的值可能會產生過多資料。
+ **[較佳] **保留 `slowlog-max-len` 的預設值。
  + 此參數會決定在任何指定時間，在 Valkey 或 Redis OSS 記憶體中擷取多少慢速執行命令的上限。值為 0 會有效停用擷取。值越高，記憶體中儲存的項目就越多，因而減少重要資訊在檢閱之前就遭到移出的情形。預設值為 128。
  + 預設值適用於大多數的工作負載。如果需要透過 SLOWLOG 命令從 valkey-cli 在展開的時段中分析資料，請考慮增加此值。這可讓更多命令保留在 Valkey 或 Redis OSS 記憶體中。

    如果您要將 SLOWLOG 資料發送到 CloudWatch Logs 或 Kinesis Data Firehose，資料將保留，並且可以在 ElastiCache 系統之外進行分析，減少在 Valkey 或 Redis OSS 記憶體中存放大量慢速執行命令的需求。
+ **[資源]：**
  + [如何在叢集中開啟慢速日誌？](https://repost.aws/knowledge-center/elasticache-turn-on-slow-log)
  + [日誌傳送](Log_Delivery.md)
  + [Redis OSS 特定參數](ParameterGroups.Engine.md#ParameterGroups.Redis)
  + [https://aws.amazon.com/cloudwatch/](https://aws.amazon.com/cloudwatch/)Amazon CloudWatch
  + [Amazon Kinesis Data Firehose](https://aws.amazon.com/kinesis/data-firehose/)

## PE8：自動擴展功能如何協助提高 ElastiCache 叢集的效能？
<a name="PerformanceEfficiencyPillarPE8"></a>

**問題難易度簡介：**透過實作 Valkey 或 Redis OSS 自動擴展功能，ElastiCache 元件可以隨著時間調整，自動增加或減少所需的碎片或複本。藉由實作目標追蹤或排程的擴展政策就能達到此目的。

**問題難易度優點：**了解並規劃工作負載的尖峰，就可確實增強快取效能與業務連續性。ElastiCache Auto Scaling 會持續監控您的 CPU/記憶體使用率，以確保您的叢集在所需的效能層級運作。
+ **【必要】 **為 ElastiCache for Valkey 或 Redis OSS 啟動叢集時：

  1. 確定已啟用叢集模式

  1. 確定執行個體屬於支援自動擴展的特定類型和大小系列

  1. 確保叢集未在全域資料存放區、Outposts 或 Local Zones 中執行

  **[資源]：**
  + [在 Valkey 和 Redis OSS 中擴展叢集 （啟用叢集模式）](scaling-redis-cluster-mode-enabled.md)
  + [搭配碎片使用自動擴展](AutoScaling-Using-Shards.md)
  + [搭配複本使用自動擴展](AutoScaling-Using-Replicas.md)
+ **[最佳] **確認您的工作負載為大量讀取或大量寫入，以定義擴展政策。為了獲得最佳效能，請使用單獨一個追蹤指標。建議您避免針對每個維度實施多項政策，因為自動擴展政策會在命中目標時橫向擴展，但只有在所有目標追蹤政策都準備好縮減時才會縮減。

  **[資源]：**
  + [自動擴展政策](AutoScaling-Policies.md)
  + [定義擴展政策](AutoScaling-Scaling-Defining-Policy-API.md)
+ **[最佳] **隨著時間監控效能可幫助您偵測到在特定時間點監控時，可能無法察覺的工作負載變更。您可以分析對應的 CloudWatch 指標來了解四週期間內的叢集使用率，藉此判斷目標值的閾值。如果您仍不確定要選擇哪個值，建議從支援的最小預先定義指標值開始。

  **[資源]：**
  + [使用 CloudWatch 指標監控用量](CacheMetrics.md)
+ **[較佳] **我們建議您使用預期的最小和最大工作負載來測試應用程式，藉此找出叢集制定擴展政策和減輕可用性問題所需的準確碎片/複本數量。

  **[資源]：**
  + [註冊可擴展的目標](AutoScaling-Register-Policy.md)
  + [使用 註冊可擴展目標AWS CLI](AutoScaling-Scaling-Registering-Policy-CLI.md)

# Amazon ElastiCache Well-Architected Lens 成本最佳化支柱
<a name="CostOptimizationPillar"></a>

成本最佳化支柱著重於避免不必要的成本。重要主題包括了解和控制錢花費在哪裡、選取最合適的節點類型 (使用支援根據工作負載需求進行資料分層的執行個體)、適切的資源類型數量 (有多少個讀取複本)、分析經過一段時間後的花費，以及因應業務需求進行擴展而不超支。

**Topics**
+ [COST 1：如何找出並追蹤與 ElastiCache 資源相關聯的成本？ 如何制定出各種機制，讓使用者能夠建立、管理及處置建立的資源？](#CostOptimizationPillarCOST1)
+ [COST 2：如何使用持續監控工具來協助您將有關 ElastiCache 資源的成本最佳化？](#CostOptimizationPillarCOST2)
+ [COST 3：是否應該使用支援資料分層的執行個體類型？ 資料分層有何優點？ 何時不適合使用資料分層執行個體？](#CostOptimizationPillarCOST3)

## COST 1：如何找出並追蹤與 ElastiCache 資源相關聯的成本？ 如何制定出各種機制，讓使用者能夠建立、管理及處置建立的資源？
<a name="CostOptimizationPillarCOST1"></a>

**問題難易度簡介**：若要了解成本指標，就需要有多個團隊參與並且跨團隊協作：軟體工程、資料管理、產品負責人、財務及領導階層。若要找出關鍵的成本驅動因素，就需要參與的各方都了解服務用量控制槓桿與成本管理權衡，這時常成為投入成本最佳化的努力獲得成功與不太成功的關鍵差異。確保您擁有現成的程序和工具可追蹤從開發到生產與淘汰整個過程中所建立的資源，便能幫助您管理 ElastiCache 伴隨的成本。

**問題難易度優點：**若要持續追蹤與工作負載相關聯的所有成本，便需要深入了解包含 ElastiCache 這個元件在內的架構。此外，您應制定成本管理計劃來收集用量，並與您的預算進行比較。
+ **[必要] **建構雲端卓越中心 (CCoE)，並將自行定義、追蹤有關組織的 ElastiCache 使用量指標，以及對指標採取行動等納入，成為其中一篇創始章程。如果 CCoE 已存在且運作正常，請確定它知道如何讀取和追蹤與 ElastiCache 相關的成本。建立資源時，請使用 IAM 角色和政策來確認只有特定團隊和群組能夠執行個體化資源。這樣可確保成本與業務成果相關聯，並從成本的角度建立明確的責任脈絡。

  1. CCoE 應識別、定義並發佈成本指標，這些指標會根據分類資料中重要的 ElastiCache 使用量定期 (每月) 更新，例如：

     1. 使用的節點類型及其屬性：標準與記憶體最佳化、隨需與預留執行個體、區域和可用區域

     1. 環境類型：免費、開發、測試和生產

     1. 備份儲存與保留策略

     1. 區域內與跨區域的資料傳輸

     1. 在 Amazon Outposts 上執行的執行個體 

  1. CCoE 是由一個跨職能的團隊所組成，其中包括您組織中軟體工程、資料管理、產品團隊、財務和領導團隊的非專屬代表。

  **[資源]：**
  + [打造雲端卓越中心](https://docs.aws.amazon.com/whitepapers/latest/cost-optimization-laying-the-foundation/cloud-center-of-excellence.html)
  + [Amazon ElastiCache 定價](https://aws.amazon.com/elasticache/pricing/)
+ **[必要] **使用成本分配標籤以較低精細程度來追蹤成本。使用 AWS 成本管理來視覺化、了解和管理一段時間內的 AWS 成本和用量。

  1. 使用標籤來組織您的資源，並使用成本分配標籤來詳細追蹤您的 AWS 成本。啟用成本分配標籤後， AWS 會使用成本分配標籤來整理成本分配報告上的資源成本，讓您更輕鬆地分類和追蹤 AWS 成本。 AWS 提供兩種類型的成本分配標籤： AWS 產生的標籤和使用者定義的標籤。 會 AWS 為您定義、建立和套用 AWS 產生的標籤，以及定義、建立和套用使用者定義的標籤。您必須分別啟用這兩種標籤，它們才會顯示在 Cost Management 或成本分配報告中。

  1. 使用成本分配標籤來整理 AWS 帳單，以反映您自己的成本結構。若將成本分配標籤新增至 Amazon ElastiCache 中的資源，您就可依資源標籤值將發票上的費用分組，藉此追蹤成本。您可考慮結合標籤，以便更深入追蹤成本的細節。

  **[資源]：**
  + [使用 AWS 成本分配標籤](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)
  + [使用成本分配標籤監控成本](Tagging.md)
  + [AWS Cost Explorer](https://aws.amazon.com/aws-cost-management/aws-cost-explorer/)
+ **[最佳] **將 ElastiCache 成本連結到整個組織的指標。

  1. 考慮業務指標以及像是延遲等操作指標 - 您的業務模型中有哪些概念是可以跨角色理解的？ 這些指標需要讓組織中越多角色理解越好。

  1. 範例 - 同時提供服務的使用者、每項操作和每個使用者的最大和平均延遲、使用者參與度分數、使用者回流率/週、工作階段長度/使用者、放棄率、快取命中率，以及追蹤的索引鍵

  **[資源]：**
  + [使用 CloudWatch 指標監控用量](CacheMetrics.md)
+ **[良好] **在使用 ElastiCache 的整個工作負載中，維持指標與成本的最新架構和操作能見度。

  1. 了解您的整個解決方案生態系統，ElastiCache 往往是 AWS 其技術集中服務的完整生態系統的一部分，從用戶端到 API Gateway、Redshift 和 QuickSight 報告工具 （例如）。

  1. 在您的架構圖上，對應來自用戶端、連線、安全性、記憶體內操作、儲存、資源自動化、資料存取和管理的解決方案元件。每一層都連接到整個解決方案，並且有自己的需求和功能，能夠增添和/或有助您管理整體成本的能力。

  1. 您的圖表應包括使用運算、網路、儲存、生命週期政策、指標收集，以及應用程式的操作和運作 ElastiCache 元素

  1. 工作負載的需求可能會隨著時間而演進，因此您務必繼續維護並記錄對基礎元件以及主要功能目標的理解程度，以便在工作負載成本管理中保持主動。

  1. 為了針對 ElastiCache 制定出有效的成本管理策略，高階主管對於可見性、責任、優先順序和資源的支援對您來說便至關重要。

## COST 2：如何使用持續監控工具來協助您將有關 ElastiCache 資源的成本最佳化？
<a name="CostOptimizationPillarCOST2"></a>

**問題難易度簡介：**您需要在 ElastiCache 成本和應用程式效能指標之間取得適當的平衡。Amazon CloudWatch 提供關鍵操作指標的可見性，能夠協助您根據需求評估 ElastiCache 資源利用是否過度或不足。從成本最佳化的觀點來看，您需要了解何時過度佈建，並能夠制定出適當的機制來調整 ElastiCache 資源的規模，同時維持您的運作、可用性、彈性和效能需求。

**問題難易度優點：**在理想狀態下，您將佈建足夠的資源來滿足工作負載運作需求，並且沒有資源使用率不足的情況，而導致處於非最佳成本狀態。您需要能夠識別並避免長時間操作規模過大的 ElastiCache 資源。
+ **【必要】 **使用 CloudWatch 監控您的 ElastiCache 叢集，並分析這些指標與您的 AWS Cost Explorer 儀表板有何關聯。

  1. ElastiCache 提供主機層級指標 (例如 CPU 用量) 及快取引擎軟體的特定指標 (例如快取取得及快取遺失)。每隔 60 秒會針對每個快取節點測量及發佈這些指標。

  1. ElastiCache 效能指標 (CPUUtilization、EngineUtilization、SwapUsage、CurrConnections 及 Evictions) 可指出您需要縱向擴展/縮減 (使用較大/較小的快取節點類型) 或橫向擴展/縮減 (增加/減少碎片)。藉由建立教戰手冊對照表來預估額外成本，以及達到應用程式效能閾值所需的最短和最長時間，從而了解擴展決策的成本影響。

  **[資源]：**
  + [使用 CloudWatch 指標監控用量](CacheMetrics.md)
  + [應監控哪些指標？](CacheMetrics.WhichShouldIMonitor.md)
  + [Amazon ElastiCache 定價](https://aws.amazon.com/elasticache/pricing/)
+ **[必要] **了解並記錄您的備份策略和成本影響。

  1. 使用 ElastiCache 時，備份會存放在 Amazon S3 中以便長久儲存。您需要了解與您的故障復原能力相關的成本影響。

  1. 啟用自動備份，這樣將會刪除保留期限已過的備份檔案。

  **[資源]：**
  + [排程自動備份](backups-automatic.md)
  + [Amazon Simple Storage Service 定價](https://aws.amazon.com/s3/pricing/)
+ **[最佳] **針對執行個體使用預留節點，這是為了管理已充分了解並記錄的工作負載成本刻意而為的策略。您必須先為預留節點預付費用，實際費用取決於節點類型及保留時間長度 (一或三年)。此費用遠低於您使用隨需節點時需支付的每小時使用費。

  1. 您可能需要使用隨需節點操作 ElastiCache 叢集，直到您收集了足夠的資料來預估預留執行個體的需求。規劃並記錄滿足您的需求所需的資源，並比較各執行個體類型 (隨需與預留) 的預期成本

  1. 定期評估可用的新快取節點類型，並從成本和操作指標的角度評估是否合理，以便將您的執行個體機群移轉到新的快取節點類型

## COST 3：是否應該使用支援資料分層的執行個體類型？ 資料分層有何優點？ 何時不適合使用資料分層執行個體？
<a name="CostOptimizationPillarCOST3"></a>

**問題難易度簡介：**選取適當的執行個體類型不僅會影響效能和服務層面，還會影響財務層面。執行個體類型有各種不同的相關成本。您可能自然而然會選取一個或少數幾個可滿足記憶體中所有儲存需求的大型執行個體類型。但是隨著專案逐漸成熟，這可能會產生重大的成本影響。為了確保選取正確的執行個體類型，就需要定期檢查 ElastiCache 物件閒置時間。

**問題難易度優點：**您應該清楚了解各種不同的執行個體類型對您目前和未來的成本有何影響。邊際或定期工作負載變更不應造成不成比例的成本變更。在工作負載允許的情況下，選擇支援資料分層的執行個體類型就能提供單一儲存價格更實惠的可用儲存。這是因為每個執行個體可用的 SSD 儲存資料分層執行個體可支援的單一執行個體總資料量高出許多。
+ **[必要] **了解資料分層執行個體的限制

  1. 僅適用於 ElastiCache for Valkey 或 Redis OSS 叢集。

  1. 僅限幾種執行個體類型可支援資料分層。

  1. 僅支援適用於 Redis OSS 和更新版本的 ElastiCache 6.2 版

  1. 大型項目不會交換至 SSD。超過 128 MiB 的物件會保存在記憶體中。

  **[資源]：**
  + [資料分層](data-tiering.md)
  + [Amazon ElastiCache 定價](https://aws.amazon.com/elasticache/pricing/)
+ **[必要] **了解工作負載定期存取的資料庫百分比。

  1. 資料分層執行個體非常適合經常存取整個資料集的一小部分，但仍需要快速存取其餘資料的工作負載。換句話說，熱資料與暖資料的比例約為 20：80。

  1. 發展叢集層級的物件閒置時間追蹤。

  1. 超過 500 Gb 資料量的大型實作就是很好的選擇。
+ **[必要] **了解資料分層執行個體並非某些工作負載的可選項目。

  1. 存取較少用的物件會伴隨很小的效能成本，因為這些物件會交換至本機 SSD。如果您的應用程式對回應時間較為敏感，請測試對工作負載的影響。

  1. 不適用大多儲存大小超過 128 MiB 之大型物件的快取。

  **[資源]：**
  + [限制](data-tiering.md#data-tiering-prerequisites)
+ **[最佳] **預留執行個體類型可支援資料分層。這樣可確保每個執行個體的資料儲存量擁有最低成本。

  1. 在您充分了解自己的需求之前，可能需要使用非資料分層執行個體操作 ElastiCache 叢集。

  1. 分析您的 ElastiCache 叢集資料使用模式。

  1. 建立自動化的工作來定期收集物件閒置時間。

  1. 如果您發現有很大百分比 (約 80%) 的物件閒置了一段時間，則視為適合讓您的工作負載記錄調查結果，並建議將叢集遷移到支援資料分層的執行個體。

  1. 定期評估可用的新快取節點類型，並從成本和操作指標的角度評估是否合理，以便將您的執行個體機群移轉到新的快取節點類型。

  **[資源]：**
  + [OBJECT IDLETIME](https://valkey.io/commands/object-idletime/)
  + [Amazon ElastiCache 定價](https://aws.amazon.com/elasticache/pricing/)

# ElastiCache 的常見故障診斷步驟和最佳實務
<a name="wwe-troubleshooting"></a>

下列主題提供使用 ElastiCache 時可能遇到的錯誤和問題的疑難排解建議。如果您發現未列在此處的問題，您可以使用此頁面上的 Feedback (意見回饋) 按鈕來報告。

如需常見支援問題的更多疑難排解建議和解答，請造訪 [AWS知識中心](https://aws.amazon.com/premiumsupport/knowledge-center/)

**Topics**
+ [連線問題](#wwe-troubleshooting.connection)
+ [Valkey 或 Redis OSS 用戶端錯誤](#wwe-troubleshooting.clienterrors)
+ [對 ElastiCache Serverless 中的高延遲進行故障診斷](#wwe-troubleshooting.latency)
+ [故障診斷 ElastiCache Serverless 中的限流問題](#wwe-troubleshooting.throttling)
+ [持續連線問題](TroubleshootingConnections.md)
+ [相關主題](#wwe-troubleshooting.related)

## 連線問題
<a name="wwe-troubleshooting.connection"></a>

如果您無法連線至 ElastiCache 快取，請考慮下列其中一項：

1. **使用 TLS：**如果您在嘗試連線至 ElastiCache 端點時遇到掛載連線，則可能不會在用戶端中使用 TLS。如果您使用的是 ElastiCache Serverless，傳輸中的加密一律會啟用。請確定您的用戶端使用 TLS 連線到快取。[進一步了解如何連線至已啟用 TLS 的快取](connect-tls.md)。

1. **VPC：**ElastiCache 快取只能從 VPC 內存取。確定您從中存取快取和 ElastiCache 快取的 EC2 執行個體是在相同的 VPC 中建立。或者，您必須在 EC2 執行個體所在的 VPC 與您要建立快取的 VPC 之間啟用 VPC [對等](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)互連。

1. **安全群組：**ElastiCache 使用安全群組來控制對快取的存取。考慮下列各項：

   1. 請確定 ElastiCache 快取所使用的安全群組允許從 EC2 執行個體進行傳入存取。請參閱[此處](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)，了解如何在安全群組中正確設定傳入規則。

   1. 請確定 ElastiCache 快取使用的安全群組允許存取快取的連接埠 （無伺服器 6379 和 6380，節點型叢集 6379)。ElastiCache 使用這些連接埠來接受 Valkey 或 Redis OSS 命令。在此處進一步了解如何設定連接埠存取[授予從 Amazon VPC 安全群組透過網路存取快取的權限](set-up.md#elasticache-install-grant-access-VPN)。

如果連線仍然很困難，請參閱 [持續連線問題](TroubleshootingConnections.md) 以取得其他步驟。

## Valkey 或 Redis OSS 用戶端錯誤
<a name="wwe-troubleshooting.clienterrors"></a>

ElastiCache Serverless 只能使用支援 Valkey 或 Redis OSS 叢集模式通訊協定的用戶端存取。節點型叢集可透過任一模式的用戶端存取，視叢集組態而定。

如果您的用戶端發生錯誤，請考慮下列事項：

1. **叢集模式：**如果您使用 [SELECT](https://valkey.io/commands/select/) 命令遇到 CROSSLOT 錯誤或錯誤，您可能會嘗試使用不支援叢集通訊協定的 Valkey 或 Redis OSS 用戶端存取啟用叢集模式快取。ElastiCache Serverless 僅支援 Valkey 或 Redis OSS 叢集通訊協定的用戶端。如果您想要在「停用叢集模式」(CMD) 中使用 Valkey 或 Redis OSS，則必須建立節點型叢集。

1. **CROSSLOT 錯誤：**如果您遇到`ERR CROSSLOT Keys in request don't hash to the same slot`錯誤，您可能會嘗試存取不屬於叢集模式快取中相同插槽的金鑰。提醒您，ElastiCache Serverless 一律以叢集模式運作。只有在所有涉及的金鑰都位於相同的雜湊槽中時，才允許涉及多個金鑰的多金鑰操作、交易或 Lua 指令碼。

如需設定 Valkey 或 Redis OSS 用戶端的其他最佳實務，請參閱此[部落格文章](https://aws.amazon.com/blogs/database/best-practices-redis-clients-and-amazon-elasticache-for-redis/)。

## 對 ElastiCache Serverless 中的高延遲進行故障診斷
<a name="wwe-troubleshooting.latency"></a>

如果您的工作負載似乎發生高延遲，您可以分析 CloudWatch `SuccessfulReadRequestLatency`和`SuccessfulWriteRequestLatency`指標，以檢查延遲是否與 ElastiCache Serverless 相關。這些指標會測量 ElastiCache Serverless 內部的延遲 - 不包括用戶端與 ElastiCache Serverless 端點之間的用戶端延遲和網路跳脫時間。

**對用戶端延遲進行故障診斷**

如果您在用戶端注意到延遲增加，但 ``CloudWatch `SuccessfulReadRequestLatency`和測量伺服器端延遲的`SuccessfulWriteRequestLatency`指標沒有對應的增加，請考慮下列事項：
+ **確保安全群組允許存取連接埠 6379 和 6380：**ElastiCache Serverless 使用主要端點的 6379 連接埠，以及讀取器端點的 6380 連接埠。有些用戶端會為每個新連線建立與兩個連接埠的連線，即使您的應用程式未使用僅供讀取複本功能。如果您的安全群組不允許兩個連接埠的傳入存取，則建立連線可能需要更長的時間。在此處進一步了解如何設定連接埠存取[ 授予從 Amazon VPC 安全群組透過網路存取快取的權限授予網路存取權  ElastiCache 節點型叢集針對 Valkey 和 Redis OSS 命令使用連接埠 6379，而 ElastiCache Serverless 同時使用連接埠 6379 和連接埠 6380。為了從 EC2 執行個體成功連接和執行 Valkey 或 Redis OSS 命令，您的安全群組必須允許視需要存取這些連接埠。 ElastiCache for Memcached 使用 11211 和 11212 連接埠來接受 Memcached 命令。為了從 EC2 執行個體成功連線和執行 Memcached 命令，您的安全群組必須允許存取這些連接埠。  登入AWS Command Line Interface並開啟 [Amazon EC2 主控台](https://console.aws.amazon.com/ec2/)。 在導覽窗格中，在 **Network & Security (網路與安全)** 下，選擇 **Security Groups (安全群組)**。 從安全群組的清單中，選擇要用於 Amazon VPC 的安全群組。除非您建立了安全群組供 ElastiCache 使用，否則此安全群組將會命名為 *default*。 選擇「傳入」索引標籤，然後：   選擇**編輯**。   選擇**新增規則**。   在「類型」欄中，選擇**自訂 TCP 規則**。  如果使用 Valkey 或 Redis OSS，請在**連接埠範圍**方塊中輸入 `6379`。 如果使用 Memcached，請在**連接埠範圍**方塊中輸入 `11211`。   在**來源**方塊中，選擇具有連接埠範圍 (0.0.0.0/0) 的**隨處**，讓任何您在 Amazon VPC 內啟動的 Amazon EC2 執行個體都能連線至您的快取。   如果您使用的是 ElastiCache 無伺服器，請選擇新增規則來**新增另一個規則**。  在 **Type (類型)** 欄中，選擇 **Custom TCP rule (自訂 TCP 規則)**。   如果使用 ElastiCache for Redis OSS，請在**連接埠範圍**方塊中輸入 `6380`。 如果使用 ElastiCache for Memcached，請在**連接埠範圍**方塊中輸入 `11212`。   在**來源**方塊中，選擇具有連接埠範圍 (0.0.0.0/0) 的**隨處**，讓任何您在 Amazon VPC 內啟動的 Amazon EC2 執行個體都能連線至您的快取。  選擇**儲存**    ](set-up.md#elasticache-install-grant-access-VPN)。

**對伺服器端延遲進行故障診斷**

某些變異性和偶爾峰值不應造成疑慮。不過，如果`Average`統計資料顯示急劇增加並持續，您應該檢查Health 儀板表和個人運作狀態儀表板以取得詳細資訊。如有必要，請考慮使用 開啟支援案例支援。

請考慮下列最佳實務和策略，以減少延遲：
+ **啟用僅供讀取複本：**如果您的應用程式允許，建議您在 Valkey 或 Redis OSS 用戶端中啟用「僅供讀取複本」功能，以擴展讀取並實現更低的延遲。啟用時，ElastiCache Serverless 會嘗試將您的讀取請求路由至與用戶端位於相同可用區域 (AZ) 的複本快取節點，以避免跨可用區域網路延遲。請注意，在用戶端中啟用僅供讀取複本功能表示您的應用程式接受資料中的最終一致性。如果您在寫入金鑰後嘗試讀取，您的應用程式可能會收到較舊的資料一段時間。
+ **確保您的應用程式部署在與快取相同的 AZs 中：**如果您的應用程式未部署在與快取相同的 AZs 中，您可能會觀察到更高的用戶端延遲。當您建立無伺服器快取時，您可以提供應用程式存取快取的子網路，而 ElastiCache Serverless 會在這些子網路中建立 VPC 端點。確保您的應用程式部署在相同的 AZs 中。否則，您的應用程式在存取快取時可能會產生跨可用區跳轉，進而產生更高的用戶端延遲。
+ **重複使用連線：**ElastiCache Serverless 請求是透過啟用 TLS 的 TCP 連線使用 RESP 通訊協定提出。啟動連線 （包括驗證連線，如果已設定） 需要一些時間，因此第一個請求的延遲高於一般。透過已初始化連線的請求可提供 ElastiCache 一致的低延遲。因此，您應該考慮使用連線集區或重複使用現有的 Valkey 或 Redis OSS 連線。
+ **擴展速度：**ElastiCache Serverless 會隨著請求率增加而自動擴展。請求率突然大幅增加，速度比 ElastiCache Serverless 擴展的速度快，可能會導致延遲增加一段時間。ElastiCache Serverless 通常可以快速提高其支援的請求率，最多需要 10-12 分鐘才能將請求率加倍。
+ **檢查長時間執行的命令：**某些 Valkey 或 Redis OSS 命令，包括大型資料結構上的 Lua 指令碼或命令，可能會長時間執行。為了識別這些命令，ElastiCache 會發佈命令層級指標。透過 [ElastiCache Serverless](serverless-metrics-events-redis.md#serverless-metrics)，您可以使用 `BasedECPUs`指標。
+ **限流請求：**在 ElastiCache Serverless 中限流請求時，您可能會遇到應用程式的用戶端延遲增加。在 ElastiCache Serverless 中調節請求時，您應該會看到 `ThrottledRequests` [ElastiCache Serverless](serverless-metrics-events-redis.md#serverless-metrics) 指標增加。檢閱以下章節，以針對節流請求進行故障診斷。
+ **金鑰和請求的統一分佈：**在 ElastiCache for Valkey 和 Redis OSS 中，每個插槽的金鑰或請求分佈不均可能會導致熱槽，進而導致延遲增加。ElastiCache Serverless 在單一插槽上最多支援 30，000 ECPUs/秒 （使用僅供讀取複本時為 90，000 個 ECPUs/秒）。我們建議評估您的金鑰和請求分佈到各個插槽，並確保在請求率超過此限制時分佈一致。

## 故障診斷 ElastiCache Serverless 中的限流問題
<a name="wwe-troubleshooting.throttling"></a>

在服務導向架構和分散式系統中，限制各種服務元件處理 API 呼叫的速率稱為限流。這可平滑峰值、控制元件輸送量不相符，並在發生非預期的操作事件時允許更可預測的復原。ElastiCache Serverless 專為這些類型的架構而設計，大多數 Valkey 或 Redis OSS 用戶端已針對限流請求內建重試。某種程度的限流對應用程式來說不一定是問題，但資料工作流程中對延遲敏感的部分如果持續遭到限流，可能會對使用者體驗造成負面影響，並降低系統的整體效率。

在 ElastiCache Serverless 中調節請求時，您應該會看到 `ThrottledRequests` [ElastiCache Serverless](serverless-metrics-events-redis.md#serverless-metrics) 指標增加。如果您注意到有大量限流請求，請考慮下列事項：
+ **擴展速度：**ElastiCache Serverless 會在您擷取更多資料或增加請求率時自動擴展。如果您的應用程式擴展速度比 ElastiCache Serverless 擴展的速度快，則您的請求可能會在 ElastiCache Serverless 擴展以容納工作負載時受到調節。ElastiCache Serverless 通常可以快速增加儲存體大小，最多需要 10-12 分鐘才能將快取中的儲存體大小加倍。
+ **金鑰和請求的統一分佈：**在 ElastiCache for Valkey 和 Redis OSS 中，每個槽的金鑰或請求分佈不均可能會導致熱槽。如果單一槽的請求率超過每秒 30，000 個 ECPUs且位於執行簡單 SET/GET 命令的工作負載中，熱槽可能會導致請求限流。同樣地，使用 ElastiCache for Memcached 時，如果請求速率超過每秒 30，000 個 ECPUs熱金鑰可能會導致請求限流。
+ **從複本讀取：**如果您的應用程式允許，請考慮使用「從複本讀取」功能。大多數 Valkey 或 Redis OSS 用戶端可以設定為「擴展讀取」，將讀取導向複本節點。此功能可讓您擴展讀取流量。此外，ElastiCache Serverless 會自動將從複本請求讀取路由到與您應用程式相同可用區域中的節點，進而降低延遲。啟用僅供讀取複本時，對於具有簡單 SET/GET 命令的工作負載，您可以在單一插槽上達到每秒高達 90，000 ECPUs。

# 持續連線問題
<a name="TroubleshootingConnections"></a>

疑難排解使用 ElastiCache 的持續連線問題時，必須驗證下列項目：

**Topics**
+ [安全群組](#Security_groups)
+ [網路 ACL](#Network_ACLs)
+ [路由表](#Route_tables)
+ [DNS 解析](#DNS_Resolution)
+ [透過伺服器端診斷識別問題](#Diagnostics)
+ [網路連線能力驗證](#Connectivity)
+ [網路相關限制](#Network-limits)
+ [CPU 使用率](#CPU-Usage)
+ [從伺服器端終止連線](#Connections-server)
+ [Amazon EC2 執行個體的用戶端疑難排解](#Connections-client)
+ [解析完成單個請求所花費的時間](#Dissecting-time)

## 安全群組
<a name="Security_groups"></a>

安全群組是保護 ElastiCache 用戶端 (EC2 執行個體、 AWS Lambda 函數、Amazon ECS 容器等） 和 ElastiCache 快取的虛擬防火牆。安全群組具有狀態，這表示允許傳入或傳出流量之後，該流量的回應將在該特定安全群組的內容中自動授權。

具狀態功能需要安全群組追蹤所有授權的連線，而且追蹤的連線數有限額。如果達到限額，新的連線將會失敗。請參閱疑難排解一節，以取得如何識別用戶端或 Elasticache 端是否已達到限制的說明。

您可以將單一安全群組同時指派給用戶端和 ElastiCache 叢集，或為兩者分別指派單獨的安全群組。

針對這兩種情況，您都需要允許來源 ElastiCache 連接埠上的 TCP 傳出流量，並允許同一連接埠上的傳入流量傳送至 ElastiCache。Memcached 的預設連接埠為 11211，Valkey 或 Redis OSS 的預設連接埠為 6379。根據預設，安全群組允許所有對外流量。在此情況下，只需要目標安全群組中的傳入規則。

如需詳細資訊，請參閱[用於存取 Amazon VPC 中 ElastiCache 叢集的存取模式](elasticache-vpc-accessing.md)。

## 網路 ACL
<a name="Network_ACLs"></a>

網路存取控制清單 (ACL) 是無狀態規則。必須允許雙向 (傳入和傳出) 的流量才能成功。網路 ACL 會指派給子網路，而非特定資源。可以將相同的 ACL 指派給 ElastiCache 和用戶端資源，特別是如果它們位於相同的子網路中。

根據預設，網路 ACL 允許所有流量。不過，您可以自訂為拒絕或允許流量。此外，ACL 規則的評估會依序進行，這表示符合流量的數字最小規則將會予以允許或拒絕。允許 Valkey 或 Redis OSS 流量的最低組態為：

用戶端網路 ACL：
+ **傳入規則：**
+ Rule number (規則編號)：最好低於任何拒絕規則；
+ Type (類型)：Custom TCP Rule (自訂 TCP 規則)；
+ Protocol (通訊協定)：TCP
+ Port Range (連接埠範圍)：1024-65535
+ Source (來源)：0.0.0.0/0 (或為 ElastiCache 叢集子網路建立個別規則)
+ Allow/Deny (允許/拒絕)：Allow (允許)
+ **傳出規則：**
+ Rule number (規則編號)：最好低於任何拒絕規則；
+ Type (類型)：Custom TCP Rule (自訂 TCP 規則)；
+ Protocol (通訊協定)：TCP
+ Port Range (連接埠範圍)：6379
+ Source (來源)：0.0.0.0/0 (或 ElastiCache 叢集子網路。請記得，使用特定 IP 可能會在容錯移轉或擴展叢集時產生問題)
+ Allow/Deny (允許/拒絕)：Allow (允許)

ElastiCache 網路 ACL：
+ **傳入規則：**
+ Rule number (規則編號)：最好低於任何拒絕規則；
+ Type (類型)：Custom TCP Rule (自訂 TCP 規則)；
+ Protocol (通訊協定)：TCP
+ Port Range (連接埠範圍)：6379
+ Source (來源)：0.0.0.0/0 (或為 ElastiCache 叢集子網路建立個別規則)
+ Allow/Deny (允許/拒絕)：Allow (允許)
+ **傳出規則：**
+ Rule number (規則編號)：最好低於任何拒絕規則；
+ Type (類型)：Custom TCP Rule (自訂 TCP 規則)；
+ Protocol (通訊協定)：TCP
+ Port Range (連接埠範圍)：1024-65535
+ Source (來源)：0.0.0.0/0 (或 ElastiCache 叢集子網路。請記得，使用特定 IP 可能會在容錯移轉或擴展叢集時產生問題)
+ Allow/Deny (允許/拒絕)：Allow (允許)

如需詳細資訊，請參閱[網路 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)。

## 路由表
<a name="Route_tables"></a>

類似於網路 ACL，每個子網路也可以有不同的路由表。如果用戶端和 ElastiCache 叢集位於不同的子網路中，請確定其路由表允許它們彼此連線。

較複雜的環境 (涉及多個 VPC、動態路由或網路防火牆) 可能會變得難以疑難排解。請參閱 [網路連線能力驗證](#Connectivity)，確認您的網路設定是否適當。

## DNS 解析
<a name="DNS_Resolution"></a>

ElastiCache 提供以 DNS 名稱為基礎的服務端點。可用的端點為 `Configuration`、`Primary`、`Reader` 及 `Node` 端點。如需詳細資訊，請參閱 [尋找連線端點](Endpoints.md)。

在修改容錯移轉或叢集的情況下，與端點名稱相關聯的地址可能會變更且會自動更新。

自訂 DNS 設定 (亦即不使用 VPC DNS 服務) 可能不知道 ElastiCache 提供的 DNS 名稱。請確認您的系統可以使用系統工具 (像是 `dig` (如下所示) 或 `nslookup`) 來成功解析 ElastiCache 端點。

```
$ dig +short example.xxxxxx.ng.0001.use1.cache.amazonaws.com
example-001.xxxxxx.0001.use1.cache.amazonaws.com.
1.2.3.4
```

您也可以透過 VPC DNS 服務強制執行名稱解析：

```
$ dig +short example.xxxxxx.ng.0001.use1.cache.amazonaws.com @169.254.169.253
example-001.tihewd.0001.use1.cache.amazonaws.com.
1.2.3.4
```

## 透過伺服器端診斷識別問題
<a name="Diagnostics"></a>

來自 ElastiCache 引擎的 CloudWatch 指標和執行時間資訊，是用來識別潛在連線問題來源的常見來源或資訊。優質的分析資料通常從下列項目開始：
+ CPU 用量：Valkey 和 Redis OSS 是多執行緒應用程式。但是每個命令的執行發生在單個 (主) 執行序中。因此，ElastiCache 提供指標 `CPUUtilization`和 `EngineCPUUtilization`。 `EngineCPUUtilization`提供專用於 Valkey 或 Redis OSS 程序的 CPU 使用率，以及所有 vCPUs`CPUUtilization`的使用量。具有多個 vCPU 的節點的 `CPUUtilization` 和 `EngineCPUUtilization` 值一般會不同，後者通常較高。出現高 `EngineCPUUtilization`，可能是由於需要大量 CPU 時間才能完成的請求或複雜作業數量增加所造成。您可以透過以下項目來識別兩者：
  + 請求數增加：檢查其他符合 `EngineCPUUtilization` 模式的指標是否增加。有用的指標包括：
    + `CacheHits` 和 `CacheMisses`：成功請求或沒有在快取中找到有效項目的請求之數目。如果未命中與命中的比率很高，表示應用程式正在對無效果的請求浪費時間和資源。
    + `SetTypeCmds` 和 `GetTypeCmds`：這些指標與 `EngineCPUUtilization` 相關，有助於了解寫入請求 (由 `SetTypeCmds` 測量) 或讀取請求 (由 `GetTypeCmds` 測量) 的負載是否明顯高。如果負載主要是讀取作業，使用多個僅供讀取複本可以在多個節點之間平衡請求，並撥出主節點用於寫入作業。在停用叢集模式的叢集中，可以使用 ElastiCache 讀取者端點，在應用程式中建立額外的連線組態以使用僅供讀取複本。如需詳細資訊，請參閱 [尋找連線端點](Endpoints.md)。讀取作業必須提交至這個額外的連線。寫入作業將透過一般主要端點完成。在啟用叢集模式的情況下，建議您使用原生支援僅供讀取複本的程式庫。使用正確的旗標，程式庫將能夠自動探索叢集拓撲、複本節點、透過 [READONLY](https://valkey.io/commands/readonly) Valkey 或 Redis OSS 命令啟用讀取操作，並將讀取請求提交至複本。
  + 連線數增加：
    + `CurrConnections` 和 `NewConnections`：`CurrConnection` 是收集資料點時的已建立連線數，而 `NewConnections` 會顯示這段期間內建立的連線數。

      建立和處理連線意味著可觀的 CPU 額外負荷。此外，成立新連線所需的 TCP 三向交握會對整體回應時間產生負面影響。

      一個每分鐘有數以千計 `NewConnections` 的 ElastiCache 節點，表示成立的連線只供幾個命令使用，這並非最佳做法。保持連線的成立狀態，並重複使用這些連線來進行新作業是最佳實務。當用戶端應用程式支援並妥善實作連線集區或持續連線時，此情況有可能實現。使用連線集區時，`currConnections` 數不會有很大的變化，而 `NewConnections` 應盡可能壓低。Valkey 和 Redis OSS 透過少量 currConnections 提供最佳效能。讓 CurrConnection 數量維持在大約數十或數百個，可最大限度壓低資源的使用量，以支援個別連線，例如供連線使用的用戶端緩衝區和 CPU 週期。
  + 網路輸送量：
    + 判斷頻寬：ElastiCache 節點的網路頻寬與節點大小成比例。由於應用程式具有不同的特性，結果可能會根據工作負載而有所不同。舉例來說，小型請求率高的應用程式，對 CPU 使用率造成的影響往往高於網路輸送量，而索引鍵較大則會造成網路使用率較高。因此，建議您使用實際工作負載來測試節點，以便更深入了解限制。

      模擬來自應用程式的負載會提供更準確的結果。但是，基準化分析工具可讓您更妥善了解限制。
    + 針對請求主要都是讀取的情況，使用複本進行讀取作業將能減輕主節點上的負載。如果使用案例主要是寫入，則使用許多複本將會提高網路使用量。針對寫入主節點的每個位元組，系統會將 N 個位元組傳送到複本 (N 即複本的數量)。寫入密集型工作負載的最佳實務是使用啟用叢集模式的 ElastiCache for Redis OSS，以便跨多個碎片平衡寫入，或擴展到具有更多網路功能的節點類型。
    + CloudWatch 指標 `NetworkBytesIn` 和 `NetworkBytesOut` 分別提供傳入或傳出節點的資料量。`ReplicationBytes` 則適用於資料複寫專屬的流量。

    如需詳細資訊，請參閱[網路相關限制](#Network-limits)。
  + 複雜命令：Redis OSS 命令會在單一執行緒上提供，這表示請求會依序提供。單一緩慢命令可能會影響其他請求和連線，最終導致逾時。使用作用於多個值、索引鍵或資料類型的命令時必須小心。根據參數的數量或其輸入或輸出值的大小，可能會封鎖或終止連線。

    一個惡名昭彰的例子是 `KEYS` 命令。它會掃描整個 Keyspace，搜尋指定的模式，並在其執行過程中阻止其他命令的執行。Redis OSS 使用「Big O」表示法來描述其命令複雜性。

    索引鍵命令帶有 O(N) 時間複雜度，N 是資料庫中索引鍵的數量。因此，索引鍵數越多，命令執行速度就會越慢。`KEYS` 可能會以不同的方式造成問題：如果沒有使用搜尋模式，該命令將會傳回所有可用的索引鍵名稱。在具有數千個或數百萬個項目的資料庫中，系統會建立巨大的輸出並淹沒網路緩衝區。

    如果使用搜尋模式，則只會將符合該模式的索引鍵傳回用戶端。但是，引擎仍然會掃描整個 Keyspace 搜尋它，且完成命令的時間相同。

    `KEYS` 的替代方案是 `SCAN` 命令。它會反覆運算 Keyspace，限制在特定數量的項目中執行反覆運算，避免延長引擎上區塊的執行時間。

    掃描具有 `COUNT` 參數，用來設定反覆運算區塊的大小。預設值為 10 (每個反覆運算 10 個項目)。

    根據資料庫中項目數的不同，`COUNT` 值小的區塊需執行更多的反覆運算才能完成完整掃描，而較大的值每次反覆運算時會讓引擎維持忙碌狀態更久。小計數值會使 `SCAN` 執行速度較慢，而較大的值可能會對 `KEYS` 造成上述相同問題。

    範例是以計數值 10 執行 `SCAN` 命令，將需要在具有 1 百萬個索引鍵的資料庫上進行 100,000 次重複作業。如果平均網路封包來回時間為 0.5 毫秒，則傳輸請求會花費大約 50,000 毫秒 (50 秒)。

    另一方面，如果計數值為 100,0000，則需要執行單次反覆運算，且傳輸只會花 0.5 毫秒。不過，引擎會完全封鎖其他作業，直到該命令完成掃描所有的 Keyspace。

    除了 `KEYS` 以外，如果未正確使用，其他幾個命令可能有害。若要查看所有命令及其個別時間複雜性的清單，請前往 [Valkey 和 Redis OSS 命令](https://valkey.io/commands)。

    潛在問題範例：
    + Lua 指令碼：Valkey 和 Redis OSS 提供內嵌 Lua 解譯器，允許在伺服器端執行指令碼。Valkey 和 Redis OSS 上的 Lua 指令碼是在引擎層級執行，依定義為原子，這表示指令碼執行時不允許執行其他命令或指令碼。Lua 指令碼可讓您直接在引擎上執行多個命令、決策演算法、資料剖析等。雖然這類指令碼的不可部分完成特性和卸載應用程式的機會很誘人，但將指令碼用於小型作業時必須小心。在 ElastiCache 上，Lua 指令碼的執行時間限制為 5 秒。未寫入 Keyspace 的指令碼將在 5 秒過後自動終止。為了避免資料損毀和不一致，如果指令碼執行沒有在 5 秒內完成，且執行期間有任何寫入，節點便會容錯移轉。[交易](https://valkey.io/topics/transactions)是保證 Redis OSS 中多個相關金鑰修改一致性的替代方案。交易允許執行一個命令區塊，觀察現有的索引鍵修改項目。如果觀察的任何索引鍵在交易完成之前有所變更，系統會捨棄所有修改。
    + 大量刪除項目：`DEL` 命令接受多個參數，這些參數是要刪除的索引鍵名稱。刪除作業會同步進行，如果參數清單很大，或是包含大型清單、集合、排序集合或雜湊 (包含多個子項目的資料結構)，則需花費大量的 CPU 時間。換句話說，如果單一索引鍵有許多元素，即使只是刪除單一索引鍵，也可能需要花相當長的時間。的替代方案`DEL`是 `UNLINK`，這是可用的非同步命令，因為 Redis OSS 4。 `UNLINK` 必須`DEL`盡可能優先於 。從 ElastiCache for Redis OSS 6x 開始， `lazyfree-lazy-user-del` 參數會讓`DEL`命令的行為與啟用`UNLINK`時類似。如需詳細資訊，請參閱 [Redis OSS 6.0 參數變更。](ParameterGroups.Engine.md#ParameterGroups.Redis.6-x)
    + 對多個索引鍵上產生作用的命令：先前提到的 `DEL` 是接受多個參數的命令，且其執行時間將直接與此成正比。不過，Redis OSS 提供更多類似運作的命令。範例為 `MSET` 和 `MGET` 允許一次插入或檢索多個字串索引鍵。使用它們可能有助於減少許多個別 `SET` 或 `GET` 命令的固有網路延遲。不過，廣泛的參數清單會影響 CPU 使用率。

       雖然單獨 CPU 使用率並不是連線問題的原因，但花太多時間對多個索引鍵處理單一或幾個命令，可能會造成其他請求失敗，並增加整體 CPU 使用率。

      索引鍵的數量和大小會影響命令的複雜性，進而影響完成時間。

      可以作用於多個索引鍵的其他命令範例有：`HMGET`、`HMSET`、`MSETNX`、`PFCOUNT`、`PFMERGE`、`SDIFF`、`SDIFFSTORE`、`SINTER`、`SINTERSTORE`、`SUNION`、`SUNIONSTORE`、`TOUCH`、`ZDIFF`、`ZDIFFSTORE`、`ZINTER` 或 `ZINTERSTORE`。
    + 作用於多種資料類型的命令：Redis OSS 也提供作用於一或多個金鑰的命令，無論其資料類型為何。ElastiCache for Redis OSS 提供`KeyBasedCmds`監控此類命令的指標。此指標會加總在所選期間內執行下列命令的次數：
      + O(N) 複雜性：
        + `KEYS`
      + O(1)
        + `EXISTS`
        + `OBJECT`
        + `PTTL`
        + `RANDOMKEY`
        + `TTL`
        + `TYPE`
        + `EXPIRE`
        + `EXPIREAT`
        + `MOVE`
        + `PERSIST`
        + `PEXPIRE`
        + `PEXPIREAT`
        + `UNLINK (O(N)` 用於回收記憶體。但是，記憶體回收任務發生在單獨一個執行序中，且不會阻止引擎
      + 根據資料類型而不同的複雜性時間：
        + `DEL`
        + `DUMP`
        + `RENAME` 視為具有 O(1) 複雜性的命令，但在 `DEL` 內部執行。執行時間會依重新命名索引鍵的大小而變動。
        + `RENAMENX`
        + `RESTORE`
        + `SORT`
      + 大雜湊：雜湊是一種資料類型，允許單個索引鍵具有多個鍵值子項目。每個雜湊都可以存放 4.294.967.295 個項目，且大雜湊上的作業可能會變得非常昂貴。與 `KEYS` 類似，雜湊具有帶有 O(N) 時間複雜度的 `HKEYS` 命令，N 是雜湊中的項目數。`HSCAN` 必須優先於 `HKEYS` 以避免長時間執行命令。`HDEL`、`HGETALL`、`HMGET`、`HMSET` 和 `HVALS` 命令應在大雜湊上謹慎使用。
    + 其他大數據結構：除了雜湊之外，其他資料結構可能是 CPU 密集型。集合、清單、排序集合和 Hyperloglog 也可能需要花大量時間來操作，取決於其大小和使用的命令。如需這些命令的詳細資訊，請參閱 [Valkey 和 Redis OSS 命令](https://valkey.io/commands)。

## 網路連線能力驗證
<a name="Connectivity"></a>

檢閱與 DNS 解析、安全群組、網路 ACL 和路由表相關的網路組態之後，可以使用 VPC Reachability Analyzer 和系統工具來驗證連線。

Reachability Analyzer 會測試網路連線能力，並確認是否滿足所有的需求和許可。對於下面的測試，您將需要 VPC 中其中一個可用 ElastiCache 節點的 ENI ID (彈性網路介面識別)。若要取得此資料，請執行下列操作：

1. 前往 [https://console.aws.amazon.com/ec2/v2/home?\$1NIC:](https://console.aws.amazon.com/ec2/v2/home?#NIC)

1. 依 ElastiCache 叢集名稱或先前從 DNS 驗證取得的 IP 地址篩選介面清單。

1. 寫下或以其他方式儲存 ENI ID。如果顯示多個介面，請檢閱描述，確認它們屬於正確的 ElastiCache 叢集，並選擇其中一個介面。

1. 繼續下一個步驟。

1. 於 [https://console.aws.amazon.com/vpc/home?\$1ReachabilityAnalyzer](https://console.aws.amazon.com/vpc/home?#ReachabilityAnalyzer) 建立分析路徑，然後選擇下列選項：
   + **來源類型**：****如果您的 ElastiCache 用戶端在 Amazon EC2 執行個體上執行，則選擇****執行個體；如果 ElastiCache 用戶端使用其他服務，例如 Amazon ECS AWS Fargate 搭配 awsvpc 網路等），以及各自的資源 ID (EC2 執行個體或 ENI ID) AWS Lambda；
   + **Destination Type (目的地類型)**：選擇 **Network Interface (網路介面)**，然後從清單中選取 **ElastiCache ENI**。
   + **目的地連接埠**：針對 ElastiCache for Redis OSS 指定 6379，或針對 ElastiCache for Memcached 指定 11211。這些是使用預設組態定義的連接埠，此範例假設未加以變更。
   + **Protocol (通訊協定)**：TCP

建立分析路徑，並等待一段時間產生結果。如果狀態為無法連線，請開啟分析詳細資料並檢閱**分析總管**，取得遭封鎖請求的詳細資訊。

如果通過可連線性測試，請繼續執行作業系統層級的驗證。

若要驗證 ElastiCache 服務連接埠上的 TCP 連線能力：在 Amazon Linux 上，`Nping`可用於 `nmap` 套件，且可以測試 ElastiCache 連接埠上的 TCP 連線能力，以及提供成立連線所需的網路封包來回時間。使用此項來驗證 ElastiCache 叢集的網路連線能力和目前的延遲，如下所示：

```
$ sudo nping --tcp -p 6379 example.xxxxxx.ng.0001.use1.cache.amazonaws.com

Starting Nping 0.6.40 ( http://nmap.org/nping ) at 2020-12-30 16:48 UTC
SENT (0.0495s) TCP ...
(Output suppressed )

Max rtt: 0.937ms | Min rtt: 0.318ms | Avg rtt: 0.449ms
Raw packets sent: 5 (200B) | Rcvd: 5 (220B) | Lost: 0 (0.00%)
Nping done: 1 IP address pinged in 4.08 seconds
```

根據預設，`nping` 每傳送 5 次探查會延遲 1 秒。您可以使用「-c」選項來增加探查數，並使用「--delay」來變更傳送新測試的時間。

如果測試出現 `nping` 失敗，且通過了 *VPC Reachability Analyzer* 測試，請您的系統管理員檢閱可能的主機式防火牆規則、非對稱式路由規則，或是作業系統層級任何其他可能的限制。

在 ElastiCache 主控台上，檢查 ElastiCache 叢集詳細資訊中的**傳輸中加密**是否已啟用。如果已啟用傳輸中加密，請確認是否可以使用下列命令建立 TLS 工作階段：

```
openssl s_client -connect example.xxxxxx.use1.cache.amazonaws.com:6379
```

如果連線和 TLS 交涉成功，預期會有密集的傳出。檢查最後一行中可用的傳回碼，該值必須是 `0 (ok)`。如果 openssl 傳回不同的內容，請前往以下頁面查看錯誤原因：[https://www.openssl.org/docs/man1.0.2/man1/verify.html\$1DIAGNOSTICS](https://www.openssl.org/docs/man1.0.2/man1/verify.html#DIAGNOSTICS)。

如果通過了所有基礎設施和作業系統測試，但您的應用程式仍然無法連線至 ElastiCache，請檢查應用程式組態是否符合 ElastiCache 設定。常見的錯誤包括：
+ 應用程式不支援 ElastiCache 叢集模式，且啟用叢集模式；
+ 應用程式不支援 TLS/SSL，且已啟用 ElastiCache 傳輸中加密功能；
+ 應用程式支援 TLS/SSL，但沒有正確的組態標記或信任的憑證授權機構；

## 網路相關限制
<a name="Network-limits"></a>
+ 連線數上限：同時連線數具有硬性限制。每個 ElastiCache 節點在所有用戶端間的同時連線數上限為 65,000 個。此限制可透過 CloudWatch 上的 `CurrConnections` 指標進行監控。不過，用戶端也有自己的傳出連線限制。在 Linux 上，請使用下列命令檢查允許的暫時性連接埠範圍：

  ```
  # sysctl net.ipv4.ip_local_port_range
  net.ipv4.ip_local_port_range = 32768 60999
  ```

  在前面的例子中，允許來自相同來源的 28231 個連線連至相同的目的地 IP (ElastiCache 節點) 和連接埠。下列命令顯示特定 ElastiCache 節點 (IP 1.2.3.4) 的連線數量：

  ```
  ss --numeric --tcp state connected "dst 1.2.3.4 and dport == 6379" | grep -vE '^State' | wc -l
  ```

  如果數字太高，您的系統可能會因為嘗試處理連線請求而過載。建議考慮實作適用技術，例如連線集區或持續連線，以便更妥善處理連線。盡可能設定連線集區，將連線數上限限制為幾百個。此外，用於處理逾時或其他連線例外狀況的退避邏輯是明智的做法，可避免發生問題的情況下連線流失。
+ 網路流量限制：檢查 [Redis OSS 的下列 CloudWatch 指標](CacheMetrics.Redis.md)，以識別 ElastiCache 節點上可能達到的網路限制：
  + `NetworkBandwidthInAllowanceExceeded`/`NetworkBandwidthOutAllowanceExceeded`：因為輸送量超過彙總頻寬限制而形成的網路封包。

    請務必注意，寫入主節點的每個位元組都會複寫到 N 個複本 (N 是複本數)。具有小型節點類型、多個複本以及密集寫入型請求的叢集，可能無法處理複寫待處理項目。對於這種情況，最佳實務是擴充規模 (更改節點類型)、水平擴展 (在啟用叢集模式的叢集中增加碎片)，減少複本數或最大限度減少寫入次數。
  + `NetworkConntrackAllowanceExceeded`：因為超過指派給節點的連線數 (在所有安全群組之間追蹤) 上限而形成的封包。這段期間內，新的連線可能會失敗。
  + `NetworkPackets PerSecondAllowanceExceeded`：超過每秒的封包數上限。以高極小型請求率為基礎的工作負載，可能會在達到頻寬上限之前達到此限制。

  上述指標是確認節點達到網路限制的理想方式。但是，限制也可以藉由網路指標維持平穩來識別。

  如果觀察到很長時間都維持平穩，接著可能會出現複寫延遲、用於快取的位元組增加、可釋出的記憶體減少，高交換和 CPU 使用率。Amazon EC2 執行個體也有網路限制，可透過 [ENA 驅動程式指標](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html)追蹤。搭配增強型網路支援和 ENA 驅動程式 2.2.10 或更新版本的 Linux 執行個體，可以使用下列命令檢閱限制計數器：

  ```
  # ethtool -S eth0 | grep "allowance_exceeded"
  ```

## CPU 使用率
<a name="CPU-Usage"></a>

CPU 使用率指標是調查的起點，下列項目有助於縮小 ElastiCache 端的可能問題範圍：
+ Redis OSS SlowLogs：ElastiCache 預設組態會保留最後 128 個需要超過 10 毫秒才能完成的命令。慢速命令的歷史記錄會在引擎執行時間內保留，且會在故障或重新啟動的情況下遺失。如果清單達到 128 個項目，將會刪除舊活動，為新的活動騰出空間。慢速事件清單的大小和視為緩慢的執行時間，可以透過[自訂參數群組](ParameterGroups.md)中的 `slowlog-max-len` 和 `slowlog-log-slower-than` 參數加以修改。慢速日誌清單可以透過在引擎上執行 `SLOWLOG GET 128` 來擷取，其中 128 是最後回報的 128 個慢速命令。每個項目都有下列欄位：

  ```
  1) 1) (integer) 1 -----------> Sequential ID
     2) (integer) 1609010767 --> Timestamp (Unix epoch time)of the Event
     3) (integer) 4823378 -----> Time in microseconds to complete the command.
     4) 1) "keys" -------------> Command
        2) "*" ----------------> Arguments 
     5) "1.2.3.4:57004"-> Source
  ```

  上述事件發生在 12 月 26 日 19:26:07 (UTC)，花了 4.8 秒 (4.823 毫秒) 完成，其原因是從用戶端 1.2.3.4 請求的 `KEYS` 命令。

  在 Linux 上，時間戳記可以使用命令日期轉換：

  ```
  $ date --date='@1609010767'
  Sat Dec 26 19:26:07 UTC 2020
  ```

  使用 Python：

  ```
  >>> from datetime import datetime
  >>> datetime.fromtimestamp(1609010767)
  datetime.datetime(2020, 12, 26, 19, 26, 7)
  ```

  或在 Windows 上使用 PowerShell：

  ```
  PS D:\Users\user> [datetimeoffset]::FromUnixTimeSeconds('1609010767')
  DateTime      : 12/26/2020 7:26:07 PM
  UtcDateTime  
                  : 12/26/2020 7:26:07 PM
  LocalDateTime : 12/26/2020 2:26:07 PM
  Date          : 12/26/2020 12:00:00 AM
  Day           : 26
  DayOfWeek    
                  : Saturday
  DayOfYear     : 361
  Hour          : 19
  Millisecond   : 0
  Minute        : 26
  Month        
                  : 12
  Offset        : 00:00:00Ticks         : 637446075670000000
  UtcTicks     
                  : 637446075670000000
  TimeOfDay     : 19:26:07
  Year          : 2020
  ```

  在短時間內 (一分鐘以內) 出現許多緩慢命令是值得關注的原因。檢閱命令的性質及如何最佳化 (請參閱前面的範例)。如果經常回報具有 O(1) 時間複雜性的命令，請檢查之前提到出現高 CPU 使用率的其他因素。
+ 延遲指標：ElastiCache for Redis OSS 提供 CloudWatch 指標，以監控不同類別命令的平均延遲。資料點的計算方式是將類別中命令的執行總次數除以期間的總執行時間。請務必了解，延遲指標結果是多個命令的彙總結果。單一命令可能會導致非預期的結果 (例如逾時)，而不會對指標造成重大影響。針對這種情況，慢速事件會是更準確的資訊來源。下列清單包含可用的延遲指標，以及影響這些指標的各別命令。
  + EvalBasedCmdsLatency：與 Lua 指令碼命令、`eval`、`evalsha` 有關；
  + GeoSpatialBasedCmdsLatency：`geodist`、`geohash`、`geopos`、`georadius`、`georadiusbymember`、`geoadd`；
  + GetTypeCmdsLatency：讀取命令，不論資料類型為何；
  + HashBasedCmdsLatency：`hexists`、`hget`、`hgetall`、`hkeys`、`hlen`、`hmget`、`hvals`、`hstrlen`、`hdel`、`hincrby`、`hincrbyfloat`、`hmset`、`hset`、`hsetnx`；
  + HyperLogLogBasedCmdsLatency：`pfselftest`、`pfcount`、`pfdebug`、`pfadd`、`pfmerge`；
  + KeyBasedCmdsLatency：可作用於不同資料類型的命令：`dump`、`exists`、`keys`、`object`、`pttl`、`randomkey`、`ttl`、`type`、`del`、`expire`、`expireat`、`move`、`persist`、`pexpire`、`pexpireat`、`rename`、`renamenx`、`restoreK`、`sort`、`unlink`；
  + ListBasedCmdsLatency：lindex、llen、lrange、blpop、brpop、brpoplpush、linsert、lpop、lpush、lpushx、lrem、lset、ltrim、rpop、rpoplpush、rpush、rpushx；
  + PubSubBasedCmdsLatency：psubscribe、publish、pubsub、punsubscribe、subscribe、unsubscribe；
  + SetBasedCmdsLatency：`scard`、`sdiff`、`sinter`、`sismember`、`smembers`、`srandmember`、`sunion`、`sadd`、`sdiffstore`、`sinterstore`、`smove`、`spop`、`srem`、`sunionstore`；
  + SetTypeCmdsLatency：寫入命令，無論資料類型為何；
  + SortedSetBasedCmdsLatency：`zcard`、`zcount`、`zrange`、`zrangebyscore`、`zrank`、`zrevrange`、`zrevrangebyscore`、`zrevrank`、`zscore`、`zrangebylex`、`zrevrangebylex`、`zlexcount`、`zadd`。`zincrby`、`zinterstore`、`zrem`、`zremrangebyrank`、`zremrangebyscore`、`zunionstore`、`zremrangebylex`、`zpopmax`、`zpopmin`、`bzpopmin`、`bzpopmax`；
  + StringBasedCmdsLatency：`bitcount`、`get`、`getbit`、`getrange`、`mget`、`strlen`、`substr`、`bitpos`、`append`、`bitop`、`bitfield`、`decr`、`decrby`、`getset`、`incr`、`incrby`、`incrbyfloat`、`mset`、`msetnx`、`psetex`、`set`、`setbit`、`setex`、`setnx`、`setrange`；
  + StreamBasedCmdsLatency：`xrange`、`xrevrange`、`xlen`、`xread`、`xpending`、`xinfo`、`xadd`、`xgroup`、`readgroup`、`xack`、`xclaim`、`xdel`、`xtrim`、`xsetid`；
+ Redis OSS 執行期命令：
  + info commandstats：提供自引擎啟動以來執行的命令清單、其累積執行次數、總執行時間和每個命令的平均執行時間；
  + client list：提供目前連線的用戶端和相關資訊的清單，如緩衝區使用率、上次執行的命令等；
+ 備份和複寫：2.8.22 之前的 ElastiCache for Redis OSS 版本使用分支程序來建立備份，並處理與複本的完整同步。這種方法可能會在寫入密集型使用案例中產生顯著的記憶體額外負荷。

  從 ElastiCache Redis OSS 2.8.22 開始， AWS 推出了無分支備份和複寫方法。新方法可能會延遲寫入以防止失敗。這兩種方法都會造成某些時段的 CPU 使用率較高，導致更長的回應時間，進而引發用戶端在執行期間逾時。請一律檢查是否在備份期間內發生用戶端故障或 `SaveInProgress` 指標為 1 的情況。建議您將備份時段排定為使用率低的時段，盡量減少用戶端發生問題或備份失敗的可能性。

## 從伺服器端終止連線
<a name="Connections-server"></a>

預設的 ElastiCache for Redis OSS 組態會無限期地建立用戶端連線。不過在某些情況下可能需終止連線。例如：
+ 用戶端應用程式中的錯誤可能會造成連線遭遺忘，並以閒置狀態保持成立。這就是所謂的「連線流失」，結果會發現 `CurrConnections` 指標中已成立的連線數穩定增加。這種行為可能會導致用戶端或 ElastiCache 端飽和。當無法從用戶端進行立即修正時，有些系統管理員會在其 ElastiCache 參數群組中設定「逾時」值。逾時是讓閒置連線持續存在的時間 (以秒為單位)。如果用戶端在此期間未提交任何請求，一旦連線達到逾時值，引擎就會立即終止連線。較小的逾時值可能會導致不必要的連線中斷，屆時用戶端需要妥善處理並重新連線，進而導致延遲。
+ 用於存放索引鍵的記憶體與用戶端緩衝區共用。具有大型請求或回應的慢速用戶端，可能需要大量的記憶體來處理其緩衝區。預設 ElastiCache for Redis OSS 組態不會限制一般用戶端輸出緩衝區的大小。如果達到 `maxmemory` 上限，引擎將會嘗試移出項目以滿足緩衝區使用量。在極低的記憶體條件下，ElastiCache for Redis OSS 可能會選擇中斷連接使用大型用戶端輸出緩衝區的用戶端，以釋放記憶體並保留叢集的運作狀態。

  可以使用自訂組態來限制用戶端緩衝區的大小，且用戶端達到限制時將會中斷連線。不過用戶端應該能處理未預期的中斷連線。處理一般用戶端的緩衝區大小的參數如下：
  + client-query-buffer-limit：單一輸入請求的大小上限；
  + client-output-buffer-limit-normal-soft-limit：用戶端連線數的軟限制。如果高於軟限制的持續時間超過 client-output-buffer-limit-normal-soft-seconds 定義的時間 (以秒為單位)，或者達到硬限制，則連線將會終止；
  + client-output-buffer-limit-normal-soft-seconds：允許連線超過 client-output-buffer-limit-normal-soft-limit 的時間；
  + client-output-buffer-limit-normal-hard-limit：達到此限制的連線將立即終止。

  除了一般用戶端緩衝區，下列選項也可控制複本節點和 Pub/Sub (發佈/訂閱) 用戶端的緩衝區：
  + client-output-buffer-limit-replica-hard-limit；
  + client-output-buffer-limit-replica-soft-seconds；
  + client-output-buffer-limit-replica-hard-limit；
  + client-output-buffer-limit-pubsub-soft-limit；
  + client-output-buffer-limit-pubsub-soft-seconds；
  + client-output-buffer-limit-pubsub-hard-limit；

## Amazon EC2 執行個體的用戶端疑難排解
<a name="Connections-client"></a>

用戶端的負載和回應速度也可能會影響傳給 ElastiCache 的請求。疑難排解間歇性連線或逾時問題時，需要仔細檢閱 EC2 執行個體和作業系統限制。幾項需觀察的要點：
+ CPU：
  + EC2 執行個體 CPU 使用率：確定 CPU 尚未飽和或接近 100%。歷史分析可以透過 CloudWatch 完成，但請記得，資料點的精密度可為 1 分鐘 (啟用詳細監控時) 或 5 分鐘；
  + 如果使用[高載 EC2 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html)，請確定其 CPU 餘額尚未耗盡。`CPUCreditBalance` CloudWatch 指標提供此資訊。
  + 短時間的高 CPU 使用率可能會導致逾時，而不會反映 CloudWatch 上的 100% 使用率。這種情況需使用作業系統工具 (如 `top`、`ps` 和 `mpstat`) 進行即時監控。
+ 網路
  + 根據執行個體容量檢查網路輸送量是否低於可接受的值。如需詳細資訊，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)
  + 在具有 `ena` 增強型網路驅動程式的執行個體上，查看 [ENA 統計數字](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshooting-ena.html#statistics-ena)以取得逾時或超出的限制。下列統計數字有助於確認網路限制飽和情況：
    + `bw_in_allowance_exceeded`/`bw_out_allowance_exceeded`：因過量的傳入或傳出輸送量而造成的封包數；
    + `conntrack_allowance_exceeded`：由於安全群組[連線追蹤限制](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-throttling)而捨棄的封包數。當此限制飽和時，新的連線將會失敗；
    + `linklocal_allowance_exceeded`：由於透過 VPC DNS 對執行個體中繼資料 NTP 發出過多請求而捨棄的封包數。所有服務的限制都是每秒 1024 個封包；
    + `pps_allowance_exceeded`：由於每秒封包比率過高而捨棄的封包數。當網路流量包含每秒數千或數百萬個極小的請求時，便可能達到 PPS 限制。ElastiCache 流量可以進行最佳化，透過管道或一次執行多個作業的命令 (例如 `MGET` 而不是 `GET`)，藉此更妥善使用網路封包。

## 解析完成單個請求所花費的時間
<a name="Dissecting-time"></a>
+ 在網路上：`Tcpdump` 和 `Wireshark` (命令列上的 tshark) 是便利的工具，可用於了解請求在網路上傳輸、命中 ElastiCache 引擎並取得傳回資料所花的時間。下列範例說明如何使用下列命令建立單一請求：

  ```
  $ echo ping | nc example.xxxxxx.ng.0001.use1.cache.amazonaws.com 6379
  +PONG
  ```

  tcpdump 與上面的命令同時執行並傳回了：

  ```
  $ sudo tcpdump -i any -nn port 6379 -tt
  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
  1609428918.917869 IP 172.31.11.142.40966
      > 172.31.11.247.6379: Flags [S], seq 177032944, win 26883, options [mss 8961,sackOK,TS val 27819440 ecr 0,nop,wscale 7], length 0
  1609428918.918071 IP 172.31.11.247.6379 > 172.31.11.142.40966: Flags [S.], seq 53962565, ack 177032945, win
      28960, options [mss 1460,sackOK,TS val 3788576332 ecr 27819440,nop,wscale 7], length 0
  1609428918.918091 IP 172.31.11.142.40966 > 172.31.11.247.6379: Flags [.], ack 1, win 211, options [nop,nop,TS val 27819440 ecr 3788576332], length 0
  1609428918.918122
      IP 172.31.11.142.40966 > 172.31.11.247.6379: Flags [P.], seq 1:6, ack 1, win 211, options [nop,nop,TS val 27819440 ecr 3788576332], length 5: RESP "ping"
  1609428918.918132 IP 172.31.11.142.40966 > 172.31.11.247.6379: Flags [F.], seq 6, ack
      1, win 211, options [nop,nop,TS val 27819440 ecr 3788576332], length 0
  1609428918.918240 IP 172.31.11.247.6379 > 172.31.11.142.40966: Flags [.], ack 6, win 227, options [nop,nop,TS val 3788576332 ecr 27819440], length 0
  1609428918.918295
      IP 172.31.11.247.6379 > 172.31.11.142.40966: Flags [P.], seq 1:8, ack 7, win 227, options [nop,nop,TS val 3788576332 ecr 27819440], length 7: RESP "PONG"
  1609428918.918300 IP 172.31.11.142.40966 > 172.31.11.247.6379: Flags [.], ack 8, win
      211, options [nop,nop,TS val 27819441 ecr 3788576332], length 0
  1609428918.918302 IP 172.31.11.247.6379 > 172.31.11.142.40966: Flags [F.], seq 8, ack 7, win 227, options [nop,nop,TS val 3788576332 ecr 27819440], length 0
  1609428918.918307
      IP 172.31.11.142.40966 > 172.31.11.247.6379: Flags [.], ack 9, win 211, options [nop,nop,TS val 27819441 ecr 3788576332], length 0
  ^C
  10 packets captured
  10 packets received by filter
  0 packets dropped by kernel
  ```

  從上方的輸出中，我們可以確認 TCP 三向交握花了 222 微秒 (918091 - 917869) 完成，並且花 173 微秒 (918295 - 918122) 提交並傳回 Ping 命令。

   從請求到關閉連線花了 438 微秒 (918307 - 917869)。這些結果可以確認網路和引擎的回應時間良好，而且可以專注於其他元件進行調查。
+ 在作業系統上：`Strace` 有助於識別作業系統層級的時間落差。實際應用程式的分析會更廣泛，建議使用專門的應用程式剖析工具或除錯工具。下列範例只會顯示基礎作業系統元件是否正常運作，若不正常則可能需要進一步調查。使用相同的 Redis OSS `PING`命令搭配`strace`我們取得：

  ```
  $ echo ping | strace -f -tttt -r -e trace=execve,socket,open,recvfrom,sendto nc example.xxxxxx.ng.0001.use1.cache.amazonaws.com (http://example.xxxxxx.ng.0001.use1.cache.amazonaws.com/)
      6379
  1609430221.697712 (+ 0.000000) execve("/usr/bin/nc", ["nc", "example.xxxxxx.ng.0001.use"..., "6379"], 0x7fffede7cc38 /* 22 vars */) = 0
  1609430221.708955 (+ 0.011231) socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
  1609430221.709084
      (+ 0.000124) socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
  1609430221.709258 (+ 0.000173) open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
  1609430221.709637 (+ 0.000378) open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 3
  1609430221.709923
      (+ 0.000286) open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
  1609430221.711365 (+ 0.001443) open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 3
  1609430221.713293 (+ 0.001928) socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 3
  1609430221.717419
      (+ 0.004126) recvfrom(3, "\362|\201\200\0\1\0\2\0\0\0\0\rnotls20201224\6tihew"..., 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("172.31.0.2")}, [28->16]) = 155
  1609430221.717890 (+ 0.000469) recvfrom(3, "\204\207\201\200\0\1\0\1\0\0\0\0\rnotls20201224\6tihew"...,
      65536, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("172.31.0.2")}, [28->16]) = 139
  1609430221.745659 (+ 0.027772) socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
  1609430221.747548 (+ 0.001887) recvfrom(0, 0x7ffcf2f2ca50, 8192,
      0, 0x7ffcf2f2c9d0, [128]) = -1 ENOTSOCK (Socket operation on non-socket)
  1609430221.747858 (+ 0.000308) sendto(3, "ping\n", 5, 0, NULL, 0) = 5
  1609430221.748048 (+ 0.000188) recvfrom(0, 0x7ffcf2f2ca50, 8192, 0, 0x7ffcf2f2c9d0, [128]) = -1 ENOTSOCK
      (Socket operation on non-socket)
  1609430221.748330 (+ 0.000282) recvfrom(3, "+PONG\r\n", 8192, 0, 0x7ffcf2f2c9d0, [128->0]) = 7
  +PONG
  1609430221.748543 (+ 0.000213) recvfrom(3, "", 8192, 0, 0x7ffcf2f2c9d0, [128->0]) = 0
  1609430221.752110
      (+ 0.003569) +++ exited with 0 +++
  ```

   在上面的例子中，該命令花費超過 54 毫秒才完成 (752110 - 697712 = 54398 微秒)。

   將 nc 執行個體化並執行名稱解析花了約 20 毫秒的大量時間 (從 697712 到 717890)，在這之後，花了 2 毫秒來建立 TCP 通訊端 (745659 到 747858)，再花 0.4 毫秒 (747858 到 748330) 提交和接收請求的回應。

## 相關主題
<a name="wwe-troubleshooting.related"></a>
+ [ElastiCache 最佳實務和快取策略](BestPractices.md)