void HelloTypeRdbSave(RedisModuleIO *rdb, void *value) { struct HelloTypeObject *hto = value; struct HelloTypeNode *node = hto->head; RedisModule_SaveUnsigned(rdb,hto->len); while(node) { RedisModule_SaveSigned(rdb,node->value); node = node->next; } }
void UniqueTypeRdbSave(RedisModuleIO *rdb, void *value) { unique *unique = value; listIter *it = listGetIterator(unique->l, AL_START_HEAD); listNode *node; RedisModule_SaveUnsigned(rdb, listLength(unique->l)); for (node = listNext(it); node; node = listNext(it)) { dictEntry *en = node->value; RedisModule_SaveStringBuffer(rdb, en->key, sdslen(en->key)); RedisModule_SaveStringBuffer(rdb, en->v.val, sdslen(en->v.val)); } }
void RaxType_RdbSave(RedisModuleIO *rdb, void *value) { rax *r = (rax *)value; int count = raxSize(r); RedisModule_SaveUnsigned(rdb, count); // Scan entire trie. raxIterator it; raxStart(&it, r); raxSeek(&it, "^", NULL, 0); while(raxNext(&it)) { RedisModule_SaveStringBuffer(rdb, (const char *)it.key, it.key_len); } raxStop(&it); }
void TagIndex_RdbSave(RedisModuleIO *rdb, void *value) { TagIndex *idx = value; RedisModule_SaveUnsigned(rdb, idx->values->cardinality); TrieMapIterator *it = TrieMap_Iterate(idx->values, "", 0); char *str; tm_len_t slen; void *ptr; size_t count = 0; while (TrieMapIterator_Next(it, &str, &slen, &ptr)) { count++; RedisModule_SaveStringBuffer(rdb, str, slen); InvertedIndex *inv = ptr; InvertedIndex_RdbSave(rdb, inv); } assert(count == idx->values->cardinality); TrieMapIterator_Free(it); }