Redis流行的原因( 四 )
判断是否开启了AOF
- 是:则通过loadAppendOnlyFile() 加载AOF文件
- 否:通过rdbLoad() 加载RDB文件
/* Replay the append log file. On success C_OK is returned. On non fatal * error (the append only file is zero-length) C_ERR is returned. On * fatal error an error message is logged and the program exists. */int loadAppendOnlyFile(char *filename) {struct client *fakeClient;FILE *fp = fopen(filename,"r");....../* Check if this AOF file has an RDB preamble. In that case we need to* load the RDB file and later continue loading the AOF tail. */char sig[5]; /* "REDIS" */if (fread(sig,1,5,fp) != 5 || memcmp(sig,"REDIS",5) != 0) {/* No RDB preamble, seek back at 0 offset. */if (fseek(fp,0,SEEK_SET) == -1) goto readerr;} else {/* RDB preamble. Pass loading the RDB functions. */rio rdb;serverLog(LL_NOTICE,"Reading RDB preamble from AOF file...");if (fseek(fp,0,SEEK_SET) == -1) goto readerr;rioInitWithFile(if (rdbLoadRio(goto readerr;} else {serverLog(LL_NOTICE,"Reading the remaining AOF tail...");}}/* Read the actual AOF file, in REPL format, command by command. */while(1) {int argc, j;unsigned long len;robj **argv;char buf[128];sds argsds;struct redisCommand *cmd;/* Serve the clients from time to time */if (!(loops++ % 1000)) {loadingProgress(ftello(fp));processEventsWhileBlocked();}if (fgets(buf,sizeof(buf),fp) == NULL) {if (feof(fp))break;elsegoto readerr;}......}......}
通过读取AOF文件的前5个字符来判断是否是RDB+AOF混合模式- 是:则先加载RDB数据(二进制数据) , 再一条一条的加载AOF数据(RESP协议格式数据)
- 否:一条一条的加载AOF数据(RESP协议格式数据)
文章插图
小结至于Redis为什么是最流行的键值对存储数据库 , 仁者见仁智者见智 。
个人认为 , 总结几点:
- 是开源的(节约企业自研成本)
- 数据类型丰富(不仅仅是单纯的k-v)
- 处理速度快(单机读写10W+左右)
- 支持数据持久化
- 多种语言API支持
推荐阅读
- 央行的“硬钱包”来势汹汹,支付不再需要手机?支付宝、微信慌了
- 为何日本实体店能“干倒”电商,中国实体店却不行?原因值得深思
- 为什么苹果用户哪怕买二手机,都不用安卓?三点原因太真实
- 罕见力挺!爱立信:继续禁用华为5G将撤出瑞典!背后有2大原因
- iPhone 12信号差真实原因曝光:不是基带问题
- 手机网速慢?多半是这4个原因造成的,教你一招提升网速
- 2021年第一个大乌龙!腾讯华为深夜和好,“分手”原因很现实
- 别让老人的手机成静音的摆设
- 微信上线「出行服务」,腾讯补足智慧出行的最后一环?
- 为什么商家害怕别人把手机放在称上?什么原因只有同行才知道