博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
道破Redis的VM
阅读量:5796 次
发布时间:2019-06-18

本文共 1808 字,大约阅读时间需要 6 分钟。

原创文章是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已经指出的精髓,明白了吧?

版权声明:本文博客原创文章。博客,未经同意,不得转载。

你可能感兴趣的文章
自动化部署之jenkins发布PHP项目
查看>>
C/C++编程可用的Linux自带工具
查看>>
三种数据分析法提升电商运营
查看>>
哪个线程执行 CompletableFuture’s tasks 和 callbacks?
查看>>
《数据科学与大数据分析——数据的发现 分析 可视化与表示》一2.10 练习
查看>>
Oracle ASM 翻译系列第六弹:高级知识 如何映射asmlib管理的盘到它对应的设备名...
查看>>
多线程之volatile关键字
查看>>
如何判断webview是不是滑到底部
查看>>
Raptor实践2——控制结构
查看>>
Smartisan OS一步之自定义拖拽内容
查看>>
海贼王十大悲催人物
查看>>
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 搞定!
查看>>
热点热词新闻资讯API开放接口(永久免费开放)
查看>>
【第二章】 IoC 之 2.2 IoC 容器基本原理 —— 跟我学Spring3
查看>>
8.1_Linux习题和作业
查看>>
我的友情链接
查看>>
11.排序算法_6_归并排序
查看>>
Redis redis-cli 命令列表
查看>>
.NET框架设计—常被忽视的框架设计技巧
查看>>
ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
查看>>