рдЬрд┐рд╕реЗ
Ruby on Rails
- рдХреМрди рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдирд▓рд╛рдЗрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ
- рдЬрд┐рдирдХреЗ рд▓рд┐рдП
Redis
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг)
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣
рд╕рдВрднрд╡рдд: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ
рдкрд░ рдПрдХ рдЯрд╛рдЗрдо рд╕реНрдЯреИрдореНрдк рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕ рд╕рдордп рд╕реНрдЯреИрдореНрдк рдХреЗ рд╕рд╛рде рдЙрд╕рдХреА (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ - рд╕рд╛рдордВрдЬрд╕реНрдп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред рдпрд╣ рдЖрдкрдХреЛ рддрдп рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓реЗрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рд╕рд░рд▓ рд╣реИ рдФрд░
SQL
рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп,
Redis
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рдореБрдЦ рдЬреАрд╡рдирдХрд╛рд▓ (
expire
) рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
init
рдКрдкрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ
path: "/tmp/redis.sock"
- рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдПрдХ socket
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВdriver: :hiredis
- hiredis
рдЪрд╛рд▓рдХ рддреЗрдЬреА рд╕реЗ рд╣реЛрддрд╛ рд╣реИdb: 15
- рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реВрдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг, рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ, рдХреБрдЫ рдФрд░ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдмрд┐рд▓реНрдХреБрд▓ рд╢реВрдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ - рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдСрдирд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
Gemfile
bundle
рдЪрд▓рд╛рдирд╛ рди рднреВрд▓реЗрдВ
online
рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
current_user рд╡рд┐рдзрд┐current_user
рд╡рд┐рдзрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ - рдпрд╣ рд╡рд╣ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛
nil
рд▓реМрдЯрд╛рддреА рд╣реИ - рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рд╣реИред
def current_user @current_user ||= User.find_by_id( session[ :user_id ] ) end
рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ?
рдЫреЛрдЯрд╛ рдмреЛрдирд╕ - рдСрдирд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА
рдмрд╕ рдЗрддрдирд╛ рд╣реА
рдЕрдирд╛рдо рдХреЗ рд▓рд┐рдП рдорд╛рдореВрд▓реА рд╕реБрдзрд╛рд░
рдЕрдирд╛рдо рдЖрдЧрдВрддреБрдХреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрдВрдЬреАрдХрд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ / рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ), рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЬреЛрдбрд╝ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реИред
рдСрдирд▓рд╛рдЗрди рд╕реНрдерд╛рдкрдирд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ? рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдареАрдХ рд╣реИ, рдмрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛
9000 + 9000Redis RAM рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрд╕реНрдЯ рдХрд░рдирд╛ рдкреВрд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдкреНрд░рддрд┐рдХреВрд▓ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦрд╛рд▓реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (
FLUSHALL
рдкрд╣рд▓реЗ
FLUSHALL
рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдФрд░ рдпрд╣рд╛рдВ рдпрд╣
рдЫреЛрдЯреА рд░реВрдмреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ ред 9000 рдСрдирд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ 9000 рдСрдирд▓рд╛рдЗрди рдЕрдирд╛рдо рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛:
- рдЦрд╛рд▓реА рдбреЗрдЯрд╛рдмреЗрд╕: 810.75K
- 18000 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ: 3.49M
рдЗрд╕реА рддрд░рд╣ 65000 + 65000 рдХреЗ рд▓рд┐рдП
- 130,000 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ: 18.66M
# рдпреВрдбреАрдкреА 1
pipelined
рдореЗрдВ рдЖрд╡рд░рдг рдХреЛ
set
рдХреЙрд▓ рдореЗрдВ
ex: timeout
рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
pipelined
ред рдзрдиреНрдпрд╡рд╛рдж
tipcu рдЯрд┐рдк рдХреЗ рд▓рд┐рдПред рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкрд░реАрдХреНрд╖рдг [
src: ruby ] рдиреЗ рдПрдХ рдареЛрд╕ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджрд┐рдпрд╛ред
# рдпреВрдбреАрдкреА 2
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг / рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ:
before_filter
рдмрдЬрд╛рдп before_filter
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдлрд┐рд░ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ (рдЕрдЧрд▓реЗ 10 рдорд┐рдирдЯ рдореЗрдВ) рдпрд╛рддреНрд░рд╛ рдкрд░ рдСрдирд▓рд╛рдЗрди рд╕реВрдЪреА рдореЗрдВ рдЦреБрдж рдХреЛ рджреЗрдЦреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣рд╛рдБ рдЪреБрдирд╛рд╡ рдХреЗрд╡рд▓ рдЖрдкрдХреА рдЬрд░реВрд░рддреЛрдВ / рдЗрдЪреНрдЫрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред- рдпрджрд┐ рдЕрдирд╛рдо рдСрдбрд┐рдпрдВрд╕ рдФрд░ рд╕рд╛рде-рд╕рд╛рде рд▓реЙрдЧ-рдЗрди рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЧрд┐рдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди / рдЖрдЙрдЯ, рдмрд╛рдп рдФрд░ рдмрдбрд╝рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд┐рдкрд░реАрдд рд╕реВрдЪреА рд╕реЗ рд╕рд╛рдл рдХрд░рдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ (рдЖрдИрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ), рдФрд░ рдлрд┐рд░ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ (рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рджреВрд╕рд░рд╛ рд░рд┐рдХреЙрд░реНрдб) - рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ (рд╕рд╢рд░реНрдд 10 рдорд┐рдирдЯ) рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЛ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдиреАрдЪреЗ рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
рд╡рд┐рдкрд░реАрдд рд╕реВрдЪреА рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рд▓рд┐рдВрдХ (
рдЕрдВрдЧреНрд░реЗрдЬреА ):