

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

# 无服务器版 Watch 入门
<a name="ServerlessWatch"></a>

ElastiCache 支持该`WATCH`命令，该命令允许您监视密钥的更改并执行条件[事务](https://valkey.io/topics/transactions/)。该`WATCH`命令对于需要乐观并发控制的应用程序特别有用，可确保只有在未修改监控密钥的情况下才会执行事务。这包括客户端所做的修改（例如写入命令）和 Valkey 本身所做的修改，例如到期或驱逐。如果从设置密钥之时起到收到密钥时`EXEC`已对其进行了修改，则整个事务都将中止。`WATCH`

对于 ElastiCache 无服务器，引入了以下限制- 

ElastiCache 无服务器的作用域`WATCH`仅限于单个哈希槽。这意味着只有映射到同一个哈希槽的密钥才能通过同一个连接同时被监视，而跟随监视命令的交易只能在同一个哈希槽上运行。当应用程序尝试监视来自不同哈希槽的密钥，或者执行对映射到与监视密钥不同的哈希槽的密钥进行操作的交易命令时，将返回`CROSSSLOT`错误。[哈希标签](https://valkey.io/topics/cluster-spec/#hash-tags)可用于确保多个密钥映射到同一个哈希槽。

此外，无法在带有监视键的连接内执行`SCAN`命令，并且会返回`command not supported during watch state`错误。

当 ElastiCache Serverless 不确定密钥是否被修改时，交易将被中止（就像触摸了监视的密钥一样）。例如，当一个插槽已迁移并且在同一个节点上找不到被监视的密钥时。

**代码示例**

## 观看和操作来自不同插槽的按键
<a name="w2aac24c33c15b1"></a>

在以下示例中，监视的密钥和`SET`命令中指定的密钥映射到不同的哈希槽。执行会返回 a `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](https://valkey.io/) .io 网站上。它提供了命令的全面概述，包括其语法、行为、返回值和潜在的错误条件。