本文整理汇总了C++中Context::GetTransc方法的典型用法代码示例。如果您正苦于以下问题:C++ Context::GetTransc方法的具体用法?C++ Context::GetTransc怎么用?C++ Context::GetTransc使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Context
的用法示例。
在下文中一共展示了Context::GetTransc方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Multi
int Ardb::Multi(Context& ctx, RedisCommandFrame& cmd)
{
if (ctx.InTransc())
{
fill_error_reply(ctx.reply, "MULTI calls can not be nested");
return 0;
}
ctx.GetTransc().in_transc = true;
fill_status_reply(ctx.reply, "OK");
return 0;
}
示例2: WatchForKey
int Ardb::WatchForKey(Context& ctx, const std::string& key)
{
WriteLockGuard<SpinRWLock> guard(m_watched_keys_lock);
if (NULL == m_watched_ctx)
{
m_watched_ctx = new WatchedContextTable;
}
DBItemKey k(ctx.currentDB, key);
(*m_watched_ctx)[k].insert(&ctx);
ctx.GetTransc().watched_keys.insert(k);
return 0;
}
示例3: Exec
int Ardb::Exec(Context& ctx, RedisCommandFrame& cmd)
{
if (!ctx.InTransc())
{
fill_error_reply(ctx.reply, "EXEC without MULTI");
return 0;
}
if (ctx.GetTransc().abort)
{
ctx.reply.type = REDIS_REPLY_NIL;
ctx.ClearTransc();
return 0;
}
LockGuard<ThreadMutex> guard(g_transc_mutex); //only one transc allowed exec at the same time in multi threads
RedisCommandFrameArray::iterator it = ctx.GetTransc().cached_cmds.begin();
Context transc_ctx;
transc_ctx.currentDB = ctx.currentDB;
while (it != ctx.GetTransc().cached_cmds.end())
{
RedisReply& r = ctx.reply.AddMember();
RedisCommandHandlerSetting* setting = FindRedisCommandHandlerSetting(*it);
if(NULL != setting)
{
transc_ctx.reply.Clear();
DoCall(transc_ctx, *setting, *it);
r.Clone(transc_ctx.reply);
}
else
{
fill_error_reply(r, "unknown command '%s'", it->GetCommand().c_str());
}
it++;
}
ctx.currentDB = transc_ctx.currentDB;
ctx.ClearTransc();
UnwatchKeys(ctx);
return 0;
}
示例4: UnwatchKeys
int Ardb::UnwatchKeys(Context& ctx)
{
if(NULL != m_watched_ctx && ctx.transc != NULL)
{
WriteLockGuard<SpinRWLock> guard(m_watched_keys_lock);
WatchKeySet::iterator it = ctx.GetTransc().watched_keys.begin();
while(it != ctx.GetTransc().watched_keys.end())
{
(*m_watched_ctx)[*it].erase(&ctx);
if((*m_watched_ctx)[*it].size() == 0)
{
m_watched_ctx->erase(*it);
}
it++;
}
ctx.ClearTransc();
if(m_watched_ctx->empty())
{
DELETE(m_watched_ctx);
}
}
return 0;
}