hiredis 库如何实现事务

2018-11-22 14:40:31 +08:00
 weixiaoyao

近期使用 hiredis 库,用到了 pipeline 的方式,但是 pipiline 无法解决多客户端时可能操作同样 key 的竞争问题,想使用事务方式,但是不知道该怎么实现,有用过的朋友可以指点下么,谢谢了。 下面是用 redisAppendCommand 和 redisGetReply 实现的 pipeline 方式

//输入命令写入缓冲区
int nCmdCount = vecPipelineCmd.size();
for (int i = 0; i < nCmdCount; i++)
{
	redisAppendCommand(m_pContext, vecPipelineCmd[i].c_str());
}

//批量发送命令并获取批量回复结果,redisGetReply 的调用次数必须和 redisAppendCommand 一致
nSuccessCnt = 0;
for (int i = 0; i < nCmdCount; i++)
{
	bool bStatus = false;
	string strRsp("");
	redisReply* reply = NULL;

	if(redisGetReply(m_pContext, (void**)&reply) == REDIS_OK && reply != NULL && reply->type == REDIS_REPLY_STRING)
	{
		bStatus = true;
		strRsp = reply->str;
		nSuccessCnt++;
	}

	//释放 reply 的内存空间
	freeReplyObject(reply);

	vecPipelineStatus.push_back(bStatus);
	vecPipelineRsp.push_back(strRsp);
}
4379 次点击
所在节点    Redis
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/510410

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX