рд▓реЗрдЦ рдХрд╛ рд▓реЗрдЦрдХрддреНрд╡ рд╣рдорд╛рд░реЗ рдХрд░реНрдордЪрд╛рд░реА
рд╕реНрдЯреАрдлрди рдХрд░рдореНрдпрд╢реЗрд╡ рдХрд╛ рд╣реИрдЙрд╕рдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдХреЛрдИ рдирд┐рдордВрддреНрд░рдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдЖрдЧреЗ рдЙрдирдХреА рдУрд░ рд╕реЗ рдХрдердиред
рдпрд╣ рдкрд╛рда рдкреНрд░рддрд┐рднрд╛ рдХрд╛ рдвреЛрдВрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХреЗрдВ рди рддреЛ рд░рд╛рдордмрд╛рдг рд╣реИрдВ, рди рд╣реА рдЪрд╛рдВрджреА рдХреА рдЧреЛрд▓реАред рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рджреБрд░реНрдШрдЯрдирд╛ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдП рдЧрдП рдЕрдзреНрдпрдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд░реВрд╕реА рдпрд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдПрдХ рднреА рд╕реНрд░реЛрдд рдирд╣реАрдВ рдорд┐рд▓рд╛ (рди рд╣реА, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЬрд░реНрдорди рдореЗрдВ) рдРрд╕реА рднрд╛рд╖рд╛рдПрдВ рдЬреЛ рд╕рдорд╛рди рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдЬрд╛рдирдХрд╛рд░реА "рдЬреИрд╕рд╛ рд╣реИ" рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реИ, рдмрд┐рдирд╛ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ рдЕрдзреНрдпрдпрди рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдШрд╛рддрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!
Red'ku рдХреЗ рд▓рд┐рдП рджрд╛рджрд╛
рд▓реЛрдХ рдХрдерд╛

рдорд╛рдорд▓реЗ рдЕрд▓рдЧ рд╣реИрдВред рдХрднреА-рдХрднреА рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рд┐рд╕реНрдЯрдо рднреА рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдмрд╛рд░, рдореЗрд░реЗ рдХрдорд╛рдВрдб рд╕реЗрдВрдЯрд░ рдХреА рдХреБрд░реНрд╕реА рдкрд░ рдмреИрдареЗ, рдбрд░рд╛рд╡рдиреА рдФрд░ рдХрдбрд╝рд╡рд╛рд╣рдЯ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рд╕реНрдХрд╛рдЗрдк рдЪреИрдЯ рдореЗрдВ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗред рдХрд╣рд╛рдиреА рдХреЗ рд╡рд┐рдХрд░реНрдг рдкрд░ рдкрдврд╝рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд▓рд╛рд▓рд┐рдпреЛрдВ рдХреЛ рд╕реВрдЬ рдЧрдпрд╛ рдерд╛, рдмрд░рд╛рдордж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ OOM рд╣рддреНрдпрд╛рд░реЗ рдХреА рдорджрдж рд╕реЗ рдорд╛рд░рд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдПрдкреЗрдВрдб-рдУрдирд▓реА рдлрд╝рд╛рдЗрд▓ рдареАрдХ рд╕реЗ рд╡рд┐рд▓реЗрдЦ рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдИред рдореИрдЬрд┐рдХ рд░реЗрдбрд┐рд╕-рдЪреЗрдХ-рдПрдУрдлрд╝ - рдЙрдкрд╕рд░реНрдЧ рдиреЗ рдЦреБрд╢реА рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рд╕реВрдЪрдирд╛ рджреА, рд╕рд╛рде рд╣реА 8-рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ 900-рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдкрд░ рдЯреНрд░рд┐рдо рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред
- рдУрд╣, рдЖрддрдВрдХ! - рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЪрд┐рд▓реНрд▓рд╛рдпрд╛ред
- рдлрд╝рд╛рд╕реНрдХреЛ! - рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЪрд┐рд▓реНрд▓рд╛рдпрд╛ред
- $ #% \!! [_ *** #% \! - рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЪрд┐рд▓реНрд▓рд╛рдпрд╛ред
рдПрдиреЛ-рдлрд╛рдЗрд▓реНрд╕ рдореЗрдВ, рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд░реЗрдбрд┐рд╕ рдХрдорд╛рдВрдбреНрд╕ рдирд┐рд╣рд┐рдд рд╣реИред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдлрд╝рд╛рдЗрд▓ рдХреЛ "рд▓рдбрд╝рд╛рдИ рдкрд░" рдЙрдкрд╕рд░реНрдЧ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рдПрдХ рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╣рдордиреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдареАрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдЫреБрдЯреНрдЯреА рдирд╣реАрдВ рд▓реАред
рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдбреЗрдореЙрди рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ "HQET рдХрдорд╛рдВрдб рдирд╣реАрдВ рдорд┐рд▓рд╛" рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдлрд┐рд░ рдорд╛рдЗрдВрдб рдЧреЗрдо рд╢реБрд░реВ рд╣реБрдЖред рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд╛рдк рд╕реЗ рджрдлрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдЧрдВрднреАрд░ рд╣рд┐рдВрд╕рд╛ рдХреЗ рдЕрдзреАрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, http://redis.io/commands рдкреЗрдЬ рдЦреЛрд▓рд╛ рдЧрдпрд╛, рдЬрд╣рд╛рдБ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реЗрдбрд┐рд╕ рдХрдВрдЯреНрд░реЛрд▓ рдХрдорд╛рдВрдб рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдкрд╣рд▓рд╛ рд╕реНрддрд░ред рдореБрдЭреЗ рдмрд╣реБрдд рдЪреЛрдЯ рд▓рдЧреА рд╣реИред
yum install -y hexedit <- hexedit рд▓рдЧрд╛рдПрдВ
hexedit <aof file> <- hexedit рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ
<- рдЕрд╕реНрд╕реА рдореЛрдб рдкрд░ рдЬрд╛рдПрдВ
</> <- рдЦреЛрдЬ рдкрд░ рдЬрд╛рдПрдВ
HQET-> <- рд╡рд╛рдВрдЫрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ, рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
<ctrl-X> <- hexedit рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ
рдЖрджреЗрд╢реЛрдВ рдХреА рдкрд╣рд▓реА рд▓рд╣рд░ (HQET, HSAT, ZASD) рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рдкрд░ рд░реАрдбрд┐рд╕-рдЪреЗрдХ-рдПрдУрдПрдл рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕рд╛рдордиреЗ рдЖрдП

