ЁЯУБ рдПрдЧреНрд░рд┐рдЧреЗрдЯрд░ рд╕рд╛рдЗрдЯрд╣рд░реВ

Aggregatorharu ko Cache Strategies

ЁЯТ╡ рд╕рдореНрдмрджреНрдз рдХрдорд┐рд╕рди рдЖрдп рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
ЁЯЯа Chaturbate рд╕рдореНрдмрджреНрдз ЁЯТЧ StripCash рд╕рдореНрдмрджреНрдз ЁЯТО OnlyFans ЁЯдл Secrets AI
Aggregatorharu ko Cache Strategies

рдПрдЧреНрд░реАрдЧреЗрдЯрд░рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдХреНрдпрд╛рд╕рд┐рдЩ рд░рдгрдиреАрддрд┐рд╣рд░реВ: рд╡рдпрд╕реНрдХ рд╡реЗрдмрдХреНрдпрд╛рдо рдЙрджреНрдпреЛрдЧрдорд╛ рдкреНрд░рджрд░реНрд╢рди рд░ рдирд╛рдлрд╛рдХрд╛рд░рд┐рддрд╛рд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрдиреЗ

рд╡рдпрд╕реНрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╕рд╛рдЗрдЯрд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рд╡рд┐рд╢реНрд╡рдорд╛, рдЬрд╣рд╛рдБ рд▓рд╛рдЦреМрдВ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рдЪреНрдпрд╛рдЯрд░рдмреЗрдЯ, рд╕реНрдЯреНрд░рд┐рдкрдЪреНрдпрд╛рдЯ рд░ рдмреЛрдВрдЧрд╛рдХреНрдпрд╛рдореНрд╕ рдЬрд╕реНрддрд╛ рд╢реАрд░реНрд╖ рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдмрд╛рдЯ рд▓рд╛рдЗрдн рдХреНрдпрд╛рдорд╣рд░реВ рдЦреЛрдЬреНрди рднреЗрд▓рд╛ рд╣реБрдиреНрдЫрдиреН, рдЧрддрд┐ рдХреЗрд╡рд▓ рд╡рд┐рд▓рд╛рд╕рд┐рддрд╛ рд╣реЛрдЗрдитАФрдпреЛ рд░рд╛рдЬрд╕реНрд╡ рдбреНрд░рд╛рдЗрднрд░ рд╣реЛред рдПрдЧреНрд░реАрдЧреЗрдЯрд░рд╣рд░реВрд▓реЗ рдзреЗрд░реИ рдХреНрдпрд╛рдо рд╕рд╛рдЗрдЯрд╣рд░реВрдмрд╛рдЯ рдбрд╛рдЯрд╛ рддрд╛рдиреЗрд░, рдкреНрд░рджрд░реНрд╢рдирдХрд░реНрддрд╛ рдердореНрдмрдиреЗрд▓рд╣рд░реВ, рд▓рд╛рдЗрдн рд╕реНрдЯреНрд░реАрдо рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрдирд╣рд░реВ, рдЕрдирд▓рд╛рдЗрди рддрдереНрдпрд╛рдВрдХрд╣рд░реВ рд░ рд░рд╛рдЬрд╕реНрд╡-рд╢реЗрдпрд░ рд░реЗрдлрд░рд▓ рд▓рд┐рдЩреНрдХрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдЧрд░реНрдЫрдиреНред рдмрд▓рд┐рдпреЛ рдХреНрдпрд╛рд╕рд┐рдЩ рд░рдгрдиреАрддрд┐рд╣рд░реВ рдмрд┐рдирд╛, рддрдкрд╛рдИрдВрдХреЛ рд╕рд╛рдЗрдЯ рд╕реБрд╕реНрдд рд╣реБрдиреНрдЫ, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рдмрд╛рдЙрдиреНрд╕ рдЧрд░реНрдЫрдиреН, рд░ рдПрдлрд┐рд▓рд┐рдПрдЯрд╣рд░реВрд▓реЗ рдХрдорд┐рд╕рди рдЧреБрдорд╛рдЙрдБрдЫрдиреНред рдпреЛ рд╡реНрдпрд╛рдкрдХ рдЧрд╛рдЗрдбрд▓реЗ рд╡рдпрд╕реНрдХ рд╡реЗрдмрдорд╛рд╕реНрдЯрд░рд╣рд░реВ, рд╕рд╛рдЗрдЯ рдорд╛рд▓рд┐рдХрд╣рд░реВ рд░ рдЙрджреНрдпрдореАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреНрдпрд╛рд╕рд┐рдЩ рдкреНрд░рд╡рд┐рдзрд┐рд╣рд░реВрдорд╛ рдЧрд╣рд┐рд░реЛ рдбреБрдмреНрдЫред рд╣рд╛рдореАрд▓реЗ рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд╣рд░реВ, рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рдкреНрд░рднрд╛рд╡рд╣рд░реВ, рд╕реНрдХреЗрд▓рд┐рдЩ рд╕реБрдЭрд╛рд╡рд╣рд░реВ рд░ рдЕрдиреБрдкрд╛рд▓рди рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдХрднрд░ рдЧрд░реНрдиреЗрдЫреМрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯрд╣рд░реВ, рд▓рд╛рдЧрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╣рд░реВ рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд╡рдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрд╕рдБрдЧред рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рд▓реЛрдб рд╕рдордпрд▓рд╛рдИ реореж% рд▓реЗ рдХрдЯреМрддреА рдЧрд░реНрдиреЗ, рд░реВрдкрд╛рдиреНрддрд░рдгрд╣рд░реВрд▓рд╛рдИ рейреж-релреж% рд▓реЗ рдмрдврд╛рдЙрдиреЗ рд░ рд▓рд╛рдЦреМрдВ рджреИрдирд┐рдХ рдЖрдЧрдиреНрддреБрдХрд╣рд░реВрд▓рд╛рдИ рдирд╛рдлрд╛рдХрд╛рд░реА рд░реВрдкрдорд╛ рд╕реНрдХреЗрд▓ рдЧрд░реНрдиреЗ рдХрд╕рд░реА рд╕рд┐рдХреНрдиреЗред

