redis鐨勫嚑涓煡璇嗙偣

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis鐨勫嚑涓煡璇嗙偣相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/fsync' title='fsync'>fsync   璺熻釜   continue   reids   redo log   杩囨湡   閲嶅啓   姣旇緝   鍦烘櫙   

Redis鐨勫叏绉版槸Remote Dictionary Server锛屽嵆杩滅▼瀛楀吀鏈嶅姟锛岄€氬父鐢ㄤ綔鏈嶅姟鍣ㄧ紦瀛樻湇鍔°€?/p>

杩欓噷閫氳繃Redis鐨勫嚑涓煡璇嗙偣鏉ヤ簡瑙edis銆?/p>

Redis鐨勯€氳鍗忚

Redis鐨勯€氳鍗忚鏄枃鏈崗璁紝鏄殑锛孯edis鏈嶅姟鍣ㄤ笌瀹㈡埛绔€氳繃RESP锛圧edis Serialization Protocol銆丷edis搴忓垪鍖栧崗璁級杩涜閫氫俊銆?/p>

铏界劧鏂囨湰鍗忚浼氭氮璐规祦閲忥紝涓嶈繃瀹冪殑浼樼偣鍦ㄤ簬鐩磋锛岄潪甯稿緱绠€鍗曪紝瑙f瀽鎬ц兘鏋佸叾濂斤紝鎵€浠ユ垜浠笉闇€瑕佷竴涓壒娈婄殑Redis瀹㈡埛绔紝浠呴潬Telnet鎴栬€呮槸鏂囨湰娴佸氨鍙互璺烺edis杩涜閫氳銆?/p>

瀹㈡埛绔殑鍛戒护鏍煎紡

1.绠€鍗曞瓧绗︿覆Simple Strings锛屼互鍔犲彿銆?銆戝紑澶淬€?/p>

2.閿欒Errors锛屼互鍑忓彿銆?銆戝紑澶淬€?/p>

3.鏁存暟鍨婭nteger锛屼互鍐掑彿銆?銆戝紑澶淬€?/p>

4.澶у瓧绗︿覆绫诲瀷Bulk Strings锛屼互缇庡厓绗﹀彿銆?銆戝紑澶淬€?/p>

5.鏁扮粍绫诲瀷Arrays锛屼互鏄熷彿銆?銆戝紑澶淬€?/p>

鍥犱负閫氳鍗忚鏄枃鏈崗璁繖涓€鐗规€э紝涓€涓畝鍗曠殑鏂囨湰娴佸氨鍙互鏄疪edis鐨勫鎴风銆?/p>

