Jako vývojáři Django se často setkáváme s výkonovými úzkými místy, zejména při práci se správou relací. Relace založené na databázi mohou výrazně zpomalit vaši aplikaci. Zatímco Memcached nabízí řešení, přináší vlastní výzvu: ztrátu dat relací během restartů serveru nebo obnovení mezipaměti. V tomto příspěvku vám ukážu, jak tento problém překonat použitím dvou samostatných instancí Memcached - jedné pro běžné Python objekty a druhé vyhrazené pro data relací.
Problém s jedinou instancí Memcached
Při použití jediné instance Memcached pro obecné kešování i relace vede restart serveru nebo vymazání mezipaměti k odhlášení všech uživatelů. To vytváří špatnou uživatelskou zkušenost a může být obzvláště problematické pro vysoce navštěvované weby.
Řešení: Nastavení dvou Memcached
Implementací samostatné instance Memcached pro relace můžeme udržet uživatelské relace i při vymazání hlavní mezipaměti. Zde je návod, jak to nastavit:
- Vytvořte dva nové soubory ve vašem projektovém adresáři:
Soubor 1: session_backend.py
Tento soubor je upravenou verzí Django contrib/sessions/backends/cache.py
:
|
|
Soubor 2: session_cache.py
Tento soubor inicializuje samostatnou mezipaměť pro relace:
|
|
- Aktualizujte váš
settings.py
:
|
|
- Spusťte novou instanci Memcached na portu 11200.
Výhody tohoto přístupu
- Zlepšený výkon: Relace jsou nyní spravovány v paměti, což je výrazně rychlejší než databázové dotazy.
- Perzistence uživatelských relací: Uživatelé zůstávají přihlášeni i při vymazání hlavní mezipaměti aplikace.
- Škálovatelnost: Oddělení úložiště relací umožňuje snadnější škálování vaší kešovací infrastruktury.
Tipy pro implementaci
- Ujistěte se, že vaše instance Memcached jsou řádně zabezpečeny, zejména pokud běží na samostatném serveru.
- Sledujte využití paměti vaší instance Memcached pro relace, abyste zabránili přetečení.
- Zvažte implementaci zásad vypršení platnosti relací pro správu dlouho neaktivních relací.
Implementací tohoto nastavení dvou Memcached zaznamenáte podstatné zlepšení výkonu a uživatelské zkušenosti vaší Django aplikace. Oddělení zájmů umožňuje flexibilnější správu mezipaměti bez narušení uživatelských relací.
Implementovali jste toto řešení nebo máte otázky? Neváhejte mě kontaktovat na [email protected]. Vždy rád diskutuji o optimalizacích Django a pomáhám kolegům vývojářům vylepšit jejich aplikace.
Šťastné kódování a ať jsou vaše Django aplikace vždy rychlé a stabilní!