《一個小改進(jìn),解決Redis數(shù)據(jù)在線加載大痛點(diǎn)》要點(diǎn):
本文介紹了一個小改進(jìn),解決Redis數(shù)據(jù)在線加載大痛點(diǎn),希望對您有用。如果有疑問,可以聯(lián)系我們。
作者介紹
顧偉濤,曾任職于百度、奇虎360,現(xiàn)為杭州銘師堂教育資深DBA,擅長數(shù)據(jù)庫監(jiān)控、備份、高可用架構(gòu)設(shè)計和自動化運(yùn)維,對Redis和MongoDB方面有深入研究,關(guān)注分布式存儲、大數(shù)據(jù)存儲、消息隊列、搜索引擎等后端技術(shù).
在使用Redis加載數(shù)據(jù)過程中存在一個問題,就是必須要重啟Redis服務(wù),如果是Redis主從復(fù)制架構(gòu),這樣加載數(shù)據(jù),是一件很麻煩的事情,筆者根據(jù)Redis啟動時加載數(shù)據(jù)的思想,對Redis進(jìn)行了改進(jìn),實(shí)現(xiàn)了在線加載數(shù)據(jù),在這里和大家一起探討下.
本文以Redis 3.0.7為例,根據(jù)Redis在啟動過程中,加載數(shù)據(jù)的邏輯,為Redis增加了2個命令,分別為LOADAOF和LOADRDB,分別實(shí)現(xiàn)在線加載aof和rdb文件.
在執(zhí)行 LOADAOF aofile時候,調(diào)用 loadAppendOnlyFile函數(shù),加載aof文件數(shù)據(jù).具體實(shí)現(xiàn)如下:
src/aof.c
新增如下函數(shù):
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); } } |
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4292.html