
# 同步查询KvCache
#### 功能介绍
用于查询 EMS 缓存池中是否存在已保存的 KVCache 数据块，查询结果将以[表 CcResult]形式返回。
#### 接口约束
- 同步接口：接口会休眠阻塞。
- 加速卡限制：仅支持华为昇腾加速卡显存查询。
- 异常处理：若 KVCache 数据块查询超时或失败，接口返回0命中，框架将重新进行计算。
 
#### 方法定义
```
ContextCaching.exists(hashes, option)
```
#### 请求参数说明
表1请求参数列表 
| **参数名称** | **参数类型**                                                  | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| hashes   | List\[int\]                                               | 是        | **参数解释：** 预计算的块前缀哈希列表。 **约束限制：** 无。 **取值范围：** 无。 **默认取值：** None。                   |
| option   | [表2] | 否        | **参数解释：** ContextCaching访问内存池的KV操作选项。 **约束限制：** 不能为None。 **取值范围：** 无。 **默认取值：** 无。 |
   
 表2CcKvOption 
| **参数名称**        | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|:---|
| write_rcache    | bool     | 可选       | **参数解释：** 是否将本次写入保存为本地读缓存，默认值为True。 **约束限制：** 无。 **取值范围：** True：将本次写入保存为本地读缓存 False：不将本次写入保存为本地读缓存 **默认取值：** True                     |
| read_local_only | bool     | 可选       | **参数解释：** 是否只读本地缓存，如果置为True，则不会从其他节点读取数据，只有读流程生效。 **约束限制：** 无。 **取值范围：** True：只读本地缓存 False：优先读本地缓存，如果本地未命中，则从其他节点读取数据 **默认取值：** False |
| timeout         | int      | 可选       | **参数解释：** 请求超时时间，单位为毫秒。 **约束限制：** 无。 **取值范围：** 大于等于0。 **默认取值：** 5000                                                                                                                           |
   
#### 返回结果说明
表3返回结果 
| **类型**                                                    | **说明**                                                                                                                                                                                                                       |
|:---|:---|
| [表4] | **参数解释：** Context Caching访问内存池的执行结果。 **取值范围：** 无。 |
   
 表4CcResult 
| **参数名称** | **参数类型** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|
| success  | int      | **参数解释：** 请求的批量key读写连续成功的个数。 **约束限制：** 无。 **取值范围：** 0\~请求key的个数。 **默认取值：** 无。 |
| total    | int      | **参数解释：** 请求的批量key总个数。 **约束限制：** 无。 **取值范围：** 请求列表中批量key的个数。 **默认取值：** 无。     |
   
#### 代码样例
下面为从EMS中同步查询KVCache，同时对异常进行容错处理。
```
# 设置请求的超时时间 
option = CcKvOption(timeout=5000)
# 组成参数列表 
hashes = [0xABCD, 0x1234] 
# 可以根据不同异常，采取不同处理方式，例如超时错误可以重试。 
try: 
    cc_result = cc.exists(hashes = hashes, option = option)
except EmsException as e: 
    print(f"failed to exists, {e}.") 
    exit(2) 
print(cc_result)
```