public static void set() throws UnknownHostException, IOException {
    Socket socket = new Socket("127.0.0.1", 8080);
    OutputStream os = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    // set hello
    os.write("*3
".getBytes());
    os.write("$3
".getBytes());
    os.write("set
".getBytes());
    os.write("$5
".getBytes());
    os.write("hello
".getBytes());
    int num = 0;
    char ch;
    while ((num = br.read()) != -1) {
        ch = (char)num;
        System.out.println(ch);
    }
    socket.close();
}

杩欓噷鏄畝鍗曠殑鎬荤粨锛屽叿浣撳彲浠ュ弬鑰冨畼鏂规枃妗o細https://redis.io/topics/protocol銆?/p>

鎴戠殑鐞嗚В灏辨槸锛孯edis閲囩敤RESP鏂囨湰鍗忚鏈€閲嶈鐨勪笁鐐癸細绠€鍗曠殑瀹炵幇銆佸揩閫熺殑瑙f瀽鍜岀洿瑙傜殑鐞嗚В銆傝櫧鐒舵枃鏈崗璁彲鑳戒細閫犳垚涓€瀹氱▼搴︾殑娴侀噺娴垂锛屼絾鏄湪鎬ц兘涓婂拰鎿嶄綔涓婂嵈蹇€熺畝鍗曪紝杩欎腑闂翠篃鏄湁涓€涓潈琛″拰鍗忚皟鐨勮繃绋嬨€?/p>

Reids鐨勪簨鍔?/strong>

Redis鏄湁浜嬪姟鐨勶紝骞朵笖鍐呯疆浜嗕竴浜涗簨鍔$浉鍏崇殑鍛戒护銆?/p>

鍛戒护 鎻忚堪
exec 鎵ц鎵€鏈変簨鍔″潡鍐呯殑鍛戒护銆?/td>
watch 鐩戣涓€涓紙鎴栧涓級key锛屽鏋滃湪浜嬪姟鎵ц涔嬪墠杩欎釜锛堟垨杩欎簺锛塳ey琚叾浠栧懡浠ゆ墍鏀瑰姩锛岄偅涔堜簨鍔″皢琚墦鏂€?/td>
discard 鍙栨秷浜嬪姟锛屾斁寮冩墽琛屼簨鍔″潡鍐呯殑鎵€鏈夊懡浠ゃ€?/td>
unwatch 鍙栨秷watch鍛戒护瀵规墍鏈塳ey鐨勭洃瑙嗐€?/td>
multi 鏍囪涓€涓簨鍔″潡鐨勫紑濮嬨€?/td>

鎴戜滑鐭ラ亾锛屼紶缁熺殑鏁版嵁搴撶殑浜嬪姟涓€鑸叿鏈夊洓涓壒鎬э紝鍗矨CID锛堝師瀛愭€с€佷竴鑷存€с€侀殧绂绘€у拰鎸佷箙鎬э級锛岀劧鍚庢垜浠彲浠ヤ娇鐢ㄤ笂闈㈢殑Redis浜嬪姟鐩稿叧鍛戒护鏉ユ楠孯edis鏄惁閮藉叿澶囦簡杩欎簨鍔$殑鍥涗釜鐗规€с€?/p>

鍘熷瓙鎬?/span>

浜嬪姟鍏峰鍘熷瓙鎬ф槸鎸囨暟鎹簱灏嗕簨鍔′腑鐨勫涓搷浣滃綋浣滀竴涓暣浣撴潵鎵ц锛屾湇鍔¤涔堟墽琛屼簨鍔′腑鎵€鏈夌殑鎿嶄綔锛岃涔堜竴涓搷浣滀篃涓嶆墽琛屻€?/p>

1.浜嬪姟鎿嶄綔闃熷垪

Redis涓€鏃﹀紑濮嬫墽琛屼簨鍔″紑濮嬪懡浠ulti涔嬪悗锛屽氨浼氫负杩欎釜浜嬪姟鐢熸垚涓€涓槦鍒楋紝姣忔鎿嶄綔鐨勫懡浠ら兘浼氭寜鐓ч『搴忔彃鍏ュ埌杩欎釜闃熷垪涓€傝繖涓槦鍒椾腑鐨勬搷浣滃懡浠や笉浼氳椹笂鎵ц锛岀洿鍒版墽琛宔xec鍛戒护鎻愪氦浜嬪姟鐨勬椂鍊欙紝闃熷垪閲岄潰鐨勬墍鏈夋搷浣滃懡浠ゆ墠浼氳涓€娆℃€т笖鎺掍粬鍦版墽琛屻€?/p>

鎶€鏈浘鐗? src=

浠庝笂闈㈢殑渚嬪瓙涓彲浠ョ湅鍑猴紝褰撴墽琛屼竴涓垚鍔熺殑浜嬪姟锛屼簨鍔¢噷闈㈢殑鍛戒护閮芥槸鎸夌収闃熷垪閲岄潰鎸夐『搴忓苟涓旀帓浠栧湴鎵ц銆?/p>

2.Reids涓嶆敮鎸佸洖婊?/strong>

鍘熷瓙鎬х殑鐗规€ф槸瑕佷箞鍏ㄩ儴鎴愬姛锛岃涔堝叏閮ㄥけ璐ワ紝涓€鏃︿簨鍔′腑鏈変竴涓搷浣滃け璐ヤ簡锛岄偅涔堜箣鍓嶆垚鍔熺殑鎿嶄綔鍏ㄩ儴浼氬洖婊氥€?/p>

鎴戜滑鎵ц涓€涓け璐ョ殑浜嬪姟锛屽氨浼氬彂鐜癛edis骞朵笉浼氬洖婊氫箣鍓嶆垚鍔熺殑鎿嶄綔锛屽洜姝や粠涓ユ牸鎰忎箟涓婃潵璇碦edis骞朵笉鍏峰鍘熷瓙鎬с€?/p>

杩欏拰Redis鐨勫畾浣嶅拰璁捐鏈夊叧绯汇€?/p>

瀵规瘮MySQL锛孧ySQL鏀寔鍥炴粴鏄洜涓篗ySQL鏈夊畬鏁寸殑Redo Log锛屽苟涓旀槸鍦ㄤ簨鍔¤繘琛孋ommit涔嬪墠灏变細鍐欏畬Redo Log銆?/p>

鎶€鏈浘鐗? src=

浣嗘槸瑕佺煡閬揗ySQL涓轰簡鑳藉杩涜鍥炴粴鑺变簡涓嶅皯鐨勬€ц兘浠d环銆?/p>

鑰孯edis鏄畬鎴愭搷浣滀箣鍚庢墠浼氳繘琛孉OF鏃ュ織璁板綍锛岃€孉OF鏃ュ織鐨勫畾浣嶅彧鏄褰曟搷浣滅殑鎸囦护璁板綍銆傚疄闄呬笂锛孯edis搴旂敤鐨勫満鏅洿澶氱殑鏄鎶楅珮骞跺彂鐨勯珮鎬ц兘锛屽洜姝edis閫夋嫨浜嗘洿涓虹畝鍗曪紝鏇村揩閫熸棤鍥炴粴鐨勬柟寮忓鐞嗕簨鍔′篃鏄鍚堝満鏅殑銆?/p>

涓€鑷存€?/span>

浜嬪姟鍏峰涓€鑷存€ф寚鐨勬槸锛屽鏋滄暟鎹湪鎵ц浜嬪姟涔嬪墠鏄竴鑷寸殑锛岄偅涔堝湪浜嬪姟鎵ц瀹屾垚涔嬪悗锛屾棤璁轰簨鍔℃槸鍚︽垚鍔燂紝鏁版嵁涔熷簲璇ユ槸涓€鑷寸殑銆?/p>

瀵筊edis鏉ヨ锛屼竴鑷存€у彲浠ヤ粠涓や釜灞傞潰鏉ョ湅銆備竴涓槸鎵ц閿欒鏄惁鏈夌‘淇濅竴鑷存€э紱鍙︿竴涓槸瀹曟満鏃讹紝Redis鏄惁鏈夌‘淇濅竴鑷存€х殑鏈哄埗銆?/p>

1.鎵ц閿欒鏄惁鏈夌‘淇濅竴鑷存€?/strong>

鍋囪浜嬪姟涓湁涓や釜鎿嶄綔锛屼竴涓槸灏嗘潹鏉ㄧ殑浣欓澧炲姞100锛岄潤闈欑殑浣欓鍑忓皯100锛岃繖涓や釜鎿嶄綔瀹屾垚涓€涓€愰潤闈欑粰鏉ㄦ潹杞处100銆戠殑浜嬪姟銆傞偅涔堬紝褰撴搷浣滀竴鎴愬姛浜嗭紝鑰屾搷浣滀簩澶辫触浜嗭紝鎴愬姛鐨勬搷浣滀竴骞朵笉浼氬洖婊氾紝杩欏氨瀵艰嚧鏉ㄦ潹鐨勪綑棰濆鍔犱簡100锛岃€岄潤闈欑殑浣欓鍗存病鏈夊噺灏?00锛屾暟鎹篃灏变笉涓€鑷翠簡銆傚洜姝edis瀵规墽琛岄敊璇苟娌℃湁纭繚涓€鑷存€х殑鏈哄埗锛屽彲浠ヨRedis骞舵病鏈夋敮鎸佷簨鍔$殑涓€鑷存€с€?/p>

2.瀹曟満瀵逛竴鑷存€х殑褰卞搷

鏆備笉鑰冭檻鍒嗗竷寮忛珮鍙敤鐨凴edis瑙e喅鏂规锛屽厛浠庡崟鏈虹湅瀹曟満鎭㈠鏄惁鑳芥弧瓒虫暟鎹畬鎴愭€х害鏉熴€傚洜涓篟edis鏀寔灏嗘暟鎹寔涔呭寲鍒扮鐩橈紝瀹曟満鍚庡彲浠ヤ粠纾佺洏鎭㈠鏁版嵁銆傜劧鑰屾棤璁烘槸RDB杩樻槸AOF鏂规鍘绘仮澶嶆暟鎹紝閮藉彧鑳芥仮澶嶅埌瀹曟満鍓嶇殑鎿嶄綔锛屽氨鍍忓墠闈㈢殑鎵ц閿欒涓€鏍凤紝骞朵笉浼氬皢瀹曟満鍓嶅睘浜庡悓涓€涓簨鍔′腑鎴愬姛鐨勬搷浣滃洖婊氥€傛鏄洜涓篟edis骞朵笉鏀寔鍥炴粴锛屼篃灏变笉鍏峰浼犵粺鎰忎箟涓婄殑鍘熷瓙鎬э紝鍥犳涔熶笉鍏峰浼犵粺鎰忎箟鐨勪竴鑷存€с€?/p>

闅旂鎬?/span>

闅旂鎬ф寚鐨勬槸锛屾暟鎹簱鏈夊涓簨鍔″苟鍙戠殑鎵ц锛屽悇涓簨鍔′箣闂翠笉浼氱浉浜掑奖鍝嶏紝骞朵笖鍦ㄥ苟鍙戠姸鎬佷笅鎵ц鐨勪簨鍔″拰涓茶鎵ц鐨勪簨鍔′骇鐢熺殑缁撴灉鏄畬鍏ㄧ浉鍚岀殑銆?/p>

Redis鍥犱负鏄崟绾跨▼鎿嶄綔锛屾墍浠ュ湪闅旂鎬т笂鏈夊ぉ鐢熺殑闅旂鏈哄埗锛屽綋Redis鎵ц浜嬪姟鐨勬椂鍊欙紝Redis鐨勬湇鍔$淇濊瘉鍦ㄦ墽琛屼簨鍔℃湡闂翠笉浼氬浜嬪姟杩涜涓柇锛屾墍浠edis浜嬪姟鎬绘槸浠ヤ覆琛岀殑鏂瑰紡杩愯锛屼簨鍔′篃鍏峰闅旂鎬с€?/p>

鎸佷箙鎬?/span>

浜嬪姟鐨勬寔涔呮€ф槸鎸囷紝褰撲竴涓簨鍔℃墽琛屽畬姣曪紝鎵ц杩欎釜浜嬪姟鎵€寰楀埌鐨勭粨鏋滀細琚案涔呭湴淇濆瓨鍦ㄦ寔涔呭寲鐨勭鐩樺瓨鍌ㄤ腑锛屽嵆浣挎湇鍔″櫒鍦ㄤ簨鍔℃墽琛屽畬姣曚箣鍚庡畷鏈轰簡锛屾墽琛岀殑浜嬪姟鐨勭粨鏋滀篃涓嶄細涓㈠け銆傝€孯edis鏄惁鍏峰鎸佷箙鍖栵紝鍙栧喅浜嶳edis鐨勬寔涔呭寲妯″紡锛堜笁绉嶈繍琛屾ā寮忥級锛?/p>

1.绾补鐨勫唴瀛樿繍琛岋紝涓嶅叿澶囨寔涔呭寲鍔熻兘銆傝繖鏍风殑璇濓紝涓€鏃︽湇鍔″畷鏈猴紝鎵€鏈夋暟鎹兘浼氫涪澶憋紙鍐呭瓨涓殑鏁版嵁浼氬洜涓烘湇鍔″櫒鍋滄杩愯鑰屽叏閮ㄦ竻绌猴級銆?/p>

2.RDB妯″紡杩愯銆傝繖涓€妯″紡鍙栧喅浜嶳DB绛栫暐锛屽彧鏈夊湪婊¤冻绛栫暐鐨勬儏鍐典笅鎵嶄細鎵цBgsave锛屽紓姝ユ墽琛屽苟涓嶈兘淇濊瘉Redis鍏峰鎸佷箙鍖栥€?/p>

3.AOF妯″紡杩愯銆傝繖涓€妯″紡涓嬪彧鏈夊皢appendfsync灞炴€ц缃负always锛岀▼搴忔墠浼氬湪鎵ц鍛戒护鐨勬椂鍊欏皢鏁版嵁鍚屾淇濆瓨鍒扮鐩樸€?/p>

Redis鐨勬寔涔呭寲

Redis鏈変袱绉嶆寔涔呭寲鏈哄埗锛屼竴涓槸RDB锛屼篃灏辨槸蹇収锛屽揩鐓у氨鏄竴娆″叏閲忕殑澶囦唤锛屼細鎶婃墍鏈塕eids鐨勫唴瀛樻暟鎹繘琛屼簩杩涘埗鐨勫簭鍒楀寲瀛樺偍鍒扮鐩橈紱鍙︿竴绉嶆槸AOF鏃ュ織锛孉OF鏃ュ織璁板綍鐨勬槸鏁版嵁搴撴搷浣滀慨鏀圭殑鎸囦护璁板綍鏃ュ織锛屽彲浠ョ被姣擬ySQL鐨凚inLog锛孉OF鏃ュ織闅忕潃鏃堕棿鐨勬帹绉诲彧浼氭棤闄愬閲忋€?/p>

鍦ㄥRedis杩涜鎭㈠鐨勬椂鍊欙紝RDB蹇収鐩存帴璇诲彇纾佺洏鍗冲彲鎭㈠锛岃€孉OF闇€瑕佸鎵€鏈夌殑鎿嶄綔鎸囦护杩涜閲嶆斁鍜屾仮澶嶏紝杩欎釜杩囩▼鍙兘闈炲父婕暱銆?/p>

鎶€鏈浘鐗? src=

1.RDB鎸佷箙鍖栨満鍒?/span>

Redis鍦ㄨ繘琛孯DB鐨勫揩鐓х敓鎴愭湁涓ょ鏂规硶锛屼竴绉嶆槸save锛屼竴绉嶆槸bgsave銆傜敱浜嶳edis鏄崟杩涚▼鍗曠嚎绋嬶紝濡傛灉鐩存帴浣跨敤save鐨勮瘽锛屼細杩涜涓€涓簽澶х殑鏂囦欢IO鎿嶄綔闃诲绾夸笂鐨勪笟鍔★紝鍥犳涓€鑸笉浼氱洿鎺ラ噰鐢╯ave鑰屾槸閲囩敤bgsave銆傚湪浣跨敤basave鐨勬椂鍊欙紝Redis浼歠ork涓€涓瓙杩涚▼锛屽揩鐓х殑鎸佷箙鍖栧氨浜ょ粰杩欎釜瀛愯繘绋嬪幓澶勭悊锛岃€岀埗杩涚▼缁х画澶勭悊绾夸笂涓氬姟鐨勮姹傘€?/p>

fork鏈哄埗鏄痩inux鎿嶄綔绯荤粺鐨勪竴涓繘绋嬫満鍒讹紝褰撶埗杩涚▼fork鍑烘潵涓€涓瓙杩涚▼锛屽瓙杩涚▼鍜岀埗杩涚▼鎷ユ湁鍏卞悓鐨勫唴瀛樻暟鎹粨鏋勶紝瀛愯繘绋嬪垰鍒氫骇鐢熸椂锛屽畠鍜岀埗杩涚▼鍏变韩鍐呭瓨閲岄潰鐨勪唬鐮佹鍜屾暟鎹銆?/p>

鎶€鏈浘鐗? src=

涓€寮€濮嬩袱涓繘绋嬮兘鍏峰浜嗙浉鍚岀殑鍐呭瓨娈碉紝瀛愯繘绋嬪湪鍋氭暟鎹寔涔呭寲鐨勬椂鍊欙紝涓嶄細鍘讳慨鏀圭幇鍦ㄧ殑鍐呭瓨鏁版嵁锛岃€屾槸浼氶噰鐢–OW锛圕opy on Write锛夌殑鏂瑰紡灏嗘暟鎹椤甸潰杩涜鍒嗙銆傚綋鐖惰繘绋嬩慨鏀逛簡鏌愪竴涓暟鎹鏃讹紝琚叡浜殑椤甸潰灏变細澶嶅埗涓€浠藉垎绂诲嚭鏉ワ紝鐒跺悗鐖惰繘绋嬪啀鍦ㄦ柊鐨勬暟鎹杩涜淇敼銆傝繖涓繃绋嬩篃绉颁负鍒嗚鐨勮繃绋嬶紝鏈潵鐖跺瓙杩涚▼閮芥寚鍚戝緢澶氱浉鍚岀殑鍐呭瓨鍧楋紝浣嗘槸濡傛灉鐖惰繘绋嬪鍏朵腑鏌愪釜鍐呭瓨鍧楄繘琛屼慨鏀癸紝灏变細灏嗗叾澶嶅埗鍑烘潵锛岃繘琛屽垎瑁傚啀鍦ㄦ柊鐨勫唴瀛樺潡涓婅繘琛屼慨鏀广€傚洜涓哄瓙杩涚▼鍦╢ork鐨勬椂鍊欏氨鍙互鍥哄畾鍐呭瓨锛岃繖涓椂闂寸偣鐨勬暟鎹皢涓嶄細浜х敓鍙樺寲銆傛墍浠ユ垜浠彲浠ュ畨蹇冨湴浜х敓蹇収鑰屼笉鐢ㄦ媴蹇冨揩鐓х殑鍐呭鍙楀埌鐖惰繘绋嬩笟鍔¤姹傜殑褰卞搷銆?/p>

2.AOF鎸佷箙鍖栨満鍒?/span>

AOF鏄疪edis鎿嶄綔鎸囦护鐨勬棩蹇楀瓨鍌ㄣ€傜被浼间簬MySQL鐨凚inlog銆傚亣璁続OF浠嶳edis鍒涘缓浠ユ潵灏变竴鐩存墽琛岋紝閭d箞AOF灏辫褰曚簡鎵€鏈夌殑Redis鎸囦护鐨勮褰曘€傚鏋滆鎭㈠Redis锛屽彲浠ュAOF杩涜鎸囦护閲嶆斁锛屼究鍙慨澶嶆暣涓猂edis瀹炰緥銆?/p>

涓嶈繃AOF鏃ュ織涔熸湁涓や釜姣旇緝澶х殑闂銆備竴涓棶棰樻槸AOF鏃ュ織浼氶殢鐫€鏃堕棿閫掑锛屽鏋滄暟鎹噺澶с€佹搷浣滈绻佸拰杩愯鐨勬椂闂撮暱锛孉OF鏃ュ織閲忓氨浼氬紓甯稿簽澶с€傚彟涓€涓棶棰樻槸AOF鍦ㄥ仛鏁版嵁鎭㈠鐨勬椂鍊欙紝濡傛灉鏃ュ織閲忓緢澶э紝閲嶆斁鐨勯噺灏变細寰堝ぇ锛屽垯鏁版嵁鎭㈠鐨勬椂闂村氨浼氶潪甯搁暱銆?/p>

AOF鐨勫啓鎿嶄綔鏄湪Redis澶勭悊瀹屼笟鍔¢€昏緫涔嬪悗锛屾寜鐓т竴瀹氱殑绛栫暐鎵嶄細杩涜AOF鏃ュ織瀛樼洏锛岃繖鐐硅窡MySQL鐨凴edolog鍜孊inlog鏈夊緢澶х殑涓嶅悓銆傝繖鏍凤紝Redis鍥犱负澶勭悊閫昏緫鍦ㄥ墠鑰岃褰曟搷浣滄棩蹇楀湪鍚庯紝瀵艰嚧浜哛edis鏃犳硶鍥炴粴銆?/p>

鍙﹀锛孯edis鍦?.4鐨勭増鏈箣鍚庝娇鐢ㄤ簡bgrewriteaof瀵笰OF鏃ュ織杩涜鐦﹁韩銆俠grewriteaof鍛戒护鐢ㄤ簬寮傛鍙兘澶熶竴涓狝OF鏂囦欢閲嶅啓鎿嶄綔锛岄噸鍐欎細鍒涘缓涓€涓綋鍓岮OF鏂囦欢鐨勪綋绉紭鍖栫増鏈€?/p>

3.RDB鍜孉OF娣峰悎鎼厤鎸佷箙鍖栨ā寮?/span>

鍦ㄥRedis杩涜鎭㈠鐨勬椂鍊欙紝濡傛灉鎴戜滑閲囩敤浜哛DB鏈哄埗锛宐gsave鐨勭瓥鐣ュ彲鑳戒細瀵艰嚧鎴戜滑涓㈠け澶ч噺鐨勬暟鎹紱濡傛灉鎴戜滑閲囩敤AOF鏈哄埗锛岄€氳繃AOF鎿嶄綔鏃ュ織閲嶆斁鎭㈠锛岄噸鏀続OF鏃ュ織鎭㈠鏁版嵁鑺辫垂鐨勬椂闂存瘮RDB瑕侀暱涔呭緢澶氥€?/p>

鎶€鏈浘鐗? src=

鍦≧edis4.0鐨勭増鏈箣鍚庯紝涓轰簡瑙e喅杩欎釜闂锛屼究寮曞叆浜嗘柊鐨勬寔涔呭寲妯″紡锛屽嵆娣峰悎鎸佷箙鍖栵紝灏哛DB鐨勫叏閲忔枃浠跺拰灞€閮ㄥ閲忕殑AOF鏂囦欢鐩哥粨鍚堛€傝繖鏍凤紝RDB灏卞彲浠ヤ娇鐢ㄧ浉闅旀椂闂磋緝闀跨殑淇濆瓨绛栫暐锛孉OF涔熶笉闇€瑕佹槸鍏ㄩ噺鏃ュ織锛屽彧闇€瑕佷繚瀛樺墠涓€娆DB瀛樺偍寮€濮嬪埌杩欐鏃堕棿澧為噺鐨凙OF鏃ュ織鍗冲彲锛屾瀬澶у湴鍑忓皬浜咥OF鐨勬棩蹇楅噺銆?/p>

Redis鍦ㄥ唴瀛樹娇鐢ㄤ笂鐨勪紭鍖?/strong>

Redis鍜屽叾浠栦紶缁熺殑鏁版嵁搴撲笉鍚岋紝鏄竴涓函鍐呭瓨鐨勬暟鎹簱锛屽苟涓斿瓨鍌ㄧ殑閮芥槸涓€浜涚壒瀹氭暟鎹粨鏋勭殑鏁版嵁锛屽鏋滀笉瀵瑰唴瀛樺姞浠ユ帶鍒剁殑璇濓紝Redis寰堝彲鑳戒細鍥犱负鏁版嵁閲忚繃澶ц€屽鑷寸郴缁熷婧冦€?/p>

1.Ziplist

鎶€鏈浘鐗? src=

褰撴渶寮€濮嬪皾璇曞紑鍚竴涓皬鏁版嵁閲忕殑Hash缁撴瀯鍜屼竴涓猄et缁撴瀯鏃讹紝鍙戠幇瀹冧滑鍦≧edis閲岄潰鐨勭湡姝g粨鏋勬槸涓€涓猌iplist銆俍iplist鏄竴涓揣鍑戠殑鏁版嵁缁撴瀯锛屾瘡涓€涓厓绱犱箣闂撮兘鏄繛缁殑鍐呭瓨锛屽鏋滃湪Redis涓璕edis鍚敤鐨勬暟鎹粨鏋勬暟鎹噺寰堝皬鏃讹紝Redis灏变細鍒囨崲鍒颁娇鐢ㄧ揣鍑戝瓨鍌ㄧ殑褰㈠紡鏉ヨ繘琛屽帇缂╁瓨鍌ㄣ€?/p>

鎶€鏈浘鐗? src=

渚嬪鍦ㄤ笂闈㈢殑渚嬪瓙涓紝鎴戜滑閲囩敤浜咹ash缁撴瀯杩涜瀛樺偍锛孒ash缁撴瀯鏄竴涓簩缁寸殑缁撴瀯锛屾槸涓€涓吀鍨嬬殑鐢ㄧ┖闂存崲鍙栨椂闂寸殑缁撴瀯銆備絾鏄鏋滀娇鐢ㄧ殑鏁版嵁閲忓緢灏忥紝浣跨敤浜岀淮缁撴瀯鍙嶈€屾氮璐圭┖闂达紝鍦ㄦ椂闂翠笂鐨勬€ц兘涔熷苟娌℃湁寰楀埌澶ぇ鐨勬彁鍗囷紝杩樹笉濡傜洿鎺ヤ娇鐢ㄤ竴缁寸粨鏋勮繘琛屽瓨鍌ㄣ€傚湪鏌ユ壘鐨勬椂鍊欙紝铏界劧澶嶆潅搴︽槸O(n)锛屼絾鏄洜涓烘暟鎹噺灏戯紝閬嶅巻涔熷緢蹇紝鐢氳嚦姣擧ash缁撴瀯鏈韩鐨勬煡璇㈤€熷害杩樺揩銆傚鏋滃綋闆嗗悎瀵硅薄鐨勫厓绱犱笉鏂鍔狅紝鎴栨煇涓獀alue鐨勫€艰繃澶э紝杩欑灏忓璞″瓨鍌ㄤ篃浼氬崌绾ф垚鏍囧噯鐨勭粨鏋勩€?/p>

Redis鍙互鍦ㄩ厤缃腑杩涜绱у噾缁撴瀯鍜屾爣鍑嗙粨鏋勭殑杞崲鍙傛暟锛?/p>

鎶€鏈浘鐗? src=

2.Quicklist

鎶€鏈浘鐗? src=

Quicklist鏁版嵁缁撴瀯鏄疪edis鍦?.2鎵嶅紩鍏ョ殑涓€涓弻鍚戦摼琛ㄧ殑鏁版嵁缁撴瀯锛岀‘瀹炴潵璇存槸涓€涓猌iplist鐨勫弻鍚戦摼琛ㄣ€俀uicklist鐨勬瘡涓€涓暟鎹妭鐐归兘鏄竴涓猌iplist锛岃€孼iplist鏈韩灏辨槸涓€涓揣鍑戝垪琛ㄣ€傚亣濡俀uicklist鍖呭惈浜?涓猌iplist鐨勮妭鐐癸紝姣忎釜Ziplist鍒楄〃鍙堝寘鍚簡5涓暟鎹紝閭d箞鍦ㄥ閮ㄧ湅鏉ワ紝杩欎釜Quicklist灏卞寘鍚簡25涓暟鎹」銆?/p>

鎶€鏈浘鐗? src=

Quicklist鐨勭粨鏋勮璁$畝鍗曟€荤粨璧锋潵锛屾槸涓€涓┖闂村拰鏃堕棿鐨勬姌涓柟妗堛€?/p>

鍙屽悜閾捐〃鍙互鍦ㄤ袱绔繘琛孭ush鍜孭op鎿嶄綔锛屼絾鏄畠鍦ㄦ瘡涓€涓妭鐐归櫎浜嗕繚瀛樿嚜韬殑鏁版嵁澶栵紝杩樿淇濆瓨涓や釜鎸囬拡锛屽鍔犻澶栫殑鍐呭瓨寮€閿€銆?/p>

鍏舵鏄敱浜庢瘡涓妭鐐归兘鏄嫭绔嬬殑锛屽湪鍐呭瓨鍦板潃涓婂苟涓嶈繛缁紝鑺傜偣澶氫簡瀹规槗浜х敓鍐呭瓨纰庣墖銆?/p>

鍙﹀锛孼iplist鏈韩鏄竴鍧楄繛缁殑鍐呭瓨锛屽瓨鍌ㄥ拰鏌ヨ鐨勬晥鐜囧緢楂樸€備絾鏄畠涓嶅埄浜庝慨鏀规搷浣滐紝姣忔鐨勬暟鎹彉鍔ㄩ兘浼氬紩鍙戝唴瀛樼殑Realloc銆傚鏋淶iplist鐨勯暱搴﹀緢闀跨殑璇濓紝涓€娆ealloc浼氬鑷村ぇ鎵归噺鐨勬暟鎹嫹璐濄€?/p>

鎵€浠ワ紝缁撳悎Ziplist鍜屽弻鍚戦摼琛ㄧ殑浼樼偣锛孮uicklist灏卞簲杩愯€岀敓銆?/p>

3.鍐呭瓨鍏变韩

Redis鍦ㄨ嚜宸辩殑瀵硅薄绯荤粺涓瀯寤轰簡涓€涓紩鐢ㄨ鏁扮殑鏂规硶锛岄€氳繃杩欎釜鏂规硶锛岀▼搴忓彲浠ヨ窡韪璞$殑寮曠敤璁℃暟淇℃伅锛岄櫎浜嗗彲浠ュ湪閫傚綋鐨勬椂鍊欒繘琛屽璞¢噴鏀句箣澶栵紝杩樺彲浠ョ敤鏉ヤ綔涓哄璞″叡浜€?/p>

涓句釜渚嬪瓙锛屽亣濡傞敭A鍒涘缓浜嗕竴涓暣鏁板€?00鐨勫瓧绗︿覆浣滀负鍊煎璞★紝杩欎釜鏃跺€欓敭B涔熷垱寤轰繚瀛樺悓鏍锋暣鏁板€?00鐨勫瓧绗︿覆瀵硅薄浣滀负鍊煎璞°€傞偅涔堝湪Reids鎿嶄綔鐨勬椂鍊欙紝浼氬皢鏁版嵁搴撻敭鐨勬寚閽堟寚鍚戜竴涓幇鏈夌殑鍊肩殑瀵硅薄锛屽苟灏嗗叡浜殑鍊煎璞$殑寮曠敤璁℃暟鍔?銆傝繖鏃跺€欙紝鍗充娇鏁版嵁搴撲腑鎸囧悜鏁存暟鍊?00鐨勯敭涓嶆閿瓵鍜岄敭B锛岃€屾槸鏈夊嚑鐧句釜鐨勮瘽锛孯edis涔熷彧闇€瑕佷竴涓瓧绗︿覆瀵硅薄鐨勫唴瀛樺氨鍙互淇濆瓨鍘熸湰闇€瑕佸嚑鐧句釜瀛楃涓插璞℃墠鑳戒繚瀛樼殑鏁版嵁銆?/p>

Redis鐨勮繃鏈熷垹闄ょ瓥鐣?/strong>

褰撲竴涓敭澶勪簬杩囨湡鐨勭姸鎬侊紝鍏跺疄鍦≧edis涓繖涓唴瀛樺苟涓嶆槸瀹炴椂灏辫浠庡唴瀛樹腑鎽橀櫎鐨勶紝鑰屾槸Redis浼氶€氳繃涓€瀹氱殑鏈哄埗鍘绘妸涓€浜涘浜庤繃鏈熺殑閿繘琛岀Щ闄わ紝杩涜€岃揪鍒板唴瀛樼殑閲婃斁銆?/p>

澶勪簬杩囨湡鐘舵€佺殑閿鍒犻櫎鐨勬椂闂村瓨鍦ㄤ笁绉嶅彲鑳芥€э紝杩欎笁绉嶅彲鑳芥€т篃灏变唬琛ㄤ簡Redis鐨勪笁绉嶄笉鍚岀殑鍒犻櫎绛栫暐锛?/p>

1.瀹氭椂鍒犻櫎銆傚畾鏃跺垹闄ゆ槸鍦ㄨ缃敭杩囨湡鏃堕棿鐨勫悓鏃讹紝鍒涘缓涓€涓畾鏃跺櫒锛岃瀹氭椂鍣ㄥ湪閿繃鏈熸椂闂存潵涓寸殑鏃跺€欑珛鍗虫墽琛屽閿殑鍒犻櫎鎿嶄綔銆?/p>

2.鎯版€у垹闄ゃ€傛儼鎬у垹闄ゆ槸鏀句换閿繃鏈熶笉绠★紝涔嬪悗鍦ㄦ瘡娆′粠閿┖闂磋幏鍙栭敭鐨勬椂鍊欏啀鍘绘鏌ヨ閿槸鍚﹁繃鏈燂紝濡傛灉杩囨湡鐨勮瘽灏卞垹闄よ閿€?/p>

3.瀹氭湡鍒犻櫎銆傛瘡闅斾竴娈垫椂闂达紝绋嬪簭閮借瀵规暟鎹簱杩涜涓€娆℃鏌ワ紝鍒犻櫎閲岄潰鐨勮繃鏈熼敭锛岃嚦浜庤鍒犻櫎澶氬皯杩囨湡閿紝鐢辩畻娉曟潵鍐冲畾銆?/p>

瀹氭椂鍒犻櫎

瀹氭椂鍒犻櫎鏄湪璁剧疆閿繃鏈熸椂闂寸殑鍚屾椂锛屽垱寤轰竴涓畾鏃跺櫒锛岃瀹氭椂鍣ㄥ湪閿繃鏈熸椂闂存潵涓寸殑鏃跺€欑珛鍗虫墽琛屽閿殑鍒犻櫎鎿嶄綔銆?/p>

瀹氭椂鍒犻櫎瀵瑰唴瀛樻槸鍙嬪ソ鐨勶紝浣嗘槸瀵笴PU鐨勬椂闂存槸鏈€涓嶅弸濂界殑锛岀壒鍒槸鍦ㄤ笟鍔$箒蹇欙紝杩囨湡閿緢澶氱殑鏃跺€欙紝鍒犻櫎杩囨湡閿繖涓搷浣滀細鍗犳嵁寰堝ぇ涓€閮ㄥ垎CPU鐨勬椂闂淬€傝鐭ラ亾锛孯edis鏄崟绾跨▼鎿嶄綔鐨勶紝鍦ㄥ唴瀛樹笉绱у紶鑰孋PU绱у紶鐨勬椂鍊欙紝灏咰PU鐨勬椂闂存氮璐瑰湪涓庝笟鍔℃棤鍏崇殑鍒犻櫎杩囨湡閿殑鎿嶄綔涓婇潰锛屼細瀵筊eids鐨勬湇鍔″櫒鐨勫搷搴旀椂闂村拰鍚炲悙閲忛€犳垚褰卞搷銆?/p>

鍙﹀锛屽垱寤轰竴涓畾鏃跺櫒闇€瑕佺敤鍒癛edis鏈嶅姟鍣ㄤ腑鐨勬椂闂翠簨浠讹紝鑰屽綋鍓嶆椂闂翠簨浠剁殑瀹炵幇鏂瑰紡鏄棤搴忛摼琛紝鏃堕棿澶嶆潅搴︿负O(n)锛岃鏈嶅姟鍣ㄥぇ閲忓垱寤哄畾鏃跺櫒鍘诲疄鐜板畾鏃跺垹闄ょ瓥鐣ワ紝浼氫骇鐢熻緝澶х殑鎬ц兘褰卞搷銆傛墍浠ワ紝瀹氭椂鍒犻櫎骞朵笉鏄竴绉嶅ソ鐨勭瓥鐣ャ€?/p>

鎯版€у垹闄?/span>

鎯版€у垹闄や笌瀹氭椂鍒犻櫎鐩稿弽锛屽CPU鏉ヨ鏄渶鍙嬪ソ鐨勶紝绋嬪簭鍙湁鍦ㄥ彇鍑洪敭鐨勬椂鍊欐墠浼氳繘琛屾鏌ワ紝鏄竴绉嶈鍔ㄧ殑绛栫暐銆備笌姝ゅ悓鏃讹紝鎯版€у垹闄ゅ鍐呭瓨鏉ヨ鍙堟槸涓嶅弸濂界殑锛屽鏋滀竴涓繃鏈熼敭涓嶅啀琚彇鍑虹殑璇濓紝閭h繖涓敭鍥犱负涓嶄細琚鏌ワ紝涔熷氨姘歌繙涓嶄細琚垹闄わ紝瀹冨崰鐢ㄧ殑鍐呭瓨涔熷氨姘歌繙涓嶄細琚噴鏀俱€?/p>

寰堟槑鏄撅紝鎯版€у垹闄や篃涓嶆槸涓€涓緢濂界殑绛栫暐锛屽洜涓篟edis鏄潪甯镐緷璧栧唴瀛樼┖闂村拰杈冨ソ鐨勫唴瀛樼殑锛屽鏋滀竴浜涢暱鏈熼敭闀挎湡娌℃湁琚闂紝灏变細閫犳垚澶ч噺鐨勫唴瀛樺瀮鍦撅紝鐢氳嚦閫犳垚鍐呭瓨娉勯湶銆?/p>

鎶€鏈浘鐗? src=

鎯版€у垹闄ょ殑瀹炵幇鏄湪瀵规墽琛屾暟鎹啓鍏ョ殑鏃跺€欙紝閫氳繃expireIfNeeded鍑芥暟瀵瑰啓鍏ョ殑key杩涜杩囨湡鍒ゆ柇锛屽叾涓璭xpireIfNeeded鍦ㄥ唴閮ㄥ仛浜嗕笁浠朵簨鎯咃紝鍒嗗埆鏄細

1.鏌ョ湅key鏄惁杩囨湡銆?/p>

2.鍚憇lave鑺傜偣浼犳挱鎵ц鍒犻櫎杩囨湡key鐨勫姩浣溿€?/p>

3.鍒犻櫎杩囨湡key銆?/p>

瀹氭湡鍒犻櫎

涓婇潰涓ょ鍒犻櫎绛栫暐锛屾棤璁烘槸瀹氭椂鍒犻櫎杩樻槸鎯版€у垹闄わ紝閮藉湪鍗曚竴浣跨敤涓婂瓨鍦ㄦ槑鏄剧殑缂洪櫡锛岃涔堝崰鐢ㄥお澶氱殑CPU鏃堕棿锛岃涔堟氮璐瑰お澶氱殑鍐呭瓨銆傝€屽畾鏈熷垹闄ゅ垯鏄墠涓ょ鍒犻櫎绛栫暐鐨勪竴涓暣鍚堝拰鎶樹腑銆?/p>

瀹氭湡鍒犻櫎绛栫暐鏄瘡闅斾竴娈垫椂闂存墽琛屼竴娆″垹闄よ繃鏈熼敭鐨勬搷浣滐紝骞堕€氳繃闄愬埗鍒犻櫎鎿嶄綔鎵ц鐨勬椂闂村拰棰戠巼鏉ュ噺灏戝垹闄ゆ搷浣滃CPU鏃堕棿鐨勫奖鍝嶃€傞€氳繃璁剧疆鍚堢悊鐨勫垹闄ゆ墽琛岀殑鏃堕暱鍜岄鐜囨潵杈惧埌鍚堢悊鍒犻櫎杩囨湡閿殑鐩殑銆?/p>

Redis鐨勪富浠庡鍒?/strong>

鎶€鏈浘鐗? src=

鍏堣涓嬪嚑涓畾涔夛細

1.runID锛氭湇鍔″櫒杩愯鐨処D銆?/p>

2.offset锛氫富鏈嶅姟鍣ㄧ殑澶嶅埗鍋忕Щ閲忓拰浠庢湇鍔″櫒澶嶅埗鐨勫亸绉婚噺銆?/p>

3.Replication Baclog锛氫富鏈嶅姟鍣ㄧ殑澶嶅埗绉帇缂撳啿鍖恒€?/p>

鍦≧edis2.8浠ュ悗锛屼娇鐢╬sync鍛戒护浠f浛sync鍛戒护鏉ユ墽琛屽鍒剁殑鍚屾鎿嶄綔锛宲sync鍛戒护鍏锋湁瀹屾暣鍚屾鍜岄儴鍒嗛噸鍚屾涓ょ妯″紡銆?/p>

瀹屾暣鍚屾

瀹屾暣鍚屾鐢ㄤ簬澶勭悊鍒濇澶嶅埗鎯呭喌锛屽畬鏁撮噸鍚屾鐨勬墽琛屾楠や笌sync鍛戒护鐨勬墽琛屾楠や竴鐩达紝閮芥槸閫氳繃璁╀富鏈嶅姟鍣ㄥ垱寤哄苟鍙戦€丷DB鏂囦欢锛屼互鍙婂悜浠庢湇鍔″櫒鍙戦€佷繚瀛樺湪缂撳啿鍖虹殑鍐欏懡浠ゆ潵杩涜鍚屾銆?/p>

1.slave鍙戦€乸sync鍛戒护缁檓aster锛岀敱浜庢槸绗竴娆″彂閫侊紝涓嶅甫涓妑unID鍜宱ffset銆?/p>

2.master鎺ユ敹鍒拌姹傦紝鍙戦€乵aster鐨剅unID鍜宱ffset缁欎粠鑺傜偣銆?/p>

3.master鐢熸垚淇濆瓨RDB鏂囦欢銆?/p>

4.master鍙戦€丷DB鏂囦欢缁檚lave銆?/p>

5.鍦ㄥ彂閫丷DB杩欎釜鎿嶄綔鐨勫悓鏃讹紝鍐欐搷浣滀細璧嬪€煎埌缂撳啿鍖篟eplication Backlog Buffer涓紝骞朵粠Buffer鍖哄彂閫佸埌slave銆?/p>

6.slave灏哛DB鏂囦欢鐨勬暟鎹杞斤紝骞舵洿鏂拌嚜韬殑鏁版嵁銆?/p>

濡傛灉缃戠粶鐨勬姈鍔ㄦ垨鑰呮槸鐭椂闂寸殑鏂繛涔熼渶瑕佽繘琛屽畬鏁寸殑鍚屾灏变細瀵艰嚧澶ч噺鐨勮祫婧愬紑閿€锛岃繖浜涘紑閿€鍖呮嫭浜哹gsave鐨勬椂闂淬€丷DB鏂囦欢浼犺緭鐨勬椂闂淬€乻lave閲嶆柊鍔犺浇RDB鐨勬椂闂淬€傚鏋渟alve鏈堿OF锛圓ppend Only File锛夛紝杩樹細瀵艰嚧AOF閲嶅啓銆?/p>

閮ㄥ垎閲嶅悓姝?/span>

閮ㄥ垎閲嶅悓姝ユ槸鐢ㄤ簬澶勭悊鏂嚎鍚庨噸鏂拌繛鎺ヤ富鏈嶅姟鍣ㄦ椂锛屼富鏈嶅姟鍣ㄥ彲浠ュ皢涓讳粠鏈嶅姟鍣ㄨ繛鎺ユ柇寮€鏈熼棿鎵ц鐨勫啓鍛戒护鍙戦€佺粰浠庢湇鍔″櫒锛屼粠鏈嶅姟鍣ㄥ彧瑕佹帴鍙楀苟鎵ц杩欎簺鍐欏懡浠わ紝灏卞彲浠ュ皢鏁版嵁搴撴洿鏂拌嚦涓绘湇鍔″櫒褰撳墠鎵€澶勭殑鐘舵€併€?/p>

鎶€鏈浘鐗? src=

1.缃戠粶鍙戠敓閿欒锛宮aster涓巗lave澶卞幓杩炴帴銆?/p>

2.master渚濈劧鍚慴uffer缂撳啿鍖哄啓鍏ユ暟鎹€?/p>

3.slave閲嶆柊杩炴帴涓妋aster銆?/p>

4.slave鍚憁aster鍙戦€佽嚜宸辩洰鍓嶇殑runID鍜宱ffset銆?/p>

5.master鍒ゆ柇slave鍙戦€佺粰鑷繁鐨刼ffset鏄惁瀛樺湪buffer闃熷垪涓€傚鏋滃瓨鍦紝鍒欏彂閫乧ontinue缁檚lave锛涘鏋滀笉瀛樺湪锛屾剰鍛崇潃鍙兘鍋忓樊浜嗗お澶氱殑鏁版嵁锛岀紦鍐插尯宸茬粡娓呯┖锛岃繖涓椂鍊欏氨闇€瑕侀噸鏂拌繘琛屽叏閲忕殑澶嶅埗銆?/p>

6.master鍙戦€佷粠offset鍋忕Щ鍚庣殑缂撳啿鍖烘暟鎹粰slave銆?/p>

7.slave鑾峰彇鏁版嵁鏇存柊鑷韩鏁版嵁銆?/p>

 

"鎬讳笉鑳界敤涓€韬殑鍒哄幓鎷ユ姳鏃犺緶鐨勪汉锛岃璇嗗氨澶熶簡锛屼綍蹇呰皥浣欑敓銆?

以上是关于redis鐨勫嚑涓煡璇嗙偣的主要内容,如果未能解决你的问题,请参考以下文章

涓€闃舵鈥斺€旂煡璇嗙偣鏁村悎

鍏充簬姊害鐨勪竴浜涚煡璇嗙偣

鏂囨憳锛歮atplotlib缁樺浘鍙鍖栫煡璇嗙偣鏁寸悊

ksar銆乻ar鍙婄浉鍏冲唴鏍哥煡璇嗙偣瑙f瀽

閫傜敤浜庤璁″笀鐨勫嚑涓渶浣矯hrome鎵╁睍绋嬪簭

鏄撻敊鏄撴贩娣嗙煡璇嗙偣璁茶В绯诲垪锛堜節锛夆€斿缓绔嬪姩鎬佽鍒掓ā鍨嬬殑鍩烘湰姝ラ