redis-shake工具
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

57 lines
2.4 KiB

import pybbt
from helpers.commands.checker import Checker
from helpers.constant import REDIS_SERVER_MODULES_ENABLED
from helpers.redis import Redis
class TairHashChecker(Checker):
PREFIX = "tairHash"
def __init__(self):
self.cnt = 0
def add_data(self, r: Redis, cross_slots_cmd: bool):
if not REDIS_SERVER_MODULES_ENABLED:
return
p = r.pipeline()
# different parameters type
p.execute_command("EXHSET", f"{self.PREFIX}_{self.cnt}", "field", "value")
p.execute_command("EXHSET", f"{self.PREFIX}_{self.cnt}_ABS", "field_abs", "value_abs", "ABS", 2)
p.execute_command("EXHSET", f"{self.PREFIX}_{self.cnt}_EX", "field_ex", "value_ex", "EX", 20000)
# different key
# different field
p.execute_command("EXHSET", f"{self.PREFIX}_{self.cnt}_ALL_01", "field_all_01", "value_all_01", "EX", 20000, "ABS", 2)
p.execute_command("EXHSET", f"{self.PREFIX}_{self.cnt}_ALL_01", "field_all_02", "value_all_02", "EX", 20000, "ABS", 3)
p.execute_command("EXHSET", f"{self.PREFIX}_{self.cnt}_ALL_02", "field_all_01", "value_all_01", "EX", 20000, "ABS", 2)
p.execute_command("EXHSET", f"{self.PREFIX}_{self.cnt}_ALL_02", "field_all_02", "value_all_02", "EX", 20000, "ABS", 3)
ret = p.execute()
# pybbt.ASSERT_EQ(ret, [b"1", b"1", b"1", b"1",b"1", b"1",b"1"])
pybbt.ASSERT_EQ(ret, [1, 1, 1, 1, 1, 1, 1])
self.cnt += 1
def check_data(self, r: Redis, cross_slots_cmd: bool):
if not REDIS_SERVER_MODULES_ENABLED:
return
for i in range(self.cnt):
p = r.pipeline()
p.execute_command("EXHGET", f"{self.PREFIX}_{i}", "field")
p.execute_command("EXHGET", f"{self.PREFIX}_{i}_ABS", "field_abs")
p.execute_command("EXHGET", f"{self.PREFIX}_{i}_EX", "field_ex")
p.execute_command("EXHGET", f"{self.PREFIX}_{i}_ALL_01", "field_all_01")
p.execute_command("EXHGET", f"{self.PREFIX}_{i}_ALL_01", "field_all_02")
p.execute_command("EXHGET", f"{self.PREFIX}_{i}_ALL_02", "field_all_01")
p.execute_command("EXHGET", f"{self.PREFIX}_{i}_ALL_02", "field_all_02")
ret = p.execute()
# 需要确定一下如果一个命令返回多个值是如何封装的
pybbt.ASSERT_EQ(ret, [b"value", b"value_abs", b"value_ex", b"value_all_01", b"value_all_02", b"value_all_01", b"value_all_02", ])