рд╡рдпрд╕реНрдХ рдЙрджреНрдпреЛрдЧрдорд╛ рдПрдЧреНрд░реАрдЧреЗрдЯрд░рд╣рд░реВ рдмреБрдЭреНрдиреЗ

рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╕рд╛рдЗрдЯрд╣рд░реВрд▓реЗ рд▓рд╛рдЗрднрдЬреНрдпрд╛рдорд┐рди, рдХреНрдпрд╛рдорд╕реЛрдбрд╛ рд░ рд╕реНрдЯреНрд░рд┐рдкрдЪреНрдпрд╛рдЯ рдЬрд╕реНрддрд╛ рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдмрд╛рдЯ рд▓рд╛рдЗрдн рдХреНрдпрд╛рдорд╣рд░реВ рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрдиреЗ рд╣рдмрдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдЫрдиреНред рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд░рд╛рдЬрд╕реНрд╡ рд╢реЗрдпрд░ рдорд╛рд░реНрдлрдд рдХрдорд╛рдЙрдБрдЫрдиреНтАФрд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд░реЗрдлрд░ рдЧрд░рд┐рдПрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдЦрд░реНрдЪрдХреЛ реиреж-релреж%ред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЪреНрдпрд╛рдЯрд░рдмреЗрдЯрд▓реЗ рдПрдлрд┐рд▓рд┐рдПрдЯрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ релреж% рд╕рдореНрдордХреЛ рд░реЗрднрд╢реЗрдпрд░ рджрд┐рдиреНрдЫ, рдЬрдмрдХрд┐ рдмреЛрдВрдЧрд╛рдХреНрдпрд╛рдореНрд╕рд▓реЗ рдЯреНрд░рд╛рдлрд┐рдХ рднреЛрд▓реНрдпреБрдордорд╛ рдЖрдзрд╛рд░рд┐рдд рдЯрд┐рдпрд░ рдЧрд░рд┐рдПрдХрд╛ рдХрдорд┐рд╕рдирд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрдЫред рдХреНрдпрд╛рдорд╡реНрд╣реЛрд░реНрд╕рдмреЗ рд╡рд╛ рдкреЛрд░реНрдирд╣рдмрдХреЛ рд▓рд╛рдЗрдн рд╕реЗрдХреНрд╕рди рдЬрд╕реНрддрд╛ рдЙрдЪреНрдЪ-рдЯреНрд░рд╛рдлрд┐рдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд░рд╣рд░реВрд▓реЗ рдпреА рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдорд╛ рдЯреНрд░рд╛рдлрд┐рдХ рдбреНрд░рд╛рдЗрдн рдЧрд░реЗрд░ рдЫ-рдЖрдВрдХрдбрд╛рдХреЛ рдорд╛рд╕рд┐рдХ рд░рд╛рдЬрд╕реНрд╡ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдЫрдиреНред

рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рдореЛрдбреЗрд▓рд╣рд░реВ рд░ рд░рд╛рдЬрд╕реНрд╡ рд╕рдореНрднрд╛рд╡рдирд╛

рдкреНрд░рд╛рдердорд┐рдХ рдореЛрдбреЗрд▓рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреН:

рдирд╛рдлрд╛рдХрд╛рд░рд┐рддрд╛ рдЯреНрд░рд╛рдлрд┐рдХрдорд╛ рдирд┐рд░реНрднрд░ рд╣реБрдиреНрдЫ: рел% рд░реВрдкрд╛рдиреНрддрд░рдгрд╕рдБрдЧ резрдПрдо рдорд╛рд╕рд┐рдХ рдЖрдЧрдиреНрддреБрдХ рднрдПрдХреЛ рд╕рд╛рдЗрдЯрд▓реЗ рейреж% рдФрд╕рдд рд░реЗрднрд╢реЗрдпрд░рдорд╛ $релрежрдХреЗ/рдорд╣рд┐рдирд╛ рдиреЗрдЯ рдЧрд░реНрди рд╕рдХреНрдЫред рдХреЗрд╕ рд╕реНрдЯрдбреА: рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд▓рд╛рдЗрднрдХреНрдпрд╛рдорд╕реЗрдиреНрдЯреНрд░рд▓ рд▓реЗ рдХреНрдпрд╛рд╕рд┐рдЩ рдЕрдиреБрдХреВрд▓рди рдЧрд░реЗрд░ $резрежрдХреЗ рдмрд╛рдЯ $реирежрежрдХреЗ/рдорд╣рд┐рдирд╛рдорд╛ рд╕реНрдХреЗрд▓ рдЧрд░реЗрдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдПрдлрд┐рд▓рд┐рдПрдЯрдлрд┐рдХреНрд╕ рдЬрд╕реНрддрд╛ рдЙрджреНрдпреЛрдЧ рдлреЛрд░рдорд╣рд░реВ рдЕрдиреБрд╕рд╛рд░ред

рдПрдЧреНрд░реАрдЧреЗрдЯрд░рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдХреНрдпрд╛рд╕рд┐рдЩ рдХрд┐рди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ

