點破Redis的VM,點破RedisVM

來源:互聯網
上載者:User

點破Redis的VM,點破RedisVM

本文原創為freas_1990,轉載請表明出處:http://blog.csdn.net/freas_1990/article/details/42052813



Redis的某一個key的value被swap到檔案上的時候,該key的value指向的RedisObject將會改變成VMPointer,VMPointer儲存了該value在磁碟檔案上的資訊,包括起始頁面的位移和連續的頁面數等。


typedef struct redisObject {    unsigned type:4;    unsigned storage:2;     /* REDIS_VM_MEMORY or REDIS_VM_SWAPPING */    unsigned encoding:4;    unsigned lru:22;        /* lru time (relative to server.lruclock) */    int refcount;    void *ptr;    /* VM fields are only allocated if VM is active, otherwise the     * object allocation function will just allocate     * sizeof(redisObjct) minus sizeof(redisObjectVM), so using     * Redis without VM active will not have any overhead. */} robj;


typedef struct vmPointer {    unsigned type:4;    unsigned storage:2; /* REDIS_VM_SWAPPED or REDIS_VM_LOADING */    unsigned notused:26;    unsigned int vtype; /* type of the object stored in the swap file */    off_t page;         /* the page at witch the object is stored on disk */    off_t usedpages;    /* number of pages used on disk */} vmpointer;

將該key的value匯入記憶體的邏輯如下:

robj *vmReadObjectFromSwap(off_t page, int type) {    robj *o;    if (server.vm_enabled) pthread_mutex_lock(&server.io_swapfile_mutex);    if (fseeko(server.vm_fp,page*server.vm_page_size,SEEK_SET) == -1) {        redisLog(REDIS_WARNING,            "Unrecoverable VM problem in vmReadObjectFromSwap(): can't seek: %s",            strerror(errno));        _exit(1);    }    o = rdbLoadObject(type,server.vm_fp);    if (o == NULL) {        redisLog(REDIS_WARNING, "Unrecoverable VM problem in vmReadObjectFromSwap(): can't load object from swap file: %s", strerror(errno));        _exit(1);    }    if (server.vm_enabled) pthread_mutex_unlock(&server.io_swapfile_mutex);    return o;}

到這裡,redis VM的精髓已經點破了,懂了吧?


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.