mirror of
https://github.com/fluencelabs/redis
synced 2025-06-28 00:11:33 +00:00
Persistence code for encoded sorted sets
This commit is contained in:
37
src/rdb.c
37
src/rdb.c
@ -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) {
|
||||||
|
Reference in New Issue
Block a user