рдПрдЧреНрд░реАрдЧреЗрдЯрд░рд╣рд░реВрд▓реЗ рдПрдкрд┐рдЖрдЗрд╣рд░реВ рдорд╛рд░реНрдлрдд рдбрд╛рдЗрдирд╛рдорд┐рдХ рдбрд╛рдЯрд╛ рдлреЗрдЪ рдЧрд░реНрдЫрдиреН (рдЬрд╕реНрддреИ, рдЪреНрдпрд╛рдЯрд░рдмреЗрдЯрдХреЛ рдЕрдирд▓рд╛рдЗрди рдХреНрдпрд╛рдорд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЬреЗрдПрд╕рдУрдПрди рдПрдиреНрдбрдкреЛрдЗрдиреНрдЯрд╣рд░реВ)ред рдЕрдирдХреНрдпрд╛рд╕реНрдб, рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рд▓реЛрдбрд▓реЗ резреж-релреж рдПрдкрд┐рдЖрдЗ рдХрд▓рд╣рд░реВ рдЯреНрд░рд┐рдЧрд░ рдЧрд░реНрдЫ, рджрд░ рд╕реАрдорд╛рд╣рд░реВ рд╣рд┐рдЯ рдЧрд░реНрдЫ (рдЪреНрдпрд╛рдЯрд░рдмреЗрдЯ: ремреж/рдорд┐рди) рд░ рел-резреж рд╕реЗрдХреЗрдиреНрдб рдврд┐рд▓рд╛рдЗрд╣рд░реВ рдХрд╛рд░рдг рдмрдирд╛рдЙрдБрдЫред рдХреНрдпрд╛рд╕рд┐рдЩрд▓реЗ рдпреЛ рдбрд╛рдЯрд╛рд▓рд╛рдИ рд╕рд░реНрднрд░-рд╕рд╛рдЗрдб рд╕реНрдЯреЛрд░ рдЧрд░реНрдЫ, рдорд┐рд▓рд┐рд╕реЗрдХреЗрдиреНрдбрдорд╛ рд╕реЗрд╡рд╛ рдЧрд░реНрдЫред рдлрд╛рдЗрджрд╛рд╣рд░реВ: репреж% рдЫрд┐рдЯреЛ рд▓реЛрдбрд╣рд░реВ, рдХрдо рдмреНрдпрд╛рдиреНрдбрд╡рд┐рдбреНрде рд▓рд╛рдЧрддрд╣рд░реВ, рдЙрдЪреНрдЪ рдПрд╕рдИрдУ рд░реНтАНрдпрд╛рдЩреНрдХрд┐рдЩрд╣рд░реВред рдмреЗрдлрд╛рдЗрджрд╛рд╣рд░реВ: рд╕реНрдЯреЗрд▓ рдбрд╛рдЯрд╛ рдЬреЛрдЦрд┐рдорд╣рд░реВ (рдЬрд╕реНрддреИ, рдЕрдлрд▓рд╛рдЗрди рдХреНрдпрд╛рдорд╣рд░реВ рджреЗрдЦрд╛рдЙрдиреЗ), рдмрдвреЗрдХреЛ рд╕рд░реНрднрд░ рдЖрд░рдПрдПрдо рдкреНрд░рдпреЛрдЧред

рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╕рд╛рдЗрдЯрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдХреЛрд░ рдХреНрдпрд╛рд╕рд┐рдЩ рд░рдгрдиреАрддрд┐рд╣рд░реВ

рдорд▓реНрдЯрд┐-рд▓реЗрдпрд░ рдХреНрдпрд╛рд╕рд┐рдЩ рд╕реНрдЯреНрдпрд╛рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН: рдмреНрд░рд╛рдЙрдЬрд░, рд╕реАрдбреАрдПрди, рдПрдкреНрд▓рд┐рдХреЗрд╕рди рд░ рдбрд╛рдЯрд╛рдмреЗрд╕ рд╕реНрддрд░рд╣рд░реВред рдЧрддрд┐рдХрд╛ рд▓рд╛рдЧрд┐ рд░реЗрдбрд┐рд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╕реНрдХреЗрд▓рдХрд╛ рд▓рд╛рдЧрд┐ рдореЗрдордХреНрдпрд╛рд╕реНрдбред

рез. рдмреНрд░рд╛рдЙрдЬрд░ рд░ рдХреНрд▓рд╛рдЗрдиреНрдЯ-рд╕рд╛рдЗрдб рдХреНрдпрд╛рд╕рд┐рдЩ

рдердореНрдмрдиреЗрд▓рд╣рд░реВ рдЬрд╕реНрддрд╛ рд╕реНрдерд┐рд░ рд╕рдореНрдкрддреНрддрд┐рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдПрдЪрдЯреАрдЯреАрдкреА рд╣реЗрдбрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

<meta http-equiv="Cache-Control" content="public, max-age=3600">
# Nginx example
location ~* \.(jpg|png|webp)$ {
    expires 1h;
    add_header Cache-Control "public, immutable";
}

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рд╕реБрдЭрд╛рд╡: рдердореНрдмрдиреЗрд▓рд╣рд░реВрд▓рд╛рдИ рд╡реЗрдмрдкреАрдорд╛ рдХрдореНрдкреНрд░реЗрд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН (релреж% рд╕рд╛рдЗрдЬ рдХрдореА) рд░ PWAs рдХрд╛ рд▓рд╛рдЧрд┐ immutable рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдореЛрдмрд╛рдЗрд▓ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ (рд╡рдпрд╕реНрдХ рдЯреНрд░рд╛рдлрд┐рдХрдХреЛ ремреж%) рд▓реЗ реиx рд░рд┐рдЯреЗрдиреНрд╕рди рджреЗрдЦреНрдЫрдиреНред