рд╕реНрддрд░ рджреЛред рдЕрд▓реНрдЯреНрд░рд╛ рд╣рд┐рдВрд╕рд╛ред
рдЕрдм рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
0x308a7042: Expected prefix '\r\n', got: '0f0a'
hexedit <aof file> <- hexedit рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ
<- рдкрддреЗ рдкрд░ рдЬрд╛рдПрдВ
<рд╣рдордиреЗ 0f0a рд╕реЗ 0d0a> рдХреЛ рд╕рд╣реА рдХрд┐рдпрд╛ рд╣реИ - <- рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣реЗрдХреНрд╕ рдореЗрдВ 0d0a \ r \ n рд╣реИред
рдпрд╣ рдФрд░ рднреА рдЖрд╕рд╛рди рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рд░реЗрдбрд┐рд╕-рдЪреЗрдХ-рдПрдУрдлрд╝ рд░рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛

рд╕реНрддрд░ рддреАрдиред рджреБрдГрд╕реНрд╡рдкреНрди!
0x 308a7046: Expected prefix '*', got: '$'
рдореВрд▓реА рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛, рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд░реЗрдбрд┐рд╕-рдЪреЗрдХ-рдПрдУрдлрд╝ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд░реНрдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ _ _ рдмрд╛рдж рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╕реНрдерд╛рди, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛:
'34' 'D' 'A' '0'
рдпрд╣ рди рдХреЗрд╡рд▓ buf [0] рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╛ рддреЛ рдХреБрдЫ рд╡рд░реНрдгреЛрдВ рдХреЗ рдмрд╛рдж, рдпрд╛ рдмрд╕ buf рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╣реЗрдХреНрд╕рд┐рдбрд┐рдЯ рдореЗрдВ, рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд░реЗрдЦрд╛ рдХреЛ '34 0D 0A 00 'рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рддред рджреЛ рдкреНрд░рдореБрдЦ рд╢реВрдиреНрдп рд╡рд░реНрдгред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ ASCII _before_ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд▓реА рдЬрдЧрд╣ рдХреЛ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдкрдврд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдпрджрд┐ рд╣рдо рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ ASCII рдореЗрдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ:
HSET..$16..{u204237826932}g..$3..150..$1..1..*6..$4..HSET..$16..{u204237826932}g..$3 ..139..$1..1..*4..$4..
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдзреНрдпрд╛рди рд╕реЗ рд░реЗрдбрд┐рд╕ рдХреЗ рд╕реНрд░реЛрдд рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреБрдХрдбрд╝реЗ:
if (buf[0] != '*') goto fmterr; argc = atoi(buf+1); if (argc < 1) goto fmterr; argv = zmalloc(sizeof(robj*)*argc); for (j = 0; j < argc; j++) { if (fgets(buf,sizeof(buf),fp) == NULL) goto readerr; if (buf[0] != '$') goto fmterr; len = strtol(buf+1,NULL,10); argsds = sdsnewlen(NULL,len); if (len && fread(argsds,len,1,fp) == 0) goto fmterr; argv[j] = createObject(REDIS_STRING,argsds); if (fread(buf,2,1,fp) == 0) goto fmterr; }
рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рд╣рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рдХрд┐ рдКрдкрд░ рдХреА рд▓рд╛рдЗрди:
HSET..$16..{u204237826932}g..$3..150..$1..1..*6..$4..HSET..$16..{u204237826932}g..$3 ..139..$1..1..*4..$4..
рд╕рд╣реА рд╣реЛрдиреЗ рдкрд░ рдЪреЗрдХ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
HSET..$16..{u204237826932}g..$3..150..$1..1..*4..$4..HSET..$16..{u204237826932}g..$3 ..139..$1..1..*4..$4..
рдЖрд▓рд╕реА рдХреЗ рд▓рд┐рдП, рдЕрдВрддрд░ рджреВрд╕рд░реЗ рдПрдЪрдПрд╕рдИрдЯреА рд╕реЗ рдкрд╣рд▓реЗ 6 рд╕реЗ 4 рдХреА рдЬрдЧрд╣ рд╣реИ, рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ рдЧреЛрдЯреЛ fmterr рдЕрдиреБрднрд╛рдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдФрд░ рдЪреБрдкрдЪрд╛рдк рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реАред
рдирддреАрдЬрддрди, рдлрд╝рд╛рдЗрд▓ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдереА, рд░реЗрдбрд┐рд╕ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХрд╛рдо рдкрд░ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкреНрд░рддрд┐рд╖реНрдард╛ рдереЛрдбрд╝реА рд╕реВрдЦ рдЧрдИ рдереА, рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдмреИрдХрдЕрдк рдкреБрди: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдереАред рдмрд╕, рджреЛ рдмрд╛рд░ред