> For the complete documentation index, see [llms.txt](https://meetbill.gitbook.io/butterfly-project-doc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://meetbill.gitbook.io/butterfly-project-doc/project-handlers/chunfeng/butterfly-bianque/butterfly-yiye.md).

# 同步探测-Redis

## 1 workflow

```
创建 workflow 时，生成需要测试的 key 的 slot 列表

(1) [source_set] 源集群生成测试 key，value 为 reqid
(2) [target_get] 目标集群检查 key 的 value
    1> key 的 value 与源集群测试 key 的 value 一致 ----> OK
    2> key 的 value 与源集群测试 key 的 value 不一致，且时间未到 10 分钟 ----> ERR_TASK_ING
    3> key 的 value 与源集群测试 key 的 value 不一致，且时间已超过 10 分钟 ----> OK 
(3) [source_del] 删除源集群测试 key
```

## 2 常见问题

### 2.1 如何使得不同的 task 获取到相同的测试 key

生成要测试的 key 的 slot

```
>>> import random
>>> slot_list = range(16384)
>>> random.seed(0)
>>> random.shuffle(slot_list)
>>> print slot_list[:10]
[5545, 6735, 3541, 3145, 12972, 6485, 14559, 10544, 9010, 15150]

# todo 
经测，同 seed_num 的情况下，有时候返回的列表是不一样的，原因目前还未知
```

将测试 key 和 slot 存储到本地 cache

```
slot_key_list = _dc.Index("{data_dir}/slot_key".format(data_dir=config.LOCALDATA_DIR))

if len(slot_key_list) != 16384:
    with open("./data/slot_key.md", "r") as f:
        for line in f:
            line_list = line.strip().split("  ")
            key_index = int(line_list[0])
            key_name = "{{{hash_tag}}}:{slot}".format(hash_tag=line_list[-1], slot=key_index)
            slot_key_list[key_index] = key_name
```

### 2.2 时间判定问题

```
target_get 应该是以 source_set 写入的时间为准

即 source_set value 后，将 value 传递给 target_get
```