реи. рдердореНрдмрдиреЗрд▓рд╣рд░реВ рд░ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрдирд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рд╕реАрдбреАрдПрди рдХреНрдпрд╛рд╕рд┐рдЩ

рдХреНрд▓рд╛рдЙрдбрдлреНрд▓реЗрдпрд░, рдмрдиреАрд╕реАрдбреАрдПрди рд╡рд╛ рдХреАрд╕реАрдбреАрдПрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН ($реж.режрез-реж.режрел/рдЬреАрдмреА)ред рдПрдЬ рд╕реНрдерд╛рдирд╣рд░реВрдорд╛ рднрд┐рдбрд┐рдпреЛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрдирд╣рд░реВ (рдПрдЪрдПрд▓рдПрд╕ рдЪрдВрдХреНрд╕) рдХреНрдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдЙрджрд╛рд╣рд░рдг: рдЪреНрдпрд╛рдЯрд░рдмреЗрдЯ рдердореНрдмрдиреЗрд▓рд╣рд░реВрд▓рд╛рдИ https://cdn.yoursite.com/chaturbate/{model_id}.jpg рдорд╛ рел-рдорд┐рди TTL рд╕рдБрдЧ рдХреНрдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд▓рд╛рдЧрдд: резрдЯреАрдмреА рдЯреНрд░рд╛рдлрд┐рдХрдХрд╛ рд▓рд╛рдЧрд┐ $релреж/рдорд╣рд┐рдирд╛ред

рей. рд░реЗрдбрд┐рд╕/рдореЗрдордХреНрдпрд╛рд╕реНрдбрд╕рдБрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╕рди-рд╕реНрддрд░ рдХреНрдпрд╛рд╕рд┐рдЩ

рд░реЗрдбрд┐рд╕рдорд╛ рдПрдкрд┐рдЖрдЗ-рдлреЗрдЪ рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛ рд╕реНрдЯреЛрд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдЗрди-рдореЗрдореЛрд░реА, рд╕рдм-рдПрдордПрд╕ рд▓реЗрдЯреЗрдиреНрд╕реА)ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрджрд╛рд╣рд░рдг (рдиреЛрдб.рдЬреЗрдПрд╕/рдПрдХреНрд╕рдкреНрд░реЗрд╕)

const redis = require('redis');
const client = redis.createClient();

app.get('/api/online-cams', async (req, res) => {
  const cacheKey = 'chaturbate:online:' + new Date().toDateString(); // Daily refresh
  let data = await client.get(cacheKey);
  
  if (data) {
    return res.json(JSON.parse(data));
  }
  
  // Fetch from Chaturbate API (respect rate limits)
  const response = await fetch('https://chaturbate.com/api/onair/?format=json');
  data = await response.json();
  
  // Cache for 5 mins, with per-model TTL for status
  await client.setex(cacheKey, 300, JSON.stringify(data));
  data.models.forEach(model => {
    client.setex(`model:${model.id}:status`, 60, JSON.stringify(model)); // 1-min for live status
  });
  
  res.json(data);
});

рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕: рдорд▓реНрдЯрд┐-рд▓реЗрдпрд░ TTLs рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНтАФрд╕реВрдЪреАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рел рдорд┐рди, рд▓рд╛рдЗрдн/рдЕрдирд▓рд╛рдЗрди рд╕реНрдерд┐рддрд┐рдХрд╛ рд▓рд╛рдЧрд┐ рейреж рд╕реЗрдХреЗрдиреНрдб, рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рджрд░реНрд╢рдХрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рез рд╕реЗрдХреЗрдиреНрдбред рд╕реНрдЯреНрд░рд┐рдкрдЪреНрдпрд╛рдЯрдХреЛ резрежреж рд░рд┐рдХ/рдорд┐рди рд╕реАрдорд╛рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдЫред

рек. рдбрд╛рдЯрд╛рдмреЗрд╕ рдХреНрдпрд╛рд╕рд┐рдЩ рд░ рдбрд┐рдЬрд╛рдЗрди

рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдбрдорд╛ рдорд╛рдЗрдПрд╕рдХреНрд╡реЗрд▓/рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕рдХреНрд╡реЗрд▓ рдХреНрд╡реЗрд░реА рдирдЧрд░реНрдиреБрд╣реЛрд╕реНред рдПрдЧреНрд░реАрдЧреЗрдЯрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдордЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬреНрдб рднреНрдпреВрд╣рд░реВ рд╡рд╛ рд░реЗрдбрд┐рд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

