рдореИрдВрдиреЗ рд╣реЗрдмреЗ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреЗ рдЧреБрд▓реНрд▓рдХ рдХреЛ рд▓реБрдЖ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрджреНрднреБрдд рд╡рд╛рдИрдкреА рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдирдЧреАрди рдХреЗ рд╣реБрдб рдХреЗ рддрд╣рдд рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рдкрджреЛрдВ рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛,
рдпрд╣рд╛рдБ рджреВрд╕рд░рд╛
рд╣реИ ред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, nginx рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЧреНрд░реБрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП рдХреБрдЫ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ "рд╣реЙрдЯ рдХреИрд╢" рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (SQL рд╕реЗ BETWEEN рдФрд░ GROUP BY / AGGREGATE рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрдирд╛рд▓реЙрдЧ)ред Redis рд╕реЗ lua + nginx рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Redis source рдХрд╛ рдбреЗрдЯрд╛ рд╣рд░ рд╕реЗрдХрдВрдб рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдЕрднреА рднреА рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (N (1 <= N <= 3600) рд╕реЗрдХрдВрдб, рддрд┐рдерд┐ рдФрд░ рд╕реЙрд░реНрдЯ рд╕реНрд╡рд░реВрдк рдореЗрдВ рд╕реЙрд░реНрдЯ рдХрд░рдХреЗ рдПрдХрддреНрд░реАрдХрд░рдг (рд╕реЗрдХрдВрдб, рдорд┐рдирдЯ, рдШрдВрдЯреЗ ... рдореЗрдВ рдЕрдВрддрд░рд╛рд▓)ред
рдореМрдЬреВрджрд╛ рдорд╢реАрди рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА рд╣рд┐рдЯреНрд░реЗрдЯ рдХреЗ рд╕рд╛рде, рдпрд╣ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 110-130k рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЦрд░рд╛рдм рдХреЗ рд╕рд╛рде - рдХреЗрд╡рд▓ 20-30kред рдЬреЛ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдорд╛рди рдирдЧреАрди рдЙрджрд╛рд╣рд░рдг рдкрд░ рднреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрд░реЛрдд рд╕реЗ рд╣рд░ рд╕реЗрдХрдВрдб рдореЗрдВ рд╡рд╣ рдбреЗрдЯрд╛ рдЖрддрд╛ рд╣реИ рдЬреЛ Redis ZSET рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╕рдордп рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реИ - рдЪрдпрди рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдЖрдпрд╛ - "рдореБрдЭреЗ рдЕрдм рд╣рд░ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рджреЗ рджреЛ", рдПрдХ рдФрд░ рдЖрдпрд╛ - "рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдЕрдВрддрд░рд╛рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐ рдШрдВрдЯрд╛ рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ", рддреАрд╕рд░реЗ рдХреЛ рдПрдХ рдЖрдЦрд┐рд░реА рд╕реЗрдХрдВрдб рдХреА рдЬрд░реВрд░рдд рд╣реИ, 27 рд╕реЗрдХрдВрдб рдХреЗ рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рджрд┐рди рдХреЗ рд▓рд┐рдП рдЪреМрдерд╛, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЖрджрд┐ред рдбреА ... рд░реЗрдбрд┐рд╕ рдореЗрдВ рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдкрд░ рджрд╕реНрддрдХ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЕрдВрддрд░рд╛рд▓ рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг рдХрджрдо, рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ / рдЕрдиреБрд░реЛрдз рдХрд╛ рдЕрдкрдирд╛ рд╣реИ рдФрд░ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдХреЛ рдХрд┐рд╕реА рднреА рдЙрдЪрд┐рдд рдЕрдиреБрд░реЛрдз рдХрд╛ рддреБрд░рдВрдд рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╡рд┐рдЪрд╛рд░ рд░реЗрдбрд┐рд╕ рдкрдХреНрд╖ рдкрд░ рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рдЬреЛ рдХрд┐ рдирдЧреНрдиреЗрдХреНрд╕-рд▓реБрдЖ рдХреЛрдб рд╕реЗ EVAL рд░реЗрдбрд┐рд╕-рд▓реБрдЖ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛ рд░рд╣рд╛ рдерд╛ред рд░реЗрдбрд┐рд╕ рдХреА рдПрдХрд▓-рдкрд┐рд░реЛрдпрд╛ рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг рдпрд╣ "рд╣рдореЗрдВ рдЧрд╣рд░реА рддрдХрдиреАрдХ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рдереА": рдЬрд▓реНрджреА рд╕реЗ "рдХрдЪреНрдЪрд╛ рдбреЗрдЯрд╛" рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рддреИрдпрд╛рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рднрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдирд┐рдХрд▓рддрд╛ рд╣реИред
Redis рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдлреЙрд░реНрдо рдХреЗ json рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдПрд▓рд┐рдореЗрдВрдЯ-рд╡рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
ZADD ns:zs:key 1386701764 "{\"data100500\":\"hello habr\",\"dt\":\"10.12.2013 10:05:00\",\"smth\":\"else\"}"
"рдЯрд╛рдЗрдорд░" рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдорддреБрд▓реНрдп рд╣реИ, dt рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдорддреБрд▓реНрдп рд╣реИред
рддрджрдиреБрд╕рд╛рд░, рд╕реАрдорд╛ рдЪрдпрди:
ZREVRANGEBYSCORE ns:zs:data:sec 1386701764 1386700653 WITHSCORES
рдФрд░ рд░реЗрд╕реНрдЯ рд░реЗрдбрд┐рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реБрдЖ рдкрд░:
local redis = require 'redis' local R, err = redis:new() R:connect('12.34.56.78', 6379) R:zrevrangebyscore('ns:zs:data:sec', to, from, 'WITHSCORES')
рд░реЗрд╕реА рд░реЗрдбрд┐рд╕ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВрдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд░реЗрдХреА рд░реЗрдбрд┐рд╕ рдФрд░ рдЖрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рдХрдиреЗрдХреНрдЯ () рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж рдХрдиреЗрдХреНрд╢рди рд▓реМрдЯрдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ R: set_keepalive () рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рдкреВрд▓ рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рд▓реМрдЯрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ R: рдХрдиреЗрдХреНрдЯ () рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдкреВрд▓ рд╕реЗ рд╡рд░реНрддрдорд╛рди рдХрдиреЗрдХреНрд╢рди рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХрд╛рдЙрдВрдЯрд░ R: get_reused_times () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐> 0, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрдиреЗрдХреНрд╢рди рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ AUTH рдЖрджрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рдо
рдирд╛рдЬрд╝рд┐рдирдХреНрд╕ (рд▓реБрдЖ-рдиреЗрдЧрдиреЗрдХреНрд╕- рдореЙрдбреНрдпреВрд▓ +
рд▓реБрдЖ-рд░реЗрд╕реНрдЯреА-рд░реЗрдбрд┐рд╕ )
рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ , рдЬрд▓реНрджреА рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ:
http { lua_package_path '/path/to/lua/?.lua;;'; init_by_lua_file '/path/to/lua/init.lua'; lua_shared_dict ourmegacache 1024m; server { location = /data.js { content_by_lua_file '/path/to/lua/get_data.lua'; } } }
рд╕рд╛рдЭрд╛ рддрд╛рдирд╛рд╢рд╛рд╣реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВрд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рддрд╛рдирд╛рд╢рд╛рд╣ "рдЖрдЙрдореЗрдЧреИрдЪреЗ" рдХреЛ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ (рд╢рдмреНрджрдХреЛрд╢, рд╣реИрд╢) рдХреЗ рд░реВрдк рдореЗрдВ рд▓реБрдЖ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рд╕рднреА nginx рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИ рдФрд░ рдЗрд╕ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░рдорд╛рдгреБ рд╣реИрдВред
рддрд╛рд▓рд┐рдХрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рд░рд▓ рд╣реИ:
local cache = ngx.shared.ourmegacache cache:get('foo') cache:set('bar', 'spam', 3600)
рдЬрдм рдореЗрдореЛрд░реА рдореЗрдВ рдЦрд╛рд▓реА рд╕реНрдерд╛рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
LRU рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдлрд╛рдИ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - safe_add, flush_expired, рдЖрджрд┐ рддрд░реАрдХреЛрдВ рдХреА рдУрд░ рджреЗрдЦреЗрдВред рдпрд╣ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреА рддрд░рд╣, рдЗрд╕ рд╕рд╛рдЭрд╛ рддрд╛рдирд╛рд╢рд╛рд╣реА рдореЗрдВ рдмрдбрд╝реЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЪрдп рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд
рдирдЧреАрдиреЗрдХреНрд╕ рдореЗрдВ рдПрдХ рдЕрдирд╕реБрд▓рдЭрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
рдмрдЧ рд╣реИ ред
рдЕрдиреБрд░реЛрдзрд┐рдд рдЕрдВрддрд░рд╛рд▓ рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг рдЪрд░рдг рдХреА рд╕реАрдорд╛рдУрдВ рдореЗрдВ рд╡рд┐рд╡рд┐рдзрддрд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо GET рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░
рд╕реЗ ,
рд╕реЗ рдФрд░
рдХрджрдо рддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рд╕рдордЭреМрддреЗ рдХреЗ рд╕рд╛рде, рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рд╛рд░реВрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
/data.js?step=300&from=1386700653&to=1386701764
local args = ngx.req.get_uri_args() local from = tonumber(args.from) or 0 ...
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Redis рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рддрддреНрд╡-рд╡рд╛рд░ рдЬреЛрдВрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рд╣рдо рд╡рд╣рд╛рдБ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреЗрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?
- рдЖрдк рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрдИ рджрд░реНрдЬрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдмрд╣реБрдд рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдПрдХ рджрд┐рди рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ, рддреЛ рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ;
- рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдпреЛрдЬрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рдЬрд╕рди рдореЗрдВ рднреА рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЬрдм рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕реАрдорд╛рдВрдХрдХ рдпрд╛ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддреЛ - рд╡рд┐рдХрд▓реНрдк;
- рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдкрд░ рдЖрдВрд╢рд┐рдХ рджреЛрд╣рд░рд╛рд╡ рдХреЗ рд╕рд╛рде, рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдХреИрд╢ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 1 рд╕реЗрдХрдВрдб (рдПрдХрд▓ рд░рд┐рдХреЙрд░реНрдб), 10 рд╕реЗрдХрдВрдб, 1 рдорд┐рдирдЯ, 10 рдорд┐рдирдЯ, рдШрдВрдЯрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдЙрд╕рдХреЗ рд╕рднреА рд╕реЗрдХрдВрдб рдХрд╛ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИ рдФрд░ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдирд╣реАрдВ рджреА рдЬрд╛рддреА рд╣реИ: рдпрд╛ рддреЛ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдирд╣реАрдВред
рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд▓реЗрдХрд┐рди рдЯреЗрдмрд▓ рдПрдХреНрд╕реЗрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджрд┐рдпрд╛ред рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдХреИрд╢ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 1 рд╕реЗрдХрдВрдб (рдПрдХрд▓ рд░рд┐рдХреЙрд░реНрдб), 10 рд╕реЗрдХрдВрдб, 1 рдорд┐рдирдЯ, 10 рдорд┐рдирдЯ, рдШрдВрдЯрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдЙрд╕рдХреЗ рд╕рднреА рд╕реЗрдХрдВрдб рдХрд╛ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЛ рдЗрд╕рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреА рд╕реАрдорд╛ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 10 рд╕реЗрдХрдВрдб рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдореЗрдВ рд╣рдореЗрд╢рд╛ 9 рдХреЗ рдПрдХ рджрд╢рдорд▓рд╡ рд╢реЗрд╖ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╣реЛрддрд╛ рд╣реИ (рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдЫрдВрдЯрдиреА), рдФрд░ рд╕рдордп рдмреНрд▓реЙрдХ рдореЗрдВ 5:59, 59: 58, ... 00:00 рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди рдХрд░рддреЗ рд╕рдордп, рдЙрдиреНрд╣реЗрдВ рддреБрд░рдВрдд рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд╕рд╛рде рдЪрд┐рдкрдХрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо, рдЬреЛ рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдЗрди рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: '[', рдмреНрд▓реЙрдХ, '], рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдмрдбрд╝реЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рднреА рдорд┐рд▓рд╛рддреЗ рд╣реИрдВред
рдЕрдиреБрд░реЛрдзрд┐рдд рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЫреЛрдЯреЗ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХрд▓ рдмреНрд▓реЙрдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИред рдЕрдВрддрд░рд╛рд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 02: 29: 58 ... 03:11:02 рд╣рдореЗрдВ рдХреИрд╢ рд▓реЗрдЖрдЙрдЯ рдорд┐рд▓реЗрдЧрд╛:
1sec - 03:11:02
1sec - 03:11:01
1sec - 03:11:00
1min - 03:10:59 .. 03:10:00
10min - 03:09:59 .. 03:00:00
30min - 02:59:59 .. 02:30:00
1sec - 02:29:59
1sec - 02:29:58
рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдгрдирд╛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИредрдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдХреИрд╢ рдХреЗ рд▓рд┐рдП 8 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛ рд░реЗрдбрд┐рд╕ рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА / рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╢реНрд░рдорд┐рдХреЛрдВ / рдХрдиреЗрдХреНрдЯрд░реНрд╕ рд╕реЗ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдлрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓реЙрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рддрд╛рдирд╛рд╢рд╛рд╣ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХреА рдкрд░рдорд╛рдгреБрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд╣рд╛рдВ рдЕрдВрддрд░рд╛рд▓ рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг рдЪрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХреИрд╢ рдХреИрд╢ рдХреБрдВрдЬреА рд╣реИ):
local chunk local lock_ttl = 0.5
рдЖрд╡рд╢реНрдпрдХ рдХреИрд╢ рд▓реЗрдЖрдЙрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд░реЗрдбрд┐рд╕ рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╕реАрдорд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг рддрд░реНрдХ (рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрддрд╛ рд╣реВрдВ), рд╣рдореЗрдВ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХреИрд╢рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдЧрд░реНрдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдирдП рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ Redis рдХреЗ рд▓рд┐рдП рджрд╕реНрддрдХ рджреЗрддрд╛ рд╣реИред рдЕрдЧрд░ рд╡реЗ рдЕрднреА рддрдХ рдПрд▓рдЖрд░рдпреВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдЪреБрдиреЗ рдЧрдП рд╣реИрдВ рдпрд╛ рдлреЗрдВрдХ рджрд┐рдП рдЧрдП рд╣реИрдВред рдФрд░ рд░реЗрдбрд┐рд╕ рдореЗрдВ рд╕реАрдорд┐рдд рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП 100-110Mb / s рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рд╣реАрдЯрд┐рдВрдЧ рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдХреВрдж рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдирдЧрдиреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╢реАрди рдкрд░ рд╕реАрдкреАрдпреВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣реАрдЯрд┐рдВрдЧ рд▓рдЧрднрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред
рд╣реЗрдбрд░ рдореЗрдВ рдЫрд╡рд┐ рдпрд╣рд╛рдВ рд╕реЗ рд▓реА рдЧрдИ рд╣реИ ред