

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

# 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/) 網站上。它提供命令的完整概觀，包括其語法、行為、傳回值和潛在的錯誤條件。