-- PostgreSQL materialized view for top cams
CREATE MATERIALIZED VIEW top_cams AS
SELECT p.id, p.name, MAX(s.viewers) as peak_viewers
FROM performers p JOIN snapshots s ON p.id = s.model_id
WHERE s.online_at > NOW() - INTERVAL '1 hour'
GROUP BY p.id ORDER BY peak_viewers DESC;

REFRESH MATERIALIZED VIEW top_cams EVERY 5 MINUTES;

рд╢рд╛рд░реНрдбрд┐рдЩрд╕рдБрдЧ рд╕реНрдХреЗрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН: резрежрежрдПрдо рдХреБрдЮреНрдЬреАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рд░реЗрдбрд┐рд╕ рдХреНрд▓рд╕реНрдЯрд░ ($реирежреж/рдорд╣рд┐рдирд╛ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдПрд▓рд╛рд╕реНрдЯрд┐рдХреНрдпрд╛рд╕)ред

рдПрдкрд┐рдЖрдЗ рдПрдХреАрдХрд░рдг рд░ рдбрд╛рдЯрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди

рдПрдЧреНрд░реАрдЧреЗрдЯрд░рд╣рд░реВ рдорд▓реНрдЯрд┐-рдкреНрд▓реЗрдЯрдлрд░реНрдо рдбрд╛рдЯрд╛рдорд╛ рдлрд▓реНрдЫрдиреН: рдЪреНрдпрд╛рдЯрд░рдмреЗрдЯ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЬреЗрдПрд╕рдУрдПрди), рд╕реНрдЯреНрд░рд┐рдкрдЪреНрдпрд╛рдЯ (рдПрдлрд┐рд▓рд┐рдПрдЯ рдПрдкрд┐рдЖрдЗ рдХреБрдЮреНрдЬреА рдЖрд╡рд╢реНрдпрдХ), рдмреЛрдВрдЧрд╛рдХреНрдпрд╛рдореНрд╕ (рдПрдХреНрд╕рдПрдордПрд▓ рдлрд┐рдбрд╣рд░реВ)ред

рджрд░ рд╕реАрдорд╛рд╣рд░реВ рд░ рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рдПрдЧреНрд░реАрдЧреЗрд╕рди рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреЗ

  1. рдмреБрд▓рдПрдордХреНрдпреБ/рд░реЗрдбрд┐рд╕рд╕рдБрдЧ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрд╣рд░реВ рдХреНрдпреБ рдЧрд░реНрдиреБрд╣реЛрд╕реН: резрежреж рдЪреНрдпрд╛рдЯрд░рдмреЗрдЯ рдлреЗрдЪрд╣рд░реВ/рдорд┐рди рдмреНрдпрд╛рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  2. рд░рд┐рдпрд▓-рдЯрд╛рдЗрдордХрд╛ рд▓рд╛рдЧрд┐ рд╡реЗрдмрд╕реЛрдХреЗрдЯрд╣рд░реВ: рд╕реНрдЯреНрд░рд┐рдкрдЪреНрдпрд╛рдЯрдХреЛ рдбрдмреНрд▓реНрдпреВрдПрд╕рд▓рд╛рдИ рд▓рд╛рдЗрдн рдЕрдкрдбреЗрдЯрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдХреНрд╕реА рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдбрд┐рдлрд╣рд░реВ рдХреНрдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  3. рдлрд▓реНрдмреНрдпрд╛рдХрд╣рд░реВ: рдпрджрд┐ рдПрдкрд┐рдЖрдЗ рдбрд╛рдЙрди рдЫ рднрдиреЗ, реирекрдШрдгреНрдЯрд╛рднрдиреНрджрд╛ рдкреБрд░рд╛рдиреЛ рдХреНрдпрд╛рд╕реНрдб рдбрд╛рдЯрд╛ рд╕реЗрд╡рд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕реНрдЯреЗрд▓рдиреЗрд╕ рдЪреЗрддрд╛рд╡рдиреАрд╕рдБрдЧред

рдмреЛрдВрдЧрд╛рдХреНрдпрд╛рдореНрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдкрд╛рдЗрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг:

