总结测试发现的问题
1、slots连接失败
原因:因为redis集群全部在一台机器上搭建,使用了127.0.01地址,所以在另外一台机器上连接时,无法连接
解决:将redis集群重新创建,使用实际IP地址
2、test bitop failed
手动执行一下测试代码里面命令,发现报错如下
(error) CROSSSLOT Keys in request don't hash to the same slot
原因:原来是redis做了限制,对不同的key,如果对应不同的slot,无法执行bitop、zunionstore这样类似的操作
解决:将key相同的部分加上{},redis有机制,只对{}内的字符串计算slot,修改测试代码如下
将相同的部分tk_str加上{}
bool CTestString::Test_Bitop()
{
if (!InitStringEnv(10, 0) || !InitListEnv(1, 1))
return PrintResult("bitop", false);
bool bSuccess = false;
long nVal;
std::string strVal;
std::vector<std::string> v1 = {"{tk_str}_1", "{tk_str}_2"};
std::vector<std::string> v2 = {"{tk_str}_1", "{tk_str}_2"};
if (m_redis.Set("{tk_str}_1", "\x86") == RC_SUCCESS &&
m_redis.Set("{tk_str}_2", "\x2b") == RC_SUCCESS &&
m_redis.Set("{tk_str}_3", "\xae\xc8") == RC_SUCCESS &&
m_redis.Bitop("{tk_str}_4", "AND", v1, &nVal) == RC_SUCCESS &&
m_redis.Get("{tk_str}_4", &strVal) == RC_SUCCESS && nVal == 1 && strVal == "\x02" &&
m_redis.Bitop("{tk_str}_5", "OR", v1, &nVal) == RC_SUCCESS &&
m_redis.Get("{tk_str}_5", &strVal) == RC_SUCCESS && nVal == 1 && strVal == "\xaf")
bSuccess = true;
return PrintResult("bitop", bSuccess);
}