

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

# 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)

## 啟用 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
```