import requests, redis, time
r = redis.Redis()

def fetch_bonga_online():
    resp = requests.get('https://bongacams.com/public/online', timeout=10)
    data = resp.json()
    r.setex('bonga:online', 120, json.dumps(data))
    return data

рд╣реНрд╡рд╛рдЗрдЯ-рд▓реЗрдмрд▓ рдмрдирд╛рдо рдХрд╕реНрдЯрдо рджреГрд╖реНрдЯрд┐рдХреЛрдгрд╣рд░реВ

рд╣реНрд╡рд╛рдЗрдЯ-рд▓реЗрдмрд▓ (рдЬрд╕реНрддреИ, рдХреНрд░рд╛рдХрд░реЗрднреЗрдиреНрдпреБрдХреЛ рдХреНрдпрд╛рдо рдПрдЧреНрд░реАрдЧреЗрдЯрд░): $репреп/рдорд╣рд┐рдирд╛, рдмрд┐рд▓реНрдЯ-рдЗрди рдХреНрдпрд╛рд╕рд┐рдЩ, рейреж% рд░реЗрднрд╢реЗрдпрд░ред рдлрд╛рдЗрджрд╛рд╣рд░реВ: рдЫрд┐рдЯреЛ рд▓рдиреНрдЪред рдмреЗрдлрд╛рдЗрджрд╛рд╣рд░реВ: рд╕реАрдорд┐рдд рдХрд╕реНрдЯрдорд╛рдЗрдЬреЗрд╕рди, рд╕реЗрдпрд░ рдЧрд░рд┐рдПрдХрд╛ рдЖрдЗрдкреА рдмреНрд▓реНрдпрд╛рдХрд▓рд┐рд╕реНрдЯрд╣рд░реВред

рдХрд╕реНрдЯрдо: рд▓рд╛рд░рд╛рд╡реЗрд▓/рднреНрдпреВрдорд╛ рдирд┐рд░реНрдорд╛рдг ($релрдХреЗ рдбреЗрдн рд▓рд╛рдЧрдд), рдкреВрд░реНрдг рд░реЗрдбрд┐рд╕ рдПрдХреАрдХрд░рдгред рдХреЗрд╕: рдХреНрдпрд╛рдордПрдЧреНрд░реАрдЧреЗрдЯрдкреНрд░реЛ рд▓реЗ рдХрд╕реНрдЯрдордорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реЗрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреНрдпрд╛рд╕рд┐рдЩ рдорд╛рд░реНрдлрдд рд░рд╛рдЬрд╕реНрд╡ рддреЗрдмреНрдмрд░ рдмрдирд╛рдпреЛред

рд╕реНрдХреЗрд▓рд┐рдЩ, рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд░ рд╣реЛрд╕реНрдЯрд┐рдЩ

рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ

рдФрдЯреЛ-рд╕реНрдХреЗрд▓: рд╢рд┐рдЦрд░рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдИрдХреЗрдПрд╕рдорд╛ рдХubernреЗрдЯреНрд╕ (рд╡рдпрд╕реНрдХ рдЯреНрд░рд╛рдлрд┐рдХ рд╕рд╛рдБрдЭрдорд╛ рд╕реНрдкрд╛рдЗрдХреНрд╕ рд╣реБрдиреНрдЫ)ред

рдореЛрдмрд╛рдЗрд▓ рдЕрдиреБрдХреВрд▓рди рд░ рдкреАрдбрдмреНрд▓реНрдпреВрдП

ремреж% рдЯреНрд░рд╛рдлрд┐рдХ рдореЛрдмрд╛рдЗрд▓ред рдЕрдлрд▓рд╛рдЗрди рдХреНрдпрд╛рд╕рд┐рдЩрдХрд╛ рд▓рд╛рдЧрд┐ рд╕рд░реНрднрд┐рд╕ рд╡рд░реНрдХрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request).then(response => {
      return response || fetch(event.request).then(fetchResponse => {
        caches.open('v1').then(cache => cache.put(event.request, fetchResponse.clone()));
        return fetchResponse;
      });
    })
  );
});

рдкреАрдбрдмреНрд▓реНрдпреВрдПрд▓реЗ рд░

Aggregatorharu ko Cache Strategies
тЖР Back to All Webmaster Articles