本文整理汇总了C++中dictGetIterator函数的典型用法代码示例。如果您正苦于以下问题:C++ dictGetIterator函数的具体用法?C++ dictGetIterator怎么用?C++ dictGetIterator使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dictGetIterator函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: gossip_metainfo
static void
gossip_metainfo(void)
{
dictIterator *dc_it;
dictEntry *dc_de;
dc_it = dictGetIterator(gn_pool.dict_dc);
while ((dc_de = dictNext(dc_it)) != NULL) {
struct gossip_dc *g_dc = dictGetVal(dc_de);
log_debug(LOG_VERB, "\tDC name : '%.*s'", g_dc->name.len, g_dc->name.data);
dictIterator *rack_it = dictGetIterator(g_dc->dict_rack);
dictEntry *rack_de;
while ((rack_de = dictNext(rack_it)) != NULL) {
struct gossip_rack *g_rack = dictGetVal(rack_de);
log_debug(LOG_VERB, "\tRack name : '%.*s'", g_rack->name.len, g_rack->name.data);
dictIterator *node_it = dictGetIterator(g_rack->dict_token_nodes);
dictEntry *node_de;
int i = 0;
while ((node_de = dictNext(node_it)) != NULL) {
struct node *gnode = dictGetVal(node_de);
log_debug(LOG_VERB, "\tNode name : '%.*s'", gnode->name.len, gnode->name.data);
struct string *token_key = dictGetKey(node_de);
log_debug(LOG_VERB, "\tNode token : '%.*s'", *token_key);
}
}
}
}
开发者ID:amimimor,项目名称:dynomite,代码行数:29,代码来源:dyn_gossip.c
示例2: callback_recurse
void
callback_recurse(Engine *engine, dict *term_index, dict *query_nodes, void *doc, bool positive) {
assert(doc);
if(positive) {
QueryNode *n = dictFetchValue(query_nodes, &SENTINEL);
if (n) {
DEBUG("recursing SENTINEL");
callback_recurse(engine, term_index, n->children, doc, false);
}
}
if(dictSize(term_index) > dictSize(query_nodes) || !positive){
dictIterator *iterator = dictGetIterator(query_nodes);
dictEntry *next;
while ((next = dictNext(iterator))) {
if (positive == !!dictFetchValue(term_index, dictGetKey(next))) {
QueryNode *node = dictGetVal(next);
Callback *cb = node->callback;
assert(node->term->owns_string);
DEBUG("perc'd %.*s:%.*s", node->term->field.len, node->term->field.val, node->term->text.len, node->term->text.val);
while(cb) {
DEBUG("running callback %d", cb->id);
cb->handler(cb, doc);
cb = cb->next;
}
if(node->children) {
callback_recurse(engine, term_index, node->children, doc, positive);
}
}
}
dictReleaseIterator(iterator);
} else {
dictIterator *iterator = dictGetIterator(term_index);
dictEntry *next;
QueryNode *node;
while ((next = dictNext(iterator))) {
if(positive == !!(node = dictFetchValue(query_nodes, dictGetKey(next)))) {
Callback *cb = node->callback;
DEBUG("perc'd %.*s:%.*s", node->term->field.len, node->term->field.val, node->term->text.len, node->term->text.val);
while(cb) {
DEBUG("running callback %d", cb->id);
cb->handler(cb, doc);
cb = cb->next;
}
if(node->children){
callback_recurse(engine, term_index, node->children, doc,positive);
}
}
}
dictReleaseIterator(iterator);
}
}
开发者ID:fizx,项目名称:sit,代码行数:53,代码来源:engine.c
示例3: __redisAsyncFree
/* Helper function to free the context. */
static void __redisAsyncFree(redisAsyncContext *ac) {
redisContext *c = &(ac->c);
redisCallback cb;
dictIterator *it;
dictEntry *de;
// 执行所有等待队列中回调函数,将空回复传进去
/* Execute pending callbacks with NULL reply. */
while (__redisShiftCallback(&ac->replies,&cb) == REDIS_OK)
__redisRunCallback(ac,&cb,NULL);
// 执行所有等待队列中回调函数,将空回复传进去
// 这里是无效命令的回调函数
/* Execute callbacks for invalid commands */
while (__redisShiftCallback(&ac->sub.invalid,&cb) == REDIS_OK)
__redisRunCallback(ac,&cb,NULL);
// 执行所有等待队列中回调函数,将空回复传进去
// 这里是订阅发布的回调函数
/* Run subscription callbacks callbacks with NULL reply */
it = dictGetIterator(ac->sub.channels);
while ((de = dictNext(it)) != NULL)
__redisRunCallback(ac,dictGetEntryVal(de),NULL);
dictReleaseIterator(it);
dictRelease(ac->sub.channels);
// 执行所有等待队列中回调函数,将空回复传进去
// 这里是订阅发布的回调函数
it = dictGetIterator(ac->sub.patterns);
while ((de = dictNext(it)) != NULL)
__redisRunCallback(ac,dictGetEntryVal(de),NULL);
dictReleaseIterator(it);
dictRelease(ac->sub.patterns);
// 注销连接上的读写事件
/* Signal event lib to clean up */
_EL_CLEANUP(ac);
// 执行连接关闭回调函数,可做一些清理工作
/* Execute disconnect callback. When redisAsyncFree() initiated destroying
* this context, the status will always be REDIS_OK. */
if (ac->onDisconnect && (c->flags & REDIS_CONNECTED)) {
if (c->flags & REDIS_FREEING) {
ac->onDisconnect(ac,REDIS_OK);
} else {
ac->onDisconnect(ac,(ac->err == 0) ? REDIS_OK : REDIS_ERR);
}
}
// 释放 redisContext 中的内存
/* Cleanup self */
redisFree(c);
}
开发者ID:daoluan,项目名称:decode-redis-2.8,代码行数:54,代码来源:async.c
示例4: countersSync
void countersSync(clusterNode *node) {
dictIterator *it;
dictEntry *de;
it = dictGetIterator(server.counters);
while ((de = dictNext(it)) != NULL) {
counter *cntr;
listNode *ln;
listIter li;
shard *shrd;
cntr = dictGetVal(de);
/* If we have our own shard make sure to send it's prediction
* to the new node. */
if (cntr->myshard) {
clusterSendShardToNode(cntr, node);
}
listRewind(cntr->shards,&li);
while ((ln = listNext(&li)) != NULL) {
shrd = listNodeValue(ln);
if (memcmp(shrd->node_name, node->name, CLUSTER_NAMELEN) == 0) {
shrd->node = node;
}
}
}
dictReleaseIterator(it);
}
开发者ID:erikdubbelboer,项目名称:discnt,代码行数:30,代码来源:counter.c
示例5: createAllCFSfromConfig
static int createAllCFSfromConfig()
{
dictEntry *de = NULL;
dictIterator *di = NULL;
if(!g_dataModel.cfsHashTable)
return -1;
di = dictGetIterator(g_cfmDict);
if(!di){
return -1;
}
de = dictNext(di);
while(de){
columnFamilyMetadata *cfmd = (columnFamilyMetadata *)
dictGetEntryKey(de);
columnFamilyStore *cfs = NULL;
if(!cfmd || !(cfs = getCFStore(cfmd))){
dictReleaseIterator(di);
return -1;
}
if(insertDMCFS(cfs) < 0){
dictReleaseIterator(di);
freeHeapCFStore(cfs);
return -1;
}
de = dictNext(di);
}
dictReleaseIterator(di);
return 0;
}
开发者ID:yuandaxing,项目名称:c-cassandra,代码行数:34,代码来源:dataModel.c
示例6: conf_organization_dump
static void
conf_organization_dump(sds name, dict *org, int log_level)
{
dictIterator *di;
dictEntry *de;
sds key;
conf_value *cv;
if(name == NULL || org == NULL){
return;
}
log_debug(log_level, "[%.*s]", sdslen(name), name);
di = dictGetIterator(org);
while((de = dictNext(di)) != NULL){
key = dictGetKey(de);
cv = dictGetVal(de);
if(cv->type == CONF_VALUE_STRING){
log_debug(log_level, "%.*s: %.*s",
sdslen(key), key,
sdslen(cv->value), cv->value);
}else if(cv->type == CONF_VALUE_ARRAY){
log_debug(log_level, "%.*s:",sdslen(key), key);
conf_value_dump(cv, log_level);
}else{
NOT_REACHED();
}
}
dictReleaseIterator(di);
}
开发者ID:654894017,项目名称:redis-migrate-tool,代码行数:34,代码来源:rmt_conf.c
示例7: conf_organizations_dump
static void
conf_organizations_dump(rmt_conf *cf)
{
dict *orgs, *org;
dictIterator *di;
dictEntry *de;
sds name;
int log_level = LOG_VERB;
if(cf == NULL){
return;
}
orgs = cf->organizations;
if(orgs == NULL){
log_debug(log_level, "organization is NULL");
return;
}
di = dictGetIterator(orgs);
while((de = dictNext(di)) != NULL){
name = dictGetKey(de);
org = dictGetVal(de);
conf_organization_dump(name, org, log_level);
log_debug(log_level, "");
}
dictReleaseIterator(di);
}
开发者ID:654894017,项目名称:redis-migrate-tool,代码行数:31,代码来源:rmt_conf.c
示例8: unblockClientWaitingData
/* Unblock a client that's waiting in a blocking operation such as BLPOP */
void unblockClientWaitingData(redisClient *c) {
dictEntry *de;
dictIterator *di;
list *l;
redisAssertWithInfo(c,NULL,dictSize(c->bpop.keys) != 0);
di = dictGetIterator(c->bpop.keys);
/* The client may wait for multiple keys, so unblock it for every key. */
while((de = dictNext(di)) != NULL) {
robj *key = dictGetKey(de);
/* Remove this client from the list of clients waiting for this key. */
l = dictFetchValue(c->db->blocking_keys,key);
redisAssertWithInfo(c,key,l != NULL);
listDelNode(l,listSearchKey(l,c));
/* If the list is empty we need to remove it to avoid wasting memory */
if (listLength(l) == 0)
dictDelete(c->db->blocking_keys,key);
}
dictReleaseIterator(di);
/* Cleanup the client structure */
dictEmpty(c->bpop.keys,NULL);
if (c->bpop.target) {
decrRefCount(c->bpop.target);
c->bpop.target = NULL;
}
c->flags &= ~REDIS_BLOCKED;
c->flags |= REDIS_UNBLOCKED;
server.bpop_blocked_clients--;
listAddNodeTail(server.unblocked_clients,c);
}
开发者ID:superlaza,项目名称:fbTesting,代码行数:33,代码来源:t_list.c
示例9: call_expire_delete_event
void call_expire_delete_event(void *pdb,void *pkeyobj)
{
redisDb *db=(redisDb *)pdb;
robj *myobj=(robj *)pkeyobj;
robj *keyobj = createStringObject(myobj->ptr,sdslen(myobj->ptr));
struct dictIterator *iter=dictGetIterator(server.bridge_db.triggle_scipts[db->id]);
dictEntry *trigs;
do{
trigs=dictNext(iter);
if(trigs!=NULL)
{
struct bridge_db_triggle_t * tmptrg=dictGetVal(trigs);
//add func str check for the function only the key satisfy the funcname:XXXX can call the event
if(tmptrg->event==DELETE_EXPIRE&&strncmp(keyobj->ptr,dictGetKey(trigs),sdslen(dictGetKey(trigs)))==0){ //找到指定的类型事件
redisLog(REDIS_NOTICE,"triggle_event:%d,%s",DELETE_EXPIRE,(char *)dictGetKey(trigs));
triggle_expire_event(db,dictGetKey(trigs),keyobj);
}
}
}while(trigs!=NULL);
dictReleaseIterator(iter);
decrRefCount(keyobj);
}
开发者ID:crestxu,项目名称:redis-triggle,代码行数:25,代码来源:triggle_process.c
示例10: unblockClientWaitingData
/* Unblock a client that's waiting in a blocking operation such as BLPOP.
* You should never call this function directly, but unblockClient() instead. */
void unblockClientWaitingData(redisClient *c) {
dictEntry *de;
dictIterator *di;
list *l;
redisAssertWithInfo(c,NULL,dictSize(c->bpop.keys) != 0);
di = dictGetIterator(c->bpop.keys);
/* The client may wait for multiple keys, so unblock it for every key. */
while((de = dictNext(di)) != NULL) {
robj *key = dictGetKey(de);
redisDb *db = &(c->db)[keyHashSlot(key->ptr, sdslen(key->ptr))];
/* Remove this client from the list of clients waiting for this key. */
l = dictFetchValue(db->blocking_keys,key);
redisAssertWithInfo(c,key,l != NULL);
listDelNode(l,listSearchKey(l,c));
/* If the list is empty we need to remove it to avoid wasting memory */
if (listLength(l) == 0)
dictDelete(db->blocking_keys,key);
}
dictReleaseIterator(di);
/* Cleanup the client structure */
dictEmpty(c->bpop.keys,NULL);
if (c->bpop.target) {
decrRefCount(c->bpop.target);
c->bpop.target = NULL;
}
}
开发者ID:frostyplanet,项目名称:jimdb,代码行数:31,代码来源:t_list.c
示例11: delkeysCommand
void delkeysCommand(redisClient *c) {
dictIterator *di;
dictEntry *de;
sds pattern = c->argv[1]->ptr;
int plen = sdslen(pattern), allkeys;
unsigned long deleted = 0;
di = dictGetIterator(c->db->dict);
allkeys = (pattern[0] == '*' && pattern[1] == '\0');
while((de = dictNext(di)) != NULL) {
sds key = dictGetEntryKey(de);
robj *keyobj;
if (allkeys || stringmatchlen(pattern,plen,key,sdslen(key),0)) {
keyobj = createStringObject(key,sdslen(key));
if (dbDelete(c->db,keyobj)) {
touchWatchedKey(c->db,keyobj);
server.dirty++;
deleted++;
}
decrRefCount(keyobj);
}
}
dictReleaseIterator(di);
addReplyLongLong(c,deleted);
}
开发者ID:Elbandi,项目名称:redis,代码行数:26,代码来源:db.c
示例12: dbPrintSets
void dbPrintSets(FILE *f)
{
dictIterator *iter = NULL;
dictEntry *entry = NULL;
if (NULL == f)
return;
lockRead(sets);
if (0 == dictSize(sets))
{
unlockRead(sets);
fprintf(f, "No sets in db.\r\n");
return;
}
if (NULL == (iter = dictGetIterator(sets)))
{
unlockRead(sets);
return;
}
while (NULL != (entry = dictNext(iter)))
{
fprintf(f, "%s\r\n", dictGetEntryKey(entry));
lockRead(dictGetEntryVal(entry));
setPrint((set *) dictGetEntryVal(entry), f, 1);
unlockRead(dictGetEntryVal(entry));
fprintf(f, "\r\n");
}
dictReleaseIterator(iter);
unlockRead(sets);
}
开发者ID:aquirel,项目名称:athenadb,代码行数:35,代码来源:dbengine.c
示例13: dbFlushAll
int dbFlushAll(void)
{
dictIterator *iter = NULL;
dictEntry *entry = NULL;
lockWrite(sets);
if (NULL == (iter = dictGetIterator(sets)))
{
unlockWrite(sets);
return -1;
}
while (NULL != (entry = dictNext(iter)))
{
set *s = (set *) dictGetEntryVal(entry);
lockWrite(s);
if (!s->registered)
setDestroy(s);
unregisterSyncObject(s);
}
dictReleaseIterator(iter);
dictEmpty(sets);
unlockWrite(sets);
return 0;
}
开发者ID:aquirel,项目名称:athenadb,代码行数:27,代码来源:dbengine.c
示例14: keysCommand
void keysCommand(redisClient *c) {
dictIterator *di;
dictEntry *de;
sds pattern = c->argv[1]->ptr;
int plen = sdslen(pattern);
unsigned long numkeys = 0;
robj *lenobj = createObject(REDIS_STRING,NULL);
di = dictGetIterator(c->db->dict);
addReply(c,lenobj);
decrRefCount(lenobj);
while((de = dictNext(di)) != NULL) {
sds key = dictGetEntryKey(de);
robj *keyobj;
if ((pattern[0] == '*' && pattern[1] == '\0') ||
stringmatchlen(pattern,plen,key,sdslen(key),0)) {
keyobj = createStringObject(key,sdslen(key));
if (expireIfNeeded(c->db,keyobj) == 0) {
addReplyBulk(c,keyobj);
numkeys++;
}
decrRefCount(keyobj);
}
}
dictReleaseIterator(di);
lenobj->ptr = sdscatprintf(sdsempty(),"*%lu\r\n",numkeys);
}
开发者ID:andradeandrey,项目名称:redis,代码行数:28,代码来源:db.c
示例15: unblockClientWaitingData
//解阻塞一个正在阻塞中的client
void unblockClientWaitingData(client *c) {
dictEntry *de;
dictIterator *di;
list *l;
serverAssertWithInfo(c,NULL,dictSize(c->bpop.keys) != 0);
//创建一个字典的迭代器,指向的是造成client阻塞的键所组成的字典
di = dictGetIterator(c->bpop.keys);
/* The client may wait for multiple keys, so unblock it for every key. */
//因为client可能被多个key所阻塞,所以要遍历所有的键
while((de = dictNext(di)) != NULL) {
robj *key = dictGetKey(de); //获得key对象
/* Remove this client from the list of clients waiting for this key. */
//根据key找到对应的列表类型值,值保存着被阻塞的client,从中找c->db->blocking_keys中寻找
l = dictFetchValue(c->db->blocking_keys,key);
serverAssertWithInfo(c,key,l != NULL);
// 将阻塞的client从列表中移除
listDelNode(l,listSearchKey(l,c));
/* If the list is empty we need to remove it to avoid wasting memory */
//如果当前列表为空了,则从c->db->blocking_keys中将key删除
if (listLength(l) == 0)
dictDelete(c->db->blocking_keys,key);
}
dictReleaseIterator(di); //释放迭代器
/* Cleanup the client structure */
//清空bpop.keys的所有节点
dictEmpty(c->bpop.keys,NULL);
//如果保存有新添加的元素,则应该释放
if (c->bpop.target) {
decrRefCount(c->bpop.target);
c->bpop.target = NULL;
}
}
开发者ID:therenine,项目名称:redis_source_annotation,代码行数:36,代码来源:t_list.c
示例16: keysCommand
void keysCommand(redisClient *c) {
dictIterator *di;
dictEntry *de;
sds pattern = c->argv[1]->ptr;
int plen = sdslen(pattern), allkeys;
unsigned long numkeys = 0;
void *replylen = addDeferredMultiBulkLength(c);
di = dictGetIterator(c->db->dict);
allkeys = (pattern[0] == '*' && pattern[1] == '\0');
while((de = dictNext(di)) != NULL) {
sds key = dictGetEntryKey(de);
robj *keyobj;
if (allkeys || stringmatchlen(pattern,plen,key,sdslen(key),0)) {
keyobj = createStringObject(key,sdslen(key));
if (expireIfNeeded(c->db,keyobj) == 0) {
addReplyBulk(c,keyobj);
numkeys++;
}
decrRefCount(keyobj);
}
}
dictReleaseIterator(di);
setDeferredMultiBulkLength(c,replylen,numkeys);
}
开发者ID:andmej,项目名称:redis,代码行数:26,代码来源:db.c
示例17: _engine_apply_ints
void
_engine_apply_ints(Engine *engine, DocBuf *buffer, long doc_id) {
dictIterator *iter = dictGetIterator(engine->ints);
dictEntry *entry;
while ((entry = dictNext(iter))) {
pstring *key = dictGetKey(entry);
engine_set_int(engine, doc_id, key, 0);
}
dictReleaseIterator(iter);
iter = dictGetIterator(buffer->ints);
while ((entry = dictNext(iter))) {
pstring *key = dictGetKey(entry);
int val = dictGetSignedIntegerVal(entry);
engine_set_int(engine, doc_id, key, val);
}
dictReleaseIterator(iter);
}
开发者ID:fizx,项目名称:sit,代码行数:17,代码来源:engine.c
示例18: scriptNameCommand
/* scriptNameCommand() has compound sub-arguments, so it looks slightly more
* convoluted than it actually is. Just read each if/else branch as
* if it were an individual command. */
void scriptNameCommand(redisClient *c) {
char *req = c->argv[1]->ptr;
sds script_name = c->argv[2]->ptr;
if (c->argc == 4 && !strcasecmp(req, "set")) {
sds target_sha = c->argv[3]->ptr;
if (sdslen(target_sha) != 40 ||
dictFind(server.lua_scripts,target_sha) == NULL) {
addReply(c, g.err.nosha);
return;
}
/* If name doesn't exist, dictReplace == dictAdd */
dictReplace(g.names, script_name, target_sha);
addReplyBulkCBuffer(c, script_name, sdslen(script_name));
} else if (c->argc == 3 && !strcasecmp(req, "get")) {
sds found;
if ((found = dictFetchValue(g.names, script_name))) {
addReplyBulkCBuffer(c, found, sdslen(found));
} else {
addReply(c, g.err.noname);
}
} else if (c->argc == 2 && !strcasecmp(req, "getall")) {
dictIterator *di;
dictEntry *de;
unsigned long sz = dictSize(g.names);
if (!sz) {
addReply(c, shared.emptymultibulk);
return;
}
/* Multiply by 2 because the size of the dict is the number of keys.
* We are returning keys *and* values, so length is dictSize * 2 */
addReplyMultiBulkLen(c, sz * 2);
di = dictGetIterator(g.names);
while ((de = dictNext(di))) {
addReplyBulkCString(c, dictGetKey(de));
addReplyBulkCString(c, dictGetVal(de));
}
dictReleaseIterator(di);
} else if (c->argc == 3 && !strcasecmp(req, "del")) {
sds deleted;
if ((deleted = dictFetchValue(g.names, script_name))) {
dictDelete(g.names, script_name);
addReplyBulkCBuffer(c, deleted, sdslen(deleted));
} else {
addReply(c, g.err.noname);
}
} else {
addReplyError(c, "Unknown scriptName subcommand or arg count");
}
}
开发者ID:nivertech,项目名称:krmt,代码行数:61,代码来源:scriptname.c
示例19: processCleanup
void processCleanup(void) {
dictIterator *di = dictGetIterator(server.process);
dictEntry *de;
while ((de = dictNext(di)) != NULL) {
struct ProcessInfo *p = dictGetEntryVal(de);
if (p->time_stamp != g_time) deleteProcess(p->pid);
}
dictReleaseIterator(di);
}
开发者ID:cinience,项目名称:saker,代码行数:9,代码来源:topbase.c
示例20: pubsubCommand
/* PUBSUB command for Pub/Sub introspection. */
void pubsubCommand(redisClient *c) {
// 处理PUBSUB CHANNELS [pattern]命令
if (!strcasecmp(c->argv[1]->ptr,"channels") &&
(c->argc == 2 || c->argc ==3))
{
/* PUBSUB CHANNELS [<pattern>] */
// 获取pattern参数,如果没有则为NULL
sds pat = (c->argc == 2) ? NULL : c->argv[2]->ptr;
dictIterator *di = dictGetIterator(server.pubsub_channels);
dictEntry *de;
long mblen = 0;
void *replylen;
replylen = addDeferredMultiBulkLength(c);
// 遍历server.pubsub_channels字典
while((de = dictNext(di)) != NULL) {
// 取出当前频道channel
robj *cobj = dictGetKey(de);
sds channel = cobj->ptr;
// 如果没有给定pattern参数,则打印出所有频道
// 如果给定pattern参数,则打印出与pattern参数相匹配的频道
if (!pat || stringmatchlen(pat, sdslen(pat),
channel, sdslen(channel),0))
{
addReplyBulk(c,cobj);
mblen++;
}
}
dictReleaseIterator(di);
setDeferredMultiBulkLength(c,replylen,mblen);
}
// 处理PUBSUB NUMSUB [Channel_1 ... Channel_N]命令
else if (!strcasecmp(c->argv[1]->ptr,"numsub") && c->argc >= 2) {
/* PUBSUB NUMSUB [Channel_1 ... Channel_N] */
int j;
addReplyMultiBulkLen(c,(c->argc-2)*2);
for (j = 2; j < c->argc; j++) {
list *l = dictFetchValue(server.pubsub_channels,c->argv[j]);
addReplyBulk(c,c->argv[j]);
addReplyLongLong(c,l ? listLength(l) : 0);
}
}
// 处理PUBSUB NUMPA命令
else if (!strcasecmp(c->argv[1]->ptr,"numpat") && c->argc == 2) {
/* PUBSUB NUMPAT */
addReplyLongLong(c,listLength(server.pubsub_patterns));
} else {
addReplyErrorFormat(c,
"Unknown PUBSUB subcommand or wrong number of arguments for '%s'",
(char*)c->argv[1]->ptr);
}
}
开发者ID:coverxiaoeye,项目名称:the-annotated-redis-3.0,代码行数:57,代码来源:pubsub.c
注:本文中的dictGetIterator函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论