《一個小改進,解決Redis數據在線加載大痛點》要點:
本文介紹了一個小改進,解決Redis數據在線加載大痛點,希望對您有用。如果有疑問,可以聯系我們。
作者介紹
顧偉濤,曾任職于百度、奇虎360,現為杭州銘師堂教育資深DBA,擅長數據庫監控、備份、高可用架構設計和自動化運維,對Redis和MongoDB方面有深入研究,關注分布式存儲、大數據存儲、消息隊列、搜索引擎等后端技術.
在使用Redis加載數據過程中存在一個問題,就是必須要重啟Redis服務,如果是Redis主從復制架構,這樣加載數據,是一件很麻煩的事情,筆者根據Redis啟動時加載數據的思想,對Redis進行了改進,實現了在線加載數據,在這里和大家一起探討下.
本文以Redis 3.0.7為例,根據Redis在啟動過程中,加載數據的邏輯,為Redis增加了2個命令,分別為LOADAOF和LOADRDB,分別實現在線加載aof和rdb文件.
在執行 LOADAOF aofile時候,調用 loadAppendOnlyFile函數,加載aof文件數據.具體實現如下:
src/aof.c
新增如下函數:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void loadaofCommand(RedisClient *c) { if (server.rdb_child_pid != -1) { addReplyError(c,"Background save already in progress"); } else if (server.aof_child_pid != -1) { addReplyError(c,"Can't BGSAVE while AOF log rewriting is in progress"); } else if (c->argc != 2){ addReply(c,shared.syntaxerr); return; } else if (loadAppendOnlyFile(c->argv[1]->ptr) == REDIS_OK) { addReplyStatus(c,"online loadaof started,Do not repeat!!!"); } else { addReply(c,shared.err); } } |
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4292.html