рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рдкреНрд░рднрд╛рд╡реА рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рди рдХреЗрд╡рд▓ рдЖрд╡реЗрджрди рдореЗрдВ рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 1 рд╡рд░реНрдЧ рдЬреЛрдбрд╝рдХрд░ рдкреВрд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВред
рдпрджрд┐ рдЖрдк рдЦреБрдж рдХреЛ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдкрдврд╝реЗрдВред
рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░ рдХреНрдпрд╛ рд╣реИ?

рд╡рд┐рд╖рдп рджреБрдирд┐рдпрд╛ рдХреА рддрд░рд╣ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рдмреЛрд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдПрдВрдЯреНрд░реЛрдкреА рдмрдврд╝рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рд╣реА рдЪреАрдЬ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдорд╛рд░реНрдЯрд┐рди рдлрд╛рдЙрд▓рд░ рдиреЗ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдХреА, рд▓реЗрдХрд┐рди рдореИрдВ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдПрдХ рд╡рд╛рдХреНрдп рдореЗрдВ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛:
рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛ рдПрдХ рдЕрдиреБрдкрд▓рдмреНрдз рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рдмрд░реНрдмрд╛рдж рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░реЛрдХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ "рдЕрдкрдиреЗ рдШреБрдЯрдиреЛрдВ рд╕реЗ рдКрдкрд░ рдЙрдардиреЗ" рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ ред
рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдмрд░реНрдмрд╛рдж рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░ (рдЗрд╕рдХреЗ рдмрд╛рдж рд╕реАрдмреА) рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ ("рдЧрд▓рдд рдирд╣реАрдВ"), рдпрд╛, рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди, рд╡рд╛рдкрд╕реА рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред
рд▓рдХреНрд╖реНрдпреЛрдВ
рд╣рдо рдореБрдЦреНрдп рдЪреАрдЬ рдХреЛ рд╕рд┐рдВрдЧрд▓ рдХрд░рддреЗ рд╣реИрдВ:
- рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд░реЛрдХрдХрд░ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдирд╡реАрдирддрдо, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдирд╣реАрдВ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рдпрджрд┐ рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ рдФрд░ рдХреЛрдИ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рд░рдгрдиреАрддрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдЕрдиреНрдп рд░рдгрдиреАрддрд┐ рд▓реМрдЯрд╛рдПрдВ)
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрдВрддреНрд░
рдорд╛рдорд▓рд╛: рд╕реЗрд╡рд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ (рдкрд╣рд▓рд╛ рдЕрдиреБрд░реЛрдз)
- рдЪрд▓рд┐рдП рдХреИрд╢ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ (CRT рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╢ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ
- рд╣рдо рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдореВрд▓реНрдп рдорд┐рд▓рддрд╛ рд╣реИ
- рд╣рдо рдХреИрд╢ рдореЗрдВ рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдРрд╕реЗ рдЯреАрдЯреАрдПрд▓ рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рд╕рдордп рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛, рдЬреЛ рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдпрд╣ рдЙрд╕ рдбреЗрдЯрд╛ рдХреА рд╡реИрдзрддрд╛ рдЕрд╡рдзрд┐ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЖрдк рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
- рдХреИрд╢ рд░реАрдлрд╝реНрд░реЗрд╢ рдЯрд╛рдЗрдо (CRT) рдХреЛ рдХреНрд▓реЙрдЬрд╝ 3 рд╕реЗ рдорд╛рди рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡рд╣ рд╕рдордп рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдореЗрдВ рдЬрд╛рдиреЗ рдФрд░ рдореВрд▓реНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдЗрдЯрдо 2 рд╕реЗ рдорд╛рди рд▓реМрдЯрд╛рдПрдВ
рдорд╛рдорд▓рд╛: CRT рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ
- рдЪрд▓рд┐рдП рдХреИрд╢ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдХреБрдВрдЬреА рд╕реЗ рд╣рдо рд╕реАрдЖрд░рдЯреА рдкрд╛рддреЗ рд╣реИрдВред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ
- рдЗрд╕рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХреЛ рдХреИрд╢ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдорд╛рди рд▓реМрдЯрд╛рдПрдВред
рдорд╛рдорд▓рд╛: CRT рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ, рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ
- рдЪрд▓рд┐рдП рдХреИрд╢ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдХреБрдВрдЬреА рд╕реЗ рд╣рдо рд╕реАрдЖрд░рдЯреА рдкрд╛рддреЗ рд╣реИрдВред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ
- рд╣рдо рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдореВрд▓реНрдп рдорд┐рд▓рддрд╛ рд╣реИ
- рдХреИрд╢ рдФрд░ рдЙрд╕рдХреЗ рдЯреАрдЯреАрдПрд▓ рдореЗрдВ рдореВрд▓реНрдп рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛
- рдХреИрд╢ рд░реАрдлрд╝реНрд░реЗрд╢ рдЕрд╡рдзрд┐ (CRP) рдЬреЛрдбрд╝рдХрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП CRT рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ - рдпрд╣ рд╡рд╣ рдорд╛рди рд╣реИ рдЬрд┐рд╕реЗ рдЕрдЧрд▓реЗ CRT рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CRT рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдорд╛рди рд▓реМрдЯрд╛рдПрдВред
рдХреЗрд╕: CRT рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд, рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдЕрдиреБрдкрд▓рдмреНрдз
- рдЪрд▓рд┐рдП рдХреИрд╢ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдХреБрдВрдЬреА рд╕реЗ рд╣рдо рд╕реАрдЖрд░рдЯреА рдкрд╛рддреЗ рд╣реИрдВред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ
- рд╣рдо рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред рд╡рд╣ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ
- рдХреИрд╢ рд╕реЗ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╕рдмрд╕реЗ рддрд╛рдЬрд╝рд╛ (рд╕рдбрд╝реЗ рд╣реБрдП CRT рдХреЗ рд╕рд╛рде) рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ TTL рдЕрднреА рддрдХ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ
- рд╣рдо рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ
рдорд╛рдорд▓рд╛: CRT рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд, рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдЕрдиреБрдкрд▓рдмреНрдз, рдХреИрд╢ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ
- рдЪрд▓рд┐рдП рдХреИрд╢ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдХреБрдВрдЬреА рд╕реЗ рд╣рдо рд╕реАрдЖрд░рдЯреА рдкрд╛рддреЗ рд╣реИрдВред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ
- рд╣рдо рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред рд╡рд╣ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ
- рдХреИрд╢ рд╕реЗ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╡рд╣ рдирд╣реАрдВ рд╣реИ
- рд╣рдо рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░рдгрдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди, рдпрд╛ "рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ" рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рддреЛ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рди рддреЛрдбрд╝реЗрдВред рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рдХреА рд░рдгрдиреАрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдЕрдкрд╡рд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдо рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ 1.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдлрд┐рд░ рднреА рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред
рдпрд╣ рд▓реЗрдЦ 2 рдмрд╛рд░ рд▓рдВрдмрд╛ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рдореИрдВ рд▓реЛрдореНрдмреЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдХреА-рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ (рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗрд╡реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рдореИрдВ Redis 5.0.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣реЗрдЬрд╝реЗрд▓рдХрд╛рд╕реНрдЯ рдпрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХрд░реЗрдЧрд╛ред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреИрд╢рдореИрдиреЗрдЬрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдбреЗрдЯрд╛-рд░реЗрдбрд┐рд╕ рд╕реЗ RedisCacheManager рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдКрдкрд░, "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрдВрддреНрд░" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдмрдирд╛рдИ рдЧрдИ рдереАрдВ: рд╕реАрдЖрд░рдЯреА рдФрд░ рд╕реАрдЖрд░рдкреАред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ:
рдХреИрд╢ рд░реАрдлрд╝реНрд░реЗрд╢ рдЯрд╛рдЗрдо (
CRT ) KV (рдХреА + рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ "_crt") рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ, рдЬреЛ рддрд╛рдЬрд╝рд╛ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдордп рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЯреАрдЯреАрдПрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реАрдЖрд░рдЯреА рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ "рд╕рдбрд╝рд╛ рд╣реБрдЖ" рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдпрд╣ рдХрд┐ рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рддрд╛рдЬрд╛ рд╣реЛ рдЧрдпрд╛ - рдареАрдХ рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдиреАрдЪреЗ рдЖ рдЬрд╛рдПрдЧрд╛ред
рдХреИрд╢ рд░реАрдлрд╝реНрд░реЗрд╢ рдЕрд╡рдзрд┐ (
рд╕реАрдЖрд░рдкреА ) рдПрдХ рдореВрд▓реНрдп рд╣реИ рдЬрд┐рд╕реЗ рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдХреЛ рдорддрджрд╛рди рдХреЗ рдмрд╛рдж рд╕реАрдЖрд░рдЯреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рд╕рдлрд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛)ред рдЙрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ рджреВрд░рд╕реНрде рд╕реЗрд╡рд╛ рдореЗрдВ "рдЕрдкрдиреА рд╕рд╛рдВрд╕ рдкрдХрдбрд╝рдиреЗ" рдФрд░ рдЧрд┐рд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдкрдирд╛ рдХрд╛рдо рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рд╣рдо рдореБрдЦреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕реАрдмреА рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
public interface CircuitBreakerService { <T> T getStableValue(StableValueParameter parameter); void evictValue(EvictValueParameter parameter); }
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░:
@Getter @AllArgsConstructor public class StableValueParameter<T> { private String cachePrefix;
@Getter @AllArgsConstructor public class EvictValueParameter { private String cachePrefix; private String objectCacheKey; }
рдЗрд╕ рддрд░рд╣ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
public AccountDataResponse findAccount(String accountId) { final StableValueParameter<?> parameter = new StableValueParameter<>( ACCOUNT_CACHE_PREFIX, accountId, properties.getCrpInSeconds(), () -> bankClient.findById(accountId) ); return circuitBreakerService.getStableValue(parameter); }
рдпрджрд┐ рдЖрдкрдХреЛ рдХреИрд╢ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ:
public void evictAccount(String accountId) { final EvictValueParameter parameter = new EvictValueParameter( ACCOUNT_CACHE_PREFIX, accountId ); circuitBreakerService.evictValue(parameter); }
рдЕрдм рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ (рдХреЛрдб рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ):
@Override public <T> T getStableValue(StableValueParameter parameter) { final Cache cache = cacheManager.getCache(parameter.getCachePrefix()); if (cache == null) { return logAndThrowUnexpectedCacheMissing(parameter.getCachePrefix(), parameter.getObjectCacheKey()); }
рдпрджрд┐ рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдХреИрд╢ рд╕реЗ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
private <T> T getFromTargetServiceAndUpdateCache( StableValueParameter parameter, Cache cache, String crtKey, LocalDateTime crt ) { T result; try { result = getFromTargetService(parameter); } catch (WebServiceIOException ex) { log.warn( "[CircuitBreaker] Service responded with error: {}. Try get from cache {}: {}", ex.getMessage(), parameter.getCachePrefix(), parameter.getObjectCacheKey()); result = getFromCacheOrDisasterStrategy(parameter, cache); } cache.put(parameter.getObjectCacheKey(), result); cache.put(crtKey, crt.plusSeconds(parameter.getCrpInSeconds())); return result; } private static <T> T getFromTargetService(StableValueParameter parameter) { return (T) parameter.getTargetServiceAction().get(); }
рдпрджрд┐ рдХреИрд╢ рдореЗрдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдерд╛ (рд╡реЗ TTL рджреНрд╡рд╛рд░рд╛ рд╣рдЯрд╛рдП рдЧрдП рдереЗ, рдФрд░ рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдЕрднреА рднреА рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ), рддреЛ рд╣рдо DisasterStrategy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
private <T> T getFromCacheOrDisasterStrategy(StableValueParameter parameter, Cache cache) { return (T) getFromCache(parameter, cache).orElseGet(() -> parameter.getDisasterStrategy().getValue()); }
рдХреИрд╢ рд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╣рд╛рдВ рджреЗ рджреВрдВрдЧрд╛:
private <T> T getFromCacheOrDisasterStrategy(StableValueParameter parameter, Cache cache) { return (T) getFromCache(parameter, cache).orElseGet(() -> parameter.getDisasterStrategy().getValue()); }
рдХреИрд╢ рд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╣рд╛рдВ рджреЗ рджреВрдВрдЧрд╛:
@Override public void evictValue(EvictValueParameter parameter) { final Cache cache = cacheManager.getCache(parameter.getCachePrefix()); if (cache == null) { logAndThrowUnexpectedCacheMissing(parameter.getCachePrefix(), parameter.getObjectCacheKey()); return; } final String crtKey = parameter.getObjectCacheKey() + CRT_CACHE_POSTFIX; cache.evict(crtKey); }
рдЖрдкрджрд╛ рдХреА рд░рдгрдиреАрддрд┐

рдпрд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддрд░реНрдХ рд╣реИ рдЬреЛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ CRT рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдХреИрд╢ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдЗрд╕ рддрд░реНрдХ рдХрд╛ рдЕрд▓рдЧ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рде рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рдпрд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд┐рд░ рдмрдирд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреА рдЙрдкрдЬ рдореЗрдВ рдЧрд░реНрд╡ рдХреА рднрд╛рд╡рдирд╛ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм рд╕рдм рдХреБрдЫ рдЬреЛ рдХреЗрд╡рд▓ рдЕрд╕рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЙрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд╖реЗрддреНрд░ рдореЗрдВ "рдореВрд▓реНрдп" рдирд╣реАрдВ рдорд╛рд▓ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдЧрдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рд╢рд┐рд▓рд╛рд▓реЗрдЦ: "рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ", рд▓реЗрдХрд┐рди рдЙрддреНрддрд░ "500 рд╕реЗрд╡рд╛ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ" рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдХрд┐рддрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реЗрд╖ 10 рдлрд╝реАрд▓реНрдб: рдЙрддреНрдкрд╛рдж рд╡рд┐рд╡рд░рдг, рдЖрджрд┐ред рддреБрдо рд▓реМрдЯ рдЖрдПред рдЗрд╕ рддрд░рд╣ рдХреА рд╕реЗрд╡рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдХрд┐рддрдирд╛ рдмрджрд▓рд╛рд╡ рдЖрддрд╛ рд╣реИ? .. рдореЗрд░рд╛ рдЖрд╣реНрд╡рд╛рди рд╣реИ рдХрд┐ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рд╕рд╕реЗ рд╡реЗ рдмреЗрд╣рддрд░ рдмрди рд╕рдХреЗрдВред
рдЧреЗрдп рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ред рддреЛ, рд░рдгрдиреАрддрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:
public interface DisasterStrategy<T> { T getValue(); }
рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
public class DefaultValueDisasterStrategy implements DisasterStrategy<String> { @Override public String getValue() { return " "; } }
рдпрд╛, рдпрджрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ:
public class ThrowExceptionDisasterStrategy implements DisasterStrategy<Object> { @Override public Object getValue() { throw new CircuitBreakerNullValueException("Ops! Service is down and there's null value in cache"); } }
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, CRT рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЕрдЧрд▓рд╛ рдЕрдиреБрд░реЛрдз рдлрд┐рд░ рд╕реЗ рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ - рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рддреИрдпрд╛рд░-рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдФрд░ рдЙрдкрджреНрд░рд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд░рд▓, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдЗрдХ рд╣реИ, рдРрд╕рд╛ рдХрд░реЗрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рди рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдХреЗ рд░реВрдк рдореЗрдВред
рдмрд╣реБрдд рд╕рд╛рд░реЗ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╣рд┐рд╕реНрдЯреНрд░рд┐рдХреНрд╕ред
рд╕рдордЭрдиреЗ рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреИрд╢ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреИрд╢ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрджрд┐ рдХреИрд╢ рдЕрдкреНрд░рднрд╛рд╡реА рд╣реИ (рдХреБрдЫ рд╣рд┐рдЯ, рдХрдИ рдорд┐рд╕), рддреЛ рдпрд╣ рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрдкреНрд░рднрд╛рд╡реА рд╣реЛрдЧрд╛: рдкреНрд░рддреНрдпреЗрдХ рдХреИрд╢ рдорд┐рд╕ рд▓рдХреНрд╖реНрдп рд╕реЗрд╡рд╛ рдХреА рдпрд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛, рдЬреЛ, рд╢рд╛рдпрдж рдЗрд╕ рд╕рдордп рдкреАрдбрд╝рд╛ рдФрд░ рдкреАрдбрд╝рд╛ рдореЗрдВ рд╣реИ, рдЙрдардиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдХреИрд╢ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЛ рдорд╛рдкрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдпрд╣ "рдХреИрд╢ рд╣рд┐рдЯ рд░реЗрдЯ" = рд╣рд┐рдЯреНрд╕ (рд╣рд┐рдЯреНрд╕ + рдорд┐рд╕реЗрд╕) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ 1 рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ 0ред
рдФрд░ рд╣рд╛рдВ, рдХреЛрдИ рднреА рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реАрдмреА рдХреА рдХрдИ рдХрд┐рд╕реНрдореЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред