Persistence code for encoded sorted sets

This commit is contained in:
Pieter Noordhuis
2011-03-09 13:16:38 +01:00
parent a3886e29a6
commit efc77ad91c

View File

@ -326,24 +326,33 @@ int rdbSaveObject(FILE *fp, robj *o) {
redisPanic("Unknown set encoding"); redisPanic("Unknown set encoding");
} }
} else if (o->type == REDIS_ZSET) { } else if (o->type == REDIS_ZSET) {
/* Save a set value */ /* Save a sorted set value */
zset *zs = o->ptr; if (o->encoding == REDIS_ENCODING_ZIPLIST) {
dictIterator *di = dictGetIterator(zs->dict); size_t l = ziplistBlobLen((unsigned char*)o->ptr);
dictEntry *de;
if ((n = rdbSaveLen(fp,dictSize(zs->dict))) == -1) return -1; if ((n = rdbSaveRawString(fp,o->ptr,l)) == -1) return -1;
nwritten += n;
while((de = dictNext(di)) != NULL) {
robj *eleobj = dictGetEntryKey(de);
double *score = dictGetEntryVal(de);
if ((n = rdbSaveStringObject(fp,eleobj)) == -1) return -1;
nwritten += n; nwritten += n;
if ((n = rdbSaveDoubleValue(fp,*score)) == -1) return -1; } else if (o->encoding == REDIS_ENCODING_RAW) {
zset *zs = o->ptr;
dictIterator *di = dictGetIterator(zs->dict);
dictEntry *de;
if ((n = rdbSaveLen(fp,dictSize(zs->dict))) == -1) return -1;
nwritten += n; nwritten += n;
while((de = dictNext(di)) != NULL) {
robj *eleobj = dictGetEntryKey(de);
double *score = dictGetEntryVal(de);
if ((n = rdbSaveStringObject(fp,eleobj)) == -1) return -1;
nwritten += n;
if ((n = rdbSaveDoubleValue(fp,*score)) == -1) return -1;
nwritten += n;
}
dictReleaseIterator(di);
} else {
redisPanic("Unknown sorted set enoding");
} }
dictReleaseIterator(di);
} else if (o->type == REDIS_HASH) { } else if (o->type == REDIS_HASH) {
/* Save a hash value */ /* Save a hash value */
if (o->encoding == REDIS_ENCODING_ZIPMAP) { if (o->encoding == REDIS_ENCODING_ZIPMAP) {