[{"data":1,"prerenderedAt":14078},["ShallowReactive",2],{"navigation":3,"/caching/low-level-cache-api":1016,"/caching/low-level-cache-api-surround":14073},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":691,"body":1018,"description":1028,"extension":14068,"links":14069,"meta":14070,"navigation":1128,"path":692,"seo":14071,"stem":693,"__hash__":14072},"docs/18.caching/05.low-level-cache-api.md",{"type":1019,"value":1020,"toc":14050},"minimark",[1021,1025,1029,1034,1039,1937,1941,3808,3812,3816,4752,4756,5681,5685,6645,6649,6653,8454,8458,10797,10801,10805,14043,14046],[1022,1023,691],"h1",{"id":1024},"low-level-cache-api",[1026,1027,1028],"p",{},"Django's low-level cache API provides fine-grained control over caching operations, enabling sophisticated caching strategies for specific data, computed results, and complex objects. This approach offers maximum flexibility for optimizing application performance through targeted caching of expensive operations, database queries, and external API calls.",[1030,1031,1033],"h2",{"id":1032},"basic-cache-operations","Basic Cache Operations",[1035,1036,1038],"h3",{"id":1037},"core-cache-methods","Core Cache Methods",[1040,1041,1046],"pre",{"className":1042,"code":1043,"language":1044,"meta":1045,"style":1045},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Basic cache operations\nfrom django.core.cache import cache\nfrom django.core.cache import caches\nimport json\nimport pickle\n\n# Basic get/set operations\ndef basic_cache_operations():\n    \"\"\"Demonstrate basic cache operations.\"\"\"\n    \n    # Set a value\n    cache.set('my_key', 'my_value', timeout=300)  # 5 minutes\n    \n    # Get a value\n    value = cache.get('my_key')\n    print(f\"Cached value: {value}\")\n    \n    # Get with default\n    value = cache.get('nonexistent_key', 'default_value')\n    print(f\"Value with default: {value}\")\n    \n    # Check if key exists\n    if 'my_key' in cache:\n        print(\"Key exists in cache\")\n    \n    # Delete a key\n    cache.delete('my_key')\n    \n    # Set multiple values\n    cache.set_many({\n        'key1': 'value1',\n        'key2': 'value2',\n        'key3': 'value3'\n    }, timeout=600)\n    \n    # Get multiple values\n    values = cache.get_many(['key1', 'key2', 'key3'])\n    print(f\"Multiple values: {values}\")\n    \n    # Delete multiple keys\n    cache.delete_many(['key1', 'key2', 'key3'])\n    \n    # Clear entire cache (use with caution!)\n    # cache.clear()\n\n# Working with different cache backends\ndef multi_cache_operations():\n    \"\"\"Use multiple cache backends.\"\"\"\n    \n    # Default cache\n    default_cache = cache\n    \n    # Specific cache backend\n    redis_cache = caches['redis']\n    memcached_cache = caches['memcached']\n    \n    # Store in different caches\n    default_cache.set('user_data', {'id': 1, 'name': 'John'})\n    redis_cache.set('session_data', {'session_id': 'abc123'})\n    memcached_cache.set('temp_data', 'temporary_value')\n","python","",[1047,1048,1049,1058,1087,1107,1115,1123,1130,1136,1150,1164,1170,1176,1231,1236,1242,1269,1299,1304,1310,1343,1365,1370,1376,1397,1414,1419,1425,1445,1450,1456,1469,1493,1514,1534,1549,1554,1560,1603,1626,1631,1637,1673,1678,1684,1690,1695,1701,1711,1721,1726,1732,1742,1747,1753,1777,1798,1803,1809,1866,1907],"code",{"__ignoreMap":1045},[1050,1051,1054],"span",{"class":1052,"line":1053},"line",1,[1050,1055,1057],{"class":1056},"s9Tkl","# Basic cache operations\n",[1050,1059,1061,1065,1069,1073,1076,1078,1081,1084],{"class":1052,"line":1060},2,[1050,1062,1064],{"class":1063},"siDh9","from",[1050,1066,1068],{"class":1067},"sftqT"," django",[1050,1070,1072],{"class":1071},"soVBu",".",[1050,1074,1075],{"class":1067},"core",[1050,1077,1072],{"class":1071},[1050,1079,1080],{"class":1067},"cache ",[1050,1082,1083],{"class":1063},"import",[1050,1085,1086],{"class":1067}," cache\n",[1050,1088,1090,1092,1094,1096,1098,1100,1102,1104],{"class":1052,"line":1089},3,[1050,1091,1064],{"class":1063},[1050,1093,1068],{"class":1067},[1050,1095,1072],{"class":1071},[1050,1097,1075],{"class":1067},[1050,1099,1072],{"class":1071},[1050,1101,1080],{"class":1067},[1050,1103,1083],{"class":1063},[1050,1105,1106],{"class":1067}," caches\n",[1050,1108,1110,1112],{"class":1052,"line":1109},4,[1050,1111,1083],{"class":1063},[1050,1113,1114],{"class":1067}," json\n",[1050,1116,1118,1120],{"class":1052,"line":1117},5,[1050,1119,1083],{"class":1063},[1050,1121,1122],{"class":1067}," pickle\n",[1050,1124,1126],{"class":1052,"line":1125},6,[1050,1127,1129],{"emptyLinePlaceholder":1128},true,"\n",[1050,1131,1133],{"class":1052,"line":1132},7,[1050,1134,1135],{"class":1056},"# Basic get/set operations\n",[1050,1137,1139,1143,1147],{"class":1052,"line":1138},8,[1050,1140,1142],{"class":1141},"s5Kfy","def",[1050,1144,1146],{"class":1145},"sljsM"," basic_cache_operations",[1050,1148,1149],{"class":1071},"():\n",[1050,1151,1153,1157,1161],{"class":1052,"line":1152},9,[1050,1154,1156],{"class":1155},"sm7ve","    \"\"\"",[1050,1158,1160],{"class":1159},"sVyVU","Demonstrate basic cache operations.",[1050,1162,1163],{"class":1155},"\"\"\"\n",[1050,1165,1167],{"class":1052,"line":1166},10,[1050,1168,1169],{"class":1067},"    \n",[1050,1171,1173],{"class":1052,"line":1172},11,[1050,1174,1175],{"class":1056},"    # Set a value\n",[1050,1177,1179,1182,1184,1188,1191,1195,1199,1201,1204,1207,1210,1212,1214,1218,1221,1225,1228],{"class":1052,"line":1178},12,[1050,1180,1181],{"class":1067},"    cache",[1050,1183,1072],{"class":1071},[1050,1185,1187],{"class":1186},"siWMO","set",[1050,1189,1190],{"class":1071},"(",[1050,1192,1194],{"class":1193},"sbYkP","'",[1050,1196,1198],{"class":1197},"sTbE_","my_key",[1050,1200,1194],{"class":1193},[1050,1202,1203],{"class":1071},",",[1050,1205,1206],{"class":1193}," '",[1050,1208,1209],{"class":1197},"my_value",[1050,1211,1194],{"class":1193},[1050,1213,1203],{"class":1071},[1050,1215,1217],{"class":1216},"sqOPj"," timeout",[1050,1219,1220],{"class":1071},"=",[1050,1222,1224],{"class":1223},"s7CZa","300",[1050,1226,1227],{"class":1071},")",[1050,1229,1230],{"class":1056},"  # 5 minutes\n",[1050,1232,1234],{"class":1052,"line":1233},13,[1050,1235,1169],{"class":1067},[1050,1237,1239],{"class":1052,"line":1238},14,[1050,1240,1241],{"class":1056},"    # Get a value\n",[1050,1243,1245,1248,1250,1253,1255,1258,1260,1262,1264,1266],{"class":1052,"line":1244},15,[1050,1246,1247],{"class":1067},"    value ",[1050,1249,1220],{"class":1071},[1050,1251,1252],{"class":1067}," cache",[1050,1254,1072],{"class":1071},[1050,1256,1257],{"class":1186},"get",[1050,1259,1190],{"class":1071},[1050,1261,1194],{"class":1193},[1050,1263,1198],{"class":1197},[1050,1265,1194],{"class":1193},[1050,1267,1268],{"class":1071},")\n",[1050,1270,1272,1276,1278,1281,1284,1288,1291,1294,1297],{"class":1052,"line":1271},16,[1050,1273,1275],{"class":1274},"sJdAF","    print",[1050,1277,1190],{"class":1071},[1050,1279,1280],{"class":1141},"f",[1050,1282,1283],{"class":1197},"\"Cached value: ",[1050,1285,1287],{"class":1286},"s3h35","{",[1050,1289,1290],{"class":1186},"value",[1050,1292,1293],{"class":1286},"}",[1050,1295,1296],{"class":1197},"\"",[1050,1298,1268],{"class":1071},[1050,1300,1302],{"class":1052,"line":1301},17,[1050,1303,1169],{"class":1067},[1050,1305,1307],{"class":1052,"line":1306},18,[1050,1308,1309],{"class":1056},"    # Get with default\n",[1050,1311,1313,1315,1317,1319,1321,1323,1325,1327,1330,1332,1334,1336,1339,1341],{"class":1052,"line":1312},19,[1050,1314,1247],{"class":1067},[1050,1316,1220],{"class":1071},[1050,1318,1252],{"class":1067},[1050,1320,1072],{"class":1071},[1050,1322,1257],{"class":1186},[1050,1324,1190],{"class":1071},[1050,1326,1194],{"class":1193},[1050,1328,1329],{"class":1197},"nonexistent_key",[1050,1331,1194],{"class":1193},[1050,1333,1203],{"class":1071},[1050,1335,1206],{"class":1193},[1050,1337,1338],{"class":1197},"default_value",[1050,1340,1194],{"class":1193},[1050,1342,1268],{"class":1071},[1050,1344,1346,1348,1350,1352,1355,1357,1359,1361,1363],{"class":1052,"line":1345},20,[1050,1347,1275],{"class":1274},[1050,1349,1190],{"class":1071},[1050,1351,1280],{"class":1141},[1050,1353,1354],{"class":1197},"\"Value with default: ",[1050,1356,1287],{"class":1286},[1050,1358,1290],{"class":1186},[1050,1360,1293],{"class":1286},[1050,1362,1296],{"class":1197},[1050,1364,1268],{"class":1071},[1050,1366,1368],{"class":1052,"line":1367},21,[1050,1369,1169],{"class":1067},[1050,1371,1373],{"class":1052,"line":1372},22,[1050,1374,1375],{"class":1056},"    # Check if key exists\n",[1050,1377,1379,1382,1384,1386,1388,1392,1394],{"class":1052,"line":1378},23,[1050,1380,1381],{"class":1063},"    if",[1050,1383,1206],{"class":1193},[1050,1385,1198],{"class":1197},[1050,1387,1194],{"class":1193},[1050,1389,1391],{"class":1390},"sVsLi"," in",[1050,1393,1252],{"class":1067},[1050,1395,1396],{"class":1071},":\n",[1050,1398,1400,1403,1405,1407,1410,1412],{"class":1052,"line":1399},24,[1050,1401,1402],{"class":1274},"        print",[1050,1404,1190],{"class":1071},[1050,1406,1296],{"class":1193},[1050,1408,1409],{"class":1197},"Key exists in cache",[1050,1411,1296],{"class":1193},[1050,1413,1268],{"class":1071},[1050,1415,1417],{"class":1052,"line":1416},25,[1050,1418,1169],{"class":1067},[1050,1420,1422],{"class":1052,"line":1421},26,[1050,1423,1424],{"class":1056},"    # Delete a key\n",[1050,1426,1428,1430,1432,1435,1437,1439,1441,1443],{"class":1052,"line":1427},27,[1050,1429,1181],{"class":1067},[1050,1431,1072],{"class":1071},[1050,1433,1434],{"class":1186},"delete",[1050,1436,1190],{"class":1071},[1050,1438,1194],{"class":1193},[1050,1440,1198],{"class":1197},[1050,1442,1194],{"class":1193},[1050,1444,1268],{"class":1071},[1050,1446,1448],{"class":1052,"line":1447},28,[1050,1449,1169],{"class":1067},[1050,1451,1453],{"class":1052,"line":1452},29,[1050,1454,1455],{"class":1056},"    # Set multiple values\n",[1050,1457,1459,1461,1463,1466],{"class":1052,"line":1458},30,[1050,1460,1181],{"class":1067},[1050,1462,1072],{"class":1071},[1050,1464,1465],{"class":1186},"set_many",[1050,1467,1468],{"class":1071},"({\n",[1050,1470,1472,1475,1478,1480,1483,1485,1488,1490],{"class":1052,"line":1471},31,[1050,1473,1474],{"class":1193},"        '",[1050,1476,1477],{"class":1197},"key1",[1050,1479,1194],{"class":1193},[1050,1481,1482],{"class":1071},":",[1050,1484,1206],{"class":1193},[1050,1486,1487],{"class":1197},"value1",[1050,1489,1194],{"class":1193},[1050,1491,1492],{"class":1071},",\n",[1050,1494,1496,1498,1501,1503,1505,1507,1510,1512],{"class":1052,"line":1495},32,[1050,1497,1474],{"class":1193},[1050,1499,1500],{"class":1197},"key2",[1050,1502,1194],{"class":1193},[1050,1504,1482],{"class":1071},[1050,1506,1206],{"class":1193},[1050,1508,1509],{"class":1197},"value2",[1050,1511,1194],{"class":1193},[1050,1513,1492],{"class":1071},[1050,1515,1517,1519,1522,1524,1526,1528,1531],{"class":1052,"line":1516},33,[1050,1518,1474],{"class":1193},[1050,1520,1521],{"class":1197},"key3",[1050,1523,1194],{"class":1193},[1050,1525,1482],{"class":1071},[1050,1527,1206],{"class":1193},[1050,1529,1530],{"class":1197},"value3",[1050,1532,1533],{"class":1193},"'\n",[1050,1535,1537,1540,1542,1544,1547],{"class":1052,"line":1536},34,[1050,1538,1539],{"class":1071},"    },",[1050,1541,1217],{"class":1216},[1050,1543,1220],{"class":1071},[1050,1545,1546],{"class":1223},"600",[1050,1548,1268],{"class":1071},[1050,1550,1552],{"class":1052,"line":1551},35,[1050,1553,1169],{"class":1067},[1050,1555,1557],{"class":1052,"line":1556},36,[1050,1558,1559],{"class":1056},"    # Get multiple values\n",[1050,1561,1563,1566,1568,1570,1572,1575,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600],{"class":1052,"line":1562},37,[1050,1564,1565],{"class":1067},"    values ",[1050,1567,1220],{"class":1071},[1050,1569,1252],{"class":1067},[1050,1571,1072],{"class":1071},[1050,1573,1574],{"class":1186},"get_many",[1050,1576,1577],{"class":1071},"([",[1050,1579,1194],{"class":1193},[1050,1581,1477],{"class":1197},[1050,1583,1194],{"class":1193},[1050,1585,1203],{"class":1071},[1050,1587,1206],{"class":1193},[1050,1589,1500],{"class":1197},[1050,1591,1194],{"class":1193},[1050,1593,1203],{"class":1071},[1050,1595,1206],{"class":1193},[1050,1597,1521],{"class":1197},[1050,1599,1194],{"class":1193},[1050,1601,1602],{"class":1071},"])\n",[1050,1604,1606,1608,1610,1612,1615,1617,1620,1622,1624],{"class":1052,"line":1605},38,[1050,1607,1275],{"class":1274},[1050,1609,1190],{"class":1071},[1050,1611,1280],{"class":1141},[1050,1613,1614],{"class":1197},"\"Multiple values: ",[1050,1616,1287],{"class":1286},[1050,1618,1619],{"class":1186},"values",[1050,1621,1293],{"class":1286},[1050,1623,1296],{"class":1197},[1050,1625,1268],{"class":1071},[1050,1627,1629],{"class":1052,"line":1628},39,[1050,1630,1169],{"class":1067},[1050,1632,1634],{"class":1052,"line":1633},40,[1050,1635,1636],{"class":1056},"    # Delete multiple keys\n",[1050,1638,1640,1642,1644,1647,1649,1651,1653,1655,1657,1659,1661,1663,1665,1667,1669,1671],{"class":1052,"line":1639},41,[1050,1641,1181],{"class":1067},[1050,1643,1072],{"class":1071},[1050,1645,1646],{"class":1186},"delete_many",[1050,1648,1577],{"class":1071},[1050,1650,1194],{"class":1193},[1050,1652,1477],{"class":1197},[1050,1654,1194],{"class":1193},[1050,1656,1203],{"class":1071},[1050,1658,1206],{"class":1193},[1050,1660,1500],{"class":1197},[1050,1662,1194],{"class":1193},[1050,1664,1203],{"class":1071},[1050,1666,1206],{"class":1193},[1050,1668,1521],{"class":1197},[1050,1670,1194],{"class":1193},[1050,1672,1602],{"class":1071},[1050,1674,1676],{"class":1052,"line":1675},42,[1050,1677,1169],{"class":1067},[1050,1679,1681],{"class":1052,"line":1680},43,[1050,1682,1683],{"class":1056},"    # Clear entire cache (use with caution!)\n",[1050,1685,1687],{"class":1052,"line":1686},44,[1050,1688,1689],{"class":1056},"    # cache.clear()\n",[1050,1691,1693],{"class":1052,"line":1692},45,[1050,1694,1129],{"emptyLinePlaceholder":1128},[1050,1696,1698],{"class":1052,"line":1697},46,[1050,1699,1700],{"class":1056},"# Working with different cache backends\n",[1050,1702,1704,1706,1709],{"class":1052,"line":1703},47,[1050,1705,1142],{"class":1141},[1050,1707,1708],{"class":1145}," multi_cache_operations",[1050,1710,1149],{"class":1071},[1050,1712,1714,1716,1719],{"class":1052,"line":1713},48,[1050,1715,1156],{"class":1155},[1050,1717,1718],{"class":1159},"Use multiple cache backends.",[1050,1720,1163],{"class":1155},[1050,1722,1724],{"class":1052,"line":1723},49,[1050,1725,1169],{"class":1067},[1050,1727,1729],{"class":1052,"line":1728},50,[1050,1730,1731],{"class":1056},"    # Default cache\n",[1050,1733,1735,1738,1740],{"class":1052,"line":1734},51,[1050,1736,1737],{"class":1067},"    default_cache ",[1050,1739,1220],{"class":1071},[1050,1741,1086],{"class":1067},[1050,1743,1745],{"class":1052,"line":1744},52,[1050,1746,1169],{"class":1067},[1050,1748,1750],{"class":1052,"line":1749},53,[1050,1751,1752],{"class":1056},"    # Specific cache backend\n",[1050,1754,1756,1759,1761,1764,1767,1769,1772,1774],{"class":1052,"line":1755},54,[1050,1757,1758],{"class":1067},"    redis_cache ",[1050,1760,1220],{"class":1071},[1050,1762,1763],{"class":1067}," caches",[1050,1765,1766],{"class":1071},"[",[1050,1768,1194],{"class":1193},[1050,1770,1771],{"class":1197},"redis",[1050,1773,1194],{"class":1193},[1050,1775,1776],{"class":1071},"]\n",[1050,1778,1780,1783,1785,1787,1789,1791,1794,1796],{"class":1052,"line":1779},55,[1050,1781,1782],{"class":1067},"    memcached_cache ",[1050,1784,1220],{"class":1071},[1050,1786,1763],{"class":1067},[1050,1788,1766],{"class":1071},[1050,1790,1194],{"class":1193},[1050,1792,1793],{"class":1197},"memcached",[1050,1795,1194],{"class":1193},[1050,1797,1776],{"class":1071},[1050,1799,1801],{"class":1052,"line":1800},56,[1050,1802,1169],{"class":1067},[1050,1804,1806],{"class":1052,"line":1805},57,[1050,1807,1808],{"class":1056},"    # Store in different caches\n",[1050,1810,1812,1815,1817,1819,1821,1823,1826,1828,1830,1833,1835,1838,1840,1842,1845,1847,1849,1852,1854,1856,1858,1861,1863],{"class":1052,"line":1811},58,[1050,1813,1814],{"class":1067},"    default_cache",[1050,1816,1072],{"class":1071},[1050,1818,1187],{"class":1186},[1050,1820,1190],{"class":1071},[1050,1822,1194],{"class":1193},[1050,1824,1825],{"class":1197},"user_data",[1050,1827,1194],{"class":1193},[1050,1829,1203],{"class":1071},[1050,1831,1832],{"class":1071}," {",[1050,1834,1194],{"class":1193},[1050,1836,1837],{"class":1197},"id",[1050,1839,1194],{"class":1193},[1050,1841,1482],{"class":1071},[1050,1843,1844],{"class":1223}," 1",[1050,1846,1203],{"class":1071},[1050,1848,1206],{"class":1193},[1050,1850,1851],{"class":1197},"name",[1050,1853,1194],{"class":1193},[1050,1855,1482],{"class":1071},[1050,1857,1206],{"class":1193},[1050,1859,1860],{"class":1197},"John",[1050,1862,1194],{"class":1193},[1050,1864,1865],{"class":1071},"})\n",[1050,1867,1869,1872,1874,1876,1878,1880,1883,1885,1887,1889,1891,1894,1896,1898,1900,1903,1905],{"class":1052,"line":1868},59,[1050,1870,1871],{"class":1067},"    redis_cache",[1050,1873,1072],{"class":1071},[1050,1875,1187],{"class":1186},[1050,1877,1190],{"class":1071},[1050,1879,1194],{"class":1193},[1050,1881,1882],{"class":1197},"session_data",[1050,1884,1194],{"class":1193},[1050,1886,1203],{"class":1071},[1050,1888,1832],{"class":1071},[1050,1890,1194],{"class":1193},[1050,1892,1893],{"class":1197},"session_id",[1050,1895,1194],{"class":1193},[1050,1897,1482],{"class":1071},[1050,1899,1206],{"class":1193},[1050,1901,1902],{"class":1197},"abc123",[1050,1904,1194],{"class":1193},[1050,1906,1865],{"class":1071},[1050,1908,1910,1913,1915,1917,1919,1921,1924,1926,1928,1930,1933,1935],{"class":1052,"line":1909},60,[1050,1911,1912],{"class":1067},"    memcached_cache",[1050,1914,1072],{"class":1071},[1050,1916,1187],{"class":1186},[1050,1918,1190],{"class":1071},[1050,1920,1194],{"class":1193},[1050,1922,1923],{"class":1197},"temp_data",[1050,1925,1194],{"class":1193},[1050,1927,1203],{"class":1071},[1050,1929,1206],{"class":1193},[1050,1931,1932],{"class":1197},"temporary_value",[1050,1934,1194],{"class":1193},[1050,1936,1268],{"class":1071},[1035,1938,1940],{"id":1939},"advanced-cache-operations","Advanced Cache Operations",[1040,1942,1944],{"className":1042,"code":1943,"language":1044,"meta":1045,"style":1045},"# Advanced cache operations\nfrom django.core.cache import cache\nimport time\nimport threading\n\nclass AdvancedCacheOperations:\n    \"\"\"Advanced caching patterns and operations.\"\"\"\n    \n    def atomic_increment(self, key, delta=1, default=0):\n        \"\"\"Atomically increment a cached counter.\"\"\"\n        try:\n            # Try to increment existing value\n            return cache.incr(key, delta)\n        except ValueError:\n            # Key doesn't exist, set initial value\n            cache.set(key, default + delta, timeout=None)\n            return default + delta\n    \n    def atomic_decrement(self, key, delta=1, default=0):\n        \"\"\"Atomically decrement a cached counter.\"\"\"\n        try:\n            return cache.decr(key, delta)\n        except ValueError:\n            # Key doesn't exist, set initial value\n            initial_value = max(0, default - delta)\n            cache.set(key, initial_value, timeout=None)\n            return initial_value\n    \n    def get_or_set_with_lock(self, key, callable_func, timeout=300, lock_timeout=10):\n        \"\"\"Get cached value or set it with a lock to prevent cache stampede.\"\"\"\n        # Try to get cached value first\n        value = cache.get(key)\n        if value is not None:\n            return value\n        \n        # Use a lock to prevent multiple processes from computing the same value\n        lock_key = f\"{key}:lock\"\n        \n        # Try to acquire lock\n        if cache.add(lock_key, \"locked\", timeout=lock_timeout):\n            try:\n                # Double-check cache after acquiring lock\n                value = cache.get(key)\n                if value is not None:\n                    return value\n                \n                # Compute and cache the value\n                value = callable_func()\n                cache.set(key, value, timeout)\n                return value\n            \n            finally:\n                # Always release the lock\n                cache.delete(lock_key)\n        else:\n            # Lock is held by another process, wait and retry\n            time.sleep(0.1)\n            return self.get_or_set_with_lock(key, callable_func, timeout, lock_timeout)\n    \n    def cache_with_tags(self, key, value, tags, timeout=300):\n        \"\"\"Cache value with associated tags for group invalidation.\"\"\"\n        # Store the main value\n        cache.set(key, value, timeout)\n        \n        # Store tag associations\n        for tag in tags:\n            tag_key = f\"tag:{tag}\"\n            tagged_keys = cache.get(tag_key, set())\n            tagged_keys.add(key)\n            cache.set(tag_key, tagged_keys, timeout)\n    \n    def invalidate_by_tag(self, tag):\n        \"\"\"Invalidate all cached values associated with a tag.\"\"\"\n        tag_key = f\"tag:{tag}\"\n        tagged_keys = cache.get(tag_key, set())\n        \n        if tagged_keys:\n            # Delete all tagged keys\n            cache.delete_many(list(tagged_keys))\n            # Delete the tag itself\n            cache.delete(tag_key)\n    \n    def cache_with_dependency(self, key, value, dependencies, timeout=300):\n        \"\"\"Cache value with dependencies for automatic invalidation.\"\"\"\n        # Store the main value\n        cache.set(key, value, timeout)\n        \n        # Store dependency information\n        dep_key = f\"{key}:deps\"\n        cache.set(dep_key, dependencies, timeout)\n        \n        # Register this key with each dependency\n        for dep in dependencies:\n            dep_list_key = f\"dep:{dep}\"\n            dependent_keys = cache.get(dep_list_key, set())\n            dependent_keys.add(key)\n            cache.set(dep_list_key, dependent_keys, timeout)\n    \n    def invalidate_dependents(self, dependency):\n        \"\"\"Invalidate all cached values that depend on a specific dependency.\"\"\"\n        dep_list_key = f\"dep:{dependency}\"\n        dependent_keys = cache.get(dep_list_key, set())\n        \n        if dependent_keys:\n            # Delete all dependent keys and their dependency info\n            keys_to_delete = list(dependent_keys)\n            keys_to_delete.extend([f\"{key}:deps\" for key in dependent_keys])\n            cache.delete_many(keys_to_delete)\n            \n            # Delete the dependency list\n            cache.delete(dep_list_key)\n\n# Usage examples\nadvanced_cache = AdvancedCacheOperations()\n\n# Atomic counter\npage_views = advanced_cache.atomic_increment('page_views')\nprint(f\"Page views: {page_views}\")\n\n# Cache with lock (prevents cache stampede)\ndef expensive_computation():\n    time.sleep(2)  # Simulate expensive operation\n    return \"computed_result\"\n\nresult = advanced_cache.get_or_set_with_lock(\n    'expensive_data',\n    expensive_computation,\n    timeout=600\n)\n\n# Cache with tags\nadvanced_cache.cache_with_tags(\n    'user_profile_123',\n    {'name': 'John', 'email': 'john@example.com'},\n    tags=['user_123', 'profiles'],\n    timeout=1800\n)\n\n# Invalidate by tag\nadvanced_cache.invalidate_by_tag('user_123')\n",[1047,1945,1946,1951,1969,1976,1983,1987,1998,2007,2011,2054,2064,2071,2076,2099,2110,2115,2150,2161,2165,2198,2207,2213,2234,2242,2246,2271,2298,2305,2309,2349,2358,2363,2382,2401,2408,2413,2418,2439,2443,2448,2485,2492,2497,2516,2531,2538,2543,2548,2559,2583,2590,2595,2602,2607,2621,2628,2633,2650,2681,2685,2719,2729,2735,2759,2764,2770,2786,2809,2836,2852,2876,2881,2900,2910,2930,2954,2959,2968,2974,2996,3002,3017,3022,3057,3067,3072,3095,3100,3106,3127,3151,3156,3162,3176,3198,3223,3239,3263,3268,3287,3297,3318,3342,3347,3356,3362,3380,3418,3434,3439,3445,3460,3465,3471,3483,3488,3494,3521,3544,3549,3555,3565,3585,3598,3603,3620,3633,3641,3652,3657,3662,3668,3681,3693,3734,3762,3772,3777,3782,3788],{"__ignoreMap":1045},[1050,1947,1948],{"class":1052,"line":1053},[1050,1949,1950],{"class":1056},"# Advanced cache operations\n",[1050,1952,1953,1955,1957,1959,1961,1963,1965,1967],{"class":1052,"line":1060},[1050,1954,1064],{"class":1063},[1050,1956,1068],{"class":1067},[1050,1958,1072],{"class":1071},[1050,1960,1075],{"class":1067},[1050,1962,1072],{"class":1071},[1050,1964,1080],{"class":1067},[1050,1966,1083],{"class":1063},[1050,1968,1086],{"class":1067},[1050,1970,1971,1973],{"class":1052,"line":1089},[1050,1972,1083],{"class":1063},[1050,1974,1975],{"class":1067}," time\n",[1050,1977,1978,1980],{"class":1052,"line":1109},[1050,1979,1083],{"class":1063},[1050,1981,1982],{"class":1067}," threading\n",[1050,1984,1985],{"class":1052,"line":1117},[1050,1986,1129],{"emptyLinePlaceholder":1128},[1050,1988,1989,1992,1996],{"class":1052,"line":1125},[1050,1990,1991],{"class":1141},"class",[1050,1993,1995],{"class":1994},"sD-vU"," AdvancedCacheOperations",[1050,1997,1396],{"class":1071},[1050,1999,2000,2002,2005],{"class":1052,"line":1132},[1050,2001,1156],{"class":1155},[1050,2003,2004],{"class":1159},"Advanced caching patterns and operations.",[1050,2006,1163],{"class":1155},[1050,2008,2009],{"class":1052,"line":1138},[1050,2010,1169],{"class":1067},[1050,2012,2013,2016,2019,2021,2025,2027,2031,2033,2036,2038,2041,2043,2046,2048,2051],{"class":1052,"line":1152},[1050,2014,2015],{"class":1141},"    def",[1050,2017,2018],{"class":1145}," atomic_increment",[1050,2020,1190],{"class":1071},[1050,2022,2024],{"class":2023},"sRjD_","self",[1050,2026,1203],{"class":1071},[1050,2028,2030],{"class":2029},"sCyAa"," key",[1050,2032,1203],{"class":1071},[1050,2034,2035],{"class":2029}," delta",[1050,2037,1220],{"class":1390},[1050,2039,2040],{"class":1223},"1",[1050,2042,1203],{"class":1071},[1050,2044,2045],{"class":2029}," default",[1050,2047,1220],{"class":1390},[1050,2049,2050],{"class":1223},"0",[1050,2052,2053],{"class":1071},"):\n",[1050,2055,2056,2059,2062],{"class":1052,"line":1166},[1050,2057,2058],{"class":1155},"        \"\"\"",[1050,2060,2061],{"class":1159},"Atomically increment a cached counter.",[1050,2063,1163],{"class":1155},[1050,2065,2066,2069],{"class":1052,"line":1172},[1050,2067,2068],{"class":1063},"        try",[1050,2070,1396],{"class":1071},[1050,2072,2073],{"class":1052,"line":1178},[1050,2074,2075],{"class":1056},"            # Try to increment existing value\n",[1050,2077,2078,2081,2083,2085,2088,2090,2093,2095,2097],{"class":1052,"line":1233},[1050,2079,2080],{"class":1063},"            return",[1050,2082,1252],{"class":1067},[1050,2084,1072],{"class":1071},[1050,2086,2087],{"class":1186},"incr",[1050,2089,1190],{"class":1071},[1050,2091,2092],{"class":1186},"key",[1050,2094,1203],{"class":1071},[1050,2096,2035],{"class":1186},[1050,2098,1268],{"class":1071},[1050,2100,2101,2104,2108],{"class":1052,"line":1238},[1050,2102,2103],{"class":1063},"        except",[1050,2105,2107],{"class":2106},"sa2tF"," ValueError",[1050,2109,1396],{"class":1071},[1050,2111,2112],{"class":1052,"line":1244},[1050,2113,2114],{"class":1056},"            # Key doesn't exist, set initial value\n",[1050,2116,2117,2120,2122,2124,2126,2128,2130,2133,2136,2138,2140,2142,2144,2148],{"class":1052,"line":1271},[1050,2118,2119],{"class":1067},"            cache",[1050,2121,1072],{"class":1071},[1050,2123,1187],{"class":1186},[1050,2125,1190],{"class":1071},[1050,2127,2092],{"class":1186},[1050,2129,1203],{"class":1071},[1050,2131,2132],{"class":1186}," default ",[1050,2134,2135],{"class":1390},"+",[1050,2137,2035],{"class":1186},[1050,2139,1203],{"class":1071},[1050,2141,1217],{"class":1216},[1050,2143,1220],{"class":1071},[1050,2145,2147],{"class":2146},"s8XtY","None",[1050,2149,1268],{"class":1071},[1050,2151,2152,2154,2156,2158],{"class":1052,"line":1301},[1050,2153,2080],{"class":1063},[1050,2155,2132],{"class":1067},[1050,2157,2135],{"class":1390},[1050,2159,2160],{"class":1067}," delta\n",[1050,2162,2163],{"class":1052,"line":1306},[1050,2164,1169],{"class":1067},[1050,2166,2167,2169,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,2192,2194,2196],{"class":1052,"line":1312},[1050,2168,2015],{"class":1141},[1050,2170,2171],{"class":1145}," atomic_decrement",[1050,2173,1190],{"class":1071},[1050,2175,2024],{"class":2023},[1050,2177,1203],{"class":1071},[1050,2179,2030],{"class":2029},[1050,2181,1203],{"class":1071},[1050,2183,2035],{"class":2029},[1050,2185,1220],{"class":1390},[1050,2187,2040],{"class":1223},[1050,2189,1203],{"class":1071},[1050,2191,2045],{"class":2029},[1050,2193,1220],{"class":1390},[1050,2195,2050],{"class":1223},[1050,2197,2053],{"class":1071},[1050,2199,2200,2202,2205],{"class":1052,"line":1345},[1050,2201,2058],{"class":1155},[1050,2203,2204],{"class":1159},"Atomically decrement a cached counter.",[1050,2206,1163],{"class":1155},[1050,2208,2209,2211],{"class":1052,"line":1367},[1050,2210,2068],{"class":1063},[1050,2212,1396],{"class":1071},[1050,2214,2215,2217,2219,2221,2224,2226,2228,2230,2232],{"class":1052,"line":1372},[1050,2216,2080],{"class":1063},[1050,2218,1252],{"class":1067},[1050,2220,1072],{"class":1071},[1050,2222,2223],{"class":1186},"decr",[1050,2225,1190],{"class":1071},[1050,2227,2092],{"class":1186},[1050,2229,1203],{"class":1071},[1050,2231,2035],{"class":1186},[1050,2233,1268],{"class":1071},[1050,2235,2236,2238,2240],{"class":1052,"line":1378},[1050,2237,2103],{"class":1063},[1050,2239,2107],{"class":2106},[1050,2241,1396],{"class":1071},[1050,2243,2244],{"class":1052,"line":1399},[1050,2245,2114],{"class":1056},[1050,2247,2248,2251,2253,2256,2258,2260,2262,2264,2267,2269],{"class":1052,"line":1416},[1050,2249,2250],{"class":1067},"            initial_value ",[1050,2252,1220],{"class":1071},[1050,2254,2255],{"class":1274}," max",[1050,2257,1190],{"class":1071},[1050,2259,2050],{"class":1223},[1050,2261,1203],{"class":1071},[1050,2263,2132],{"class":1186},[1050,2265,2266],{"class":1390},"-",[1050,2268,2035],{"class":1186},[1050,2270,1268],{"class":1071},[1050,2272,2273,2275,2277,2279,2281,2283,2285,2288,2290,2292,2294,2296],{"class":1052,"line":1421},[1050,2274,2119],{"class":1067},[1050,2276,1072],{"class":1071},[1050,2278,1187],{"class":1186},[1050,2280,1190],{"class":1071},[1050,2282,2092],{"class":1186},[1050,2284,1203],{"class":1071},[1050,2286,2287],{"class":1186}," initial_value",[1050,2289,1203],{"class":1071},[1050,2291,1217],{"class":1216},[1050,2293,1220],{"class":1071},[1050,2295,2147],{"class":2146},[1050,2297,1268],{"class":1071},[1050,2299,2300,2302],{"class":1052,"line":1427},[1050,2301,2080],{"class":1063},[1050,2303,2304],{"class":1067}," initial_value\n",[1050,2306,2307],{"class":1052,"line":1447},[1050,2308,1169],{"class":1067},[1050,2310,2311,2313,2316,2318,2320,2322,2324,2326,2329,2331,2333,2335,2337,2339,2342,2344,2347],{"class":1052,"line":1452},[1050,2312,2015],{"class":1141},[1050,2314,2315],{"class":1145}," get_or_set_with_lock",[1050,2317,1190],{"class":1071},[1050,2319,2024],{"class":2023},[1050,2321,1203],{"class":1071},[1050,2323,2030],{"class":2029},[1050,2325,1203],{"class":1071},[1050,2327,2328],{"class":2029}," callable_func",[1050,2330,1203],{"class":1071},[1050,2332,1217],{"class":2029},[1050,2334,1220],{"class":1390},[1050,2336,1224],{"class":1223},[1050,2338,1203],{"class":1071},[1050,2340,2341],{"class":2029}," lock_timeout",[1050,2343,1220],{"class":1390},[1050,2345,2346],{"class":1223},"10",[1050,2348,2053],{"class":1071},[1050,2350,2351,2353,2356],{"class":1052,"line":1458},[1050,2352,2058],{"class":1155},[1050,2354,2355],{"class":1159},"Get cached value or set it with a lock to prevent cache stampede.",[1050,2357,1163],{"class":1155},[1050,2359,2360],{"class":1052,"line":1471},[1050,2361,2362],{"class":1056},"        # Try to get cached value first\n",[1050,2364,2365,2368,2370,2372,2374,2376,2378,2380],{"class":1052,"line":1495},[1050,2366,2367],{"class":1067},"        value ",[1050,2369,1220],{"class":1071},[1050,2371,1252],{"class":1067},[1050,2373,1072],{"class":1071},[1050,2375,1257],{"class":1186},[1050,2377,1190],{"class":1071},[1050,2379,2092],{"class":1186},[1050,2381,1268],{"class":1071},[1050,2383,2384,2387,2390,2393,2396,2399],{"class":1052,"line":1516},[1050,2385,2386],{"class":1063},"        if",[1050,2388,2389],{"class":1067}," value ",[1050,2391,2392],{"class":1390},"is",[1050,2394,2395],{"class":1390}," not",[1050,2397,2398],{"class":2146}," None",[1050,2400,1396],{"class":1071},[1050,2402,2403,2405],{"class":1052,"line":1536},[1050,2404,2080],{"class":1063},[1050,2406,2407],{"class":1067}," value\n",[1050,2409,2410],{"class":1052,"line":1551},[1050,2411,2412],{"class":1067},"        \n",[1050,2414,2415],{"class":1052,"line":1556},[1050,2416,2417],{"class":1056},"        # Use a lock to prevent multiple processes from computing the same value\n",[1050,2419,2420,2423,2425,2428,2430,2432,2434,2436],{"class":1052,"line":1562},[1050,2421,2422],{"class":1067},"        lock_key ",[1050,2424,1220],{"class":1071},[1050,2426,2427],{"class":1141}," f",[1050,2429,1296],{"class":1197},[1050,2431,1287],{"class":1286},[1050,2433,2092],{"class":1067},[1050,2435,1293],{"class":1286},[1050,2437,2438],{"class":1197},":lock\"\n",[1050,2440,2441],{"class":1052,"line":1605},[1050,2442,2412],{"class":1067},[1050,2444,2445],{"class":1052,"line":1628},[1050,2446,2447],{"class":1056},"        # Try to acquire lock\n",[1050,2449,2450,2452,2454,2456,2459,2461,2464,2466,2469,2472,2474,2476,2478,2480,2483],{"class":1052,"line":1633},[1050,2451,2386],{"class":1063},[1050,2453,1252],{"class":1067},[1050,2455,1072],{"class":1071},[1050,2457,2458],{"class":1186},"add",[1050,2460,1190],{"class":1071},[1050,2462,2463],{"class":1186},"lock_key",[1050,2465,1203],{"class":1071},[1050,2467,2468],{"class":1193}," \"",[1050,2470,2471],{"class":1197},"locked",[1050,2473,1296],{"class":1193},[1050,2475,1203],{"class":1071},[1050,2477,1217],{"class":1216},[1050,2479,1220],{"class":1071},[1050,2481,2482],{"class":1186},"lock_timeout",[1050,2484,2053],{"class":1071},[1050,2486,2487,2490],{"class":1052,"line":1639},[1050,2488,2489],{"class":1063},"            try",[1050,2491,1396],{"class":1071},[1050,2493,2494],{"class":1052,"line":1675},[1050,2495,2496],{"class":1056},"                # Double-check cache after acquiring lock\n",[1050,2498,2499,2502,2504,2506,2508,2510,2512,2514],{"class":1052,"line":1680},[1050,2500,2501],{"class":1067},"                value ",[1050,2503,1220],{"class":1071},[1050,2505,1252],{"class":1067},[1050,2507,1072],{"class":1071},[1050,2509,1257],{"class":1186},[1050,2511,1190],{"class":1071},[1050,2513,2092],{"class":1186},[1050,2515,1268],{"class":1071},[1050,2517,2518,2521,2523,2525,2527,2529],{"class":1052,"line":1686},[1050,2519,2520],{"class":1063},"                if",[1050,2522,2389],{"class":1067},[1050,2524,2392],{"class":1390},[1050,2526,2395],{"class":1390},[1050,2528,2398],{"class":2146},[1050,2530,1396],{"class":1071},[1050,2532,2533,2536],{"class":1052,"line":1692},[1050,2534,2535],{"class":1063},"                    return",[1050,2537,2407],{"class":1067},[1050,2539,2540],{"class":1052,"line":1697},[1050,2541,2542],{"class":1067},"                \n",[1050,2544,2545],{"class":1052,"line":1703},[1050,2546,2547],{"class":1056},"                # Compute and cache the value\n",[1050,2549,2550,2552,2554,2556],{"class":1052,"line":1713},[1050,2551,2501],{"class":1067},[1050,2553,1220],{"class":1071},[1050,2555,2328],{"class":1186},[1050,2557,2558],{"class":1071},"()\n",[1050,2560,2561,2564,2566,2568,2570,2572,2574,2577,2579,2581],{"class":1052,"line":1723},[1050,2562,2563],{"class":1067},"                cache",[1050,2565,1072],{"class":1071},[1050,2567,1187],{"class":1186},[1050,2569,1190],{"class":1071},[1050,2571,2092],{"class":1186},[1050,2573,1203],{"class":1071},[1050,2575,2576],{"class":1186}," value",[1050,2578,1203],{"class":1071},[1050,2580,1217],{"class":1186},[1050,2582,1268],{"class":1071},[1050,2584,2585,2588],{"class":1052,"line":1728},[1050,2586,2587],{"class":1063},"                return",[1050,2589,2407],{"class":1067},[1050,2591,2592],{"class":1052,"line":1734},[1050,2593,2594],{"class":1067},"            \n",[1050,2596,2597,2600],{"class":1052,"line":1744},[1050,2598,2599],{"class":1063},"            finally",[1050,2601,1396],{"class":1071},[1050,2603,2604],{"class":1052,"line":1749},[1050,2605,2606],{"class":1056},"                # Always release the lock\n",[1050,2608,2609,2611,2613,2615,2617,2619],{"class":1052,"line":1755},[1050,2610,2563],{"class":1067},[1050,2612,1072],{"class":1071},[1050,2614,1434],{"class":1186},[1050,2616,1190],{"class":1071},[1050,2618,2463],{"class":1186},[1050,2620,1268],{"class":1071},[1050,2622,2623,2626],{"class":1052,"line":1779},[1050,2624,2625],{"class":1063},"        else",[1050,2627,1396],{"class":1071},[1050,2629,2630],{"class":1052,"line":1800},[1050,2631,2632],{"class":1056},"            # Lock is held by another process, wait and retry\n",[1050,2634,2635,2638,2640,2643,2645,2648],{"class":1052,"line":1805},[1050,2636,2637],{"class":1067},"            time",[1050,2639,1072],{"class":1071},[1050,2641,2642],{"class":1186},"sleep",[1050,2644,1190],{"class":1071},[1050,2646,2647],{"class":1223},"0.1",[1050,2649,1268],{"class":1071},[1050,2651,2652,2654,2658,2660,2663,2665,2667,2669,2671,2673,2675,2677,2679],{"class":1052,"line":1811},[1050,2653,2080],{"class":1063},[1050,2655,2657],{"class":2656},"se3Ec"," self",[1050,2659,1072],{"class":1071},[1050,2661,2662],{"class":1186},"get_or_set_with_lock",[1050,2664,1190],{"class":1071},[1050,2666,2092],{"class":1186},[1050,2668,1203],{"class":1071},[1050,2670,2328],{"class":1186},[1050,2672,1203],{"class":1071},[1050,2674,1217],{"class":1186},[1050,2676,1203],{"class":1071},[1050,2678,2341],{"class":1186},[1050,2680,1268],{"class":1071},[1050,2682,2683],{"class":1052,"line":1868},[1050,2684,1169],{"class":1067},[1050,2686,2687,2689,2692,2694,2696,2698,2700,2702,2704,2706,2709,2711,2713,2715,2717],{"class":1052,"line":1909},[1050,2688,2015],{"class":1141},[1050,2690,2691],{"class":1145}," cache_with_tags",[1050,2693,1190],{"class":1071},[1050,2695,2024],{"class":2023},[1050,2697,1203],{"class":1071},[1050,2699,2030],{"class":2029},[1050,2701,1203],{"class":1071},[1050,2703,2576],{"class":2029},[1050,2705,1203],{"class":1071},[1050,2707,2708],{"class":2029}," tags",[1050,2710,1203],{"class":1071},[1050,2712,1217],{"class":2029},[1050,2714,1220],{"class":1390},[1050,2716,1224],{"class":1223},[1050,2718,2053],{"class":1071},[1050,2720,2722,2724,2727],{"class":1052,"line":2721},61,[1050,2723,2058],{"class":1155},[1050,2725,2726],{"class":1159},"Cache value with associated tags for group invalidation.",[1050,2728,1163],{"class":1155},[1050,2730,2732],{"class":1052,"line":2731},62,[1050,2733,2734],{"class":1056},"        # Store the main value\n",[1050,2736,2738,2741,2743,2745,2747,2749,2751,2753,2755,2757],{"class":1052,"line":2737},63,[1050,2739,2740],{"class":1067},"        cache",[1050,2742,1072],{"class":1071},[1050,2744,1187],{"class":1186},[1050,2746,1190],{"class":1071},[1050,2748,2092],{"class":1186},[1050,2750,1203],{"class":1071},[1050,2752,2576],{"class":1186},[1050,2754,1203],{"class":1071},[1050,2756,1217],{"class":1186},[1050,2758,1268],{"class":1071},[1050,2760,2762],{"class":1052,"line":2761},64,[1050,2763,2412],{"class":1067},[1050,2765,2767],{"class":1052,"line":2766},65,[1050,2768,2769],{"class":1056},"        # Store tag associations\n",[1050,2771,2773,2776,2779,2782,2784],{"class":1052,"line":2772},66,[1050,2774,2775],{"class":1063},"        for",[1050,2777,2778],{"class":1067}," tag ",[1050,2780,2781],{"class":1063},"in",[1050,2783,2708],{"class":1067},[1050,2785,1396],{"class":1071},[1050,2787,2789,2792,2794,2796,2799,2801,2804,2806],{"class":1052,"line":2788},67,[1050,2790,2791],{"class":1067},"            tag_key ",[1050,2793,1220],{"class":1071},[1050,2795,2427],{"class":1141},[1050,2797,2798],{"class":1197},"\"tag:",[1050,2800,1287],{"class":1286},[1050,2802,2803],{"class":1067},"tag",[1050,2805,1293],{"class":1286},[1050,2807,2808],{"class":1197},"\"\n",[1050,2810,2812,2815,2817,2819,2821,2823,2825,2828,2830,2833],{"class":1052,"line":2811},68,[1050,2813,2814],{"class":1067},"            tagged_keys ",[1050,2816,1220],{"class":1071},[1050,2818,1252],{"class":1067},[1050,2820,1072],{"class":1071},[1050,2822,1257],{"class":1186},[1050,2824,1190],{"class":1071},[1050,2826,2827],{"class":1186},"tag_key",[1050,2829,1203],{"class":1071},[1050,2831,2832],{"class":2106}," set",[1050,2834,2835],{"class":1071},"())\n",[1050,2837,2839,2842,2844,2846,2848,2850],{"class":1052,"line":2838},69,[1050,2840,2841],{"class":1067},"            tagged_keys",[1050,2843,1072],{"class":1071},[1050,2845,2458],{"class":1186},[1050,2847,1190],{"class":1071},[1050,2849,2092],{"class":1186},[1050,2851,1268],{"class":1071},[1050,2853,2855,2857,2859,2861,2863,2865,2867,2870,2872,2874],{"class":1052,"line":2854},70,[1050,2856,2119],{"class":1067},[1050,2858,1072],{"class":1071},[1050,2860,1187],{"class":1186},[1050,2862,1190],{"class":1071},[1050,2864,2827],{"class":1186},[1050,2866,1203],{"class":1071},[1050,2868,2869],{"class":1186}," tagged_keys",[1050,2871,1203],{"class":1071},[1050,2873,1217],{"class":1186},[1050,2875,1268],{"class":1071},[1050,2877,2879],{"class":1052,"line":2878},71,[1050,2880,1169],{"class":1067},[1050,2882,2884,2886,2889,2891,2893,2895,2898],{"class":1052,"line":2883},72,[1050,2885,2015],{"class":1141},[1050,2887,2888],{"class":1145}," invalidate_by_tag",[1050,2890,1190],{"class":1071},[1050,2892,2024],{"class":2023},[1050,2894,1203],{"class":1071},[1050,2896,2897],{"class":2029}," tag",[1050,2899,2053],{"class":1071},[1050,2901,2903,2905,2908],{"class":1052,"line":2902},73,[1050,2904,2058],{"class":1155},[1050,2906,2907],{"class":1159},"Invalidate all cached values associated with a tag.",[1050,2909,1163],{"class":1155},[1050,2911,2913,2916,2918,2920,2922,2924,2926,2928],{"class":1052,"line":2912},74,[1050,2914,2915],{"class":1067},"        tag_key ",[1050,2917,1220],{"class":1071},[1050,2919,2427],{"class":1141},[1050,2921,2798],{"class":1197},[1050,2923,1287],{"class":1286},[1050,2925,2803],{"class":1067},[1050,2927,1293],{"class":1286},[1050,2929,2808],{"class":1197},[1050,2931,2933,2936,2938,2940,2942,2944,2946,2948,2950,2952],{"class":1052,"line":2932},75,[1050,2934,2935],{"class":1067},"        tagged_keys ",[1050,2937,1220],{"class":1071},[1050,2939,1252],{"class":1067},[1050,2941,1072],{"class":1071},[1050,2943,1257],{"class":1186},[1050,2945,1190],{"class":1071},[1050,2947,2827],{"class":1186},[1050,2949,1203],{"class":1071},[1050,2951,2832],{"class":2106},[1050,2953,2835],{"class":1071},[1050,2955,2957],{"class":1052,"line":2956},76,[1050,2958,2412],{"class":1067},[1050,2960,2962,2964,2966],{"class":1052,"line":2961},77,[1050,2963,2386],{"class":1063},[1050,2965,2869],{"class":1067},[1050,2967,1396],{"class":1071},[1050,2969,2971],{"class":1052,"line":2970},78,[1050,2972,2973],{"class":1056},"            # Delete all tagged keys\n",[1050,2975,2977,2979,2981,2983,2985,2988,2990,2993],{"class":1052,"line":2976},79,[1050,2978,2119],{"class":1067},[1050,2980,1072],{"class":1071},[1050,2982,1646],{"class":1186},[1050,2984,1190],{"class":1071},[1050,2986,2987],{"class":2106},"list",[1050,2989,1190],{"class":1071},[1050,2991,2992],{"class":1186},"tagged_keys",[1050,2994,2995],{"class":1071},"))\n",[1050,2997,2999],{"class":1052,"line":2998},80,[1050,3000,3001],{"class":1056},"            # Delete the tag itself\n",[1050,3003,3005,3007,3009,3011,3013,3015],{"class":1052,"line":3004},81,[1050,3006,2119],{"class":1067},[1050,3008,1072],{"class":1071},[1050,3010,1434],{"class":1186},[1050,3012,1190],{"class":1071},[1050,3014,2827],{"class":1186},[1050,3016,1268],{"class":1071},[1050,3018,3020],{"class":1052,"line":3019},82,[1050,3021,1169],{"class":1067},[1050,3023,3025,3027,3030,3032,3034,3036,3038,3040,3042,3044,3047,3049,3051,3053,3055],{"class":1052,"line":3024},83,[1050,3026,2015],{"class":1141},[1050,3028,3029],{"class":1145}," cache_with_dependency",[1050,3031,1190],{"class":1071},[1050,3033,2024],{"class":2023},[1050,3035,1203],{"class":1071},[1050,3037,2030],{"class":2029},[1050,3039,1203],{"class":1071},[1050,3041,2576],{"class":2029},[1050,3043,1203],{"class":1071},[1050,3045,3046],{"class":2029}," dependencies",[1050,3048,1203],{"class":1071},[1050,3050,1217],{"class":2029},[1050,3052,1220],{"class":1390},[1050,3054,1224],{"class":1223},[1050,3056,2053],{"class":1071},[1050,3058,3060,3062,3065],{"class":1052,"line":3059},84,[1050,3061,2058],{"class":1155},[1050,3063,3064],{"class":1159},"Cache value with dependencies for automatic invalidation.",[1050,3066,1163],{"class":1155},[1050,3068,3070],{"class":1052,"line":3069},85,[1050,3071,2734],{"class":1056},[1050,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093],{"class":1052,"line":3074},86,[1050,3076,2740],{"class":1067},[1050,3078,1072],{"class":1071},[1050,3080,1187],{"class":1186},[1050,3082,1190],{"class":1071},[1050,3084,2092],{"class":1186},[1050,3086,1203],{"class":1071},[1050,3088,2576],{"class":1186},[1050,3090,1203],{"class":1071},[1050,3092,1217],{"class":1186},[1050,3094,1268],{"class":1071},[1050,3096,3098],{"class":1052,"line":3097},87,[1050,3099,2412],{"class":1067},[1050,3101,3103],{"class":1052,"line":3102},88,[1050,3104,3105],{"class":1056},"        # Store dependency information\n",[1050,3107,3109,3112,3114,3116,3118,3120,3122,3124],{"class":1052,"line":3108},89,[1050,3110,3111],{"class":1067},"        dep_key ",[1050,3113,1220],{"class":1071},[1050,3115,2427],{"class":1141},[1050,3117,1296],{"class":1197},[1050,3119,1287],{"class":1286},[1050,3121,2092],{"class":1067},[1050,3123,1293],{"class":1286},[1050,3125,3126],{"class":1197},":deps\"\n",[1050,3128,3130,3132,3134,3136,3138,3141,3143,3145,3147,3149],{"class":1052,"line":3129},90,[1050,3131,2740],{"class":1067},[1050,3133,1072],{"class":1071},[1050,3135,1187],{"class":1186},[1050,3137,1190],{"class":1071},[1050,3139,3140],{"class":1186},"dep_key",[1050,3142,1203],{"class":1071},[1050,3144,3046],{"class":1186},[1050,3146,1203],{"class":1071},[1050,3148,1217],{"class":1186},[1050,3150,1268],{"class":1071},[1050,3152,3154],{"class":1052,"line":3153},91,[1050,3155,2412],{"class":1067},[1050,3157,3159],{"class":1052,"line":3158},92,[1050,3160,3161],{"class":1056},"        # Register this key with each dependency\n",[1050,3163,3165,3167,3170,3172,3174],{"class":1052,"line":3164},93,[1050,3166,2775],{"class":1063},[1050,3168,3169],{"class":1067}," dep ",[1050,3171,2781],{"class":1063},[1050,3173,3046],{"class":1067},[1050,3175,1396],{"class":1071},[1050,3177,3179,3182,3184,3186,3189,3191,3194,3196],{"class":1052,"line":3178},94,[1050,3180,3181],{"class":1067},"            dep_list_key ",[1050,3183,1220],{"class":1071},[1050,3185,2427],{"class":1141},[1050,3187,3188],{"class":1197},"\"dep:",[1050,3190,1287],{"class":1286},[1050,3192,3193],{"class":1067},"dep",[1050,3195,1293],{"class":1286},[1050,3197,2808],{"class":1197},[1050,3199,3201,3204,3206,3208,3210,3212,3214,3217,3219,3221],{"class":1052,"line":3200},95,[1050,3202,3203],{"class":1067},"            dependent_keys ",[1050,3205,1220],{"class":1071},[1050,3207,1252],{"class":1067},[1050,3209,1072],{"class":1071},[1050,3211,1257],{"class":1186},[1050,3213,1190],{"class":1071},[1050,3215,3216],{"class":1186},"dep_list_key",[1050,3218,1203],{"class":1071},[1050,3220,2832],{"class":2106},[1050,3222,2835],{"class":1071},[1050,3224,3226,3229,3231,3233,3235,3237],{"class":1052,"line":3225},96,[1050,3227,3228],{"class":1067},"            dependent_keys",[1050,3230,1072],{"class":1071},[1050,3232,2458],{"class":1186},[1050,3234,1190],{"class":1071},[1050,3236,2092],{"class":1186},[1050,3238,1268],{"class":1071},[1050,3240,3242,3244,3246,3248,3250,3252,3254,3257,3259,3261],{"class":1052,"line":3241},97,[1050,3243,2119],{"class":1067},[1050,3245,1072],{"class":1071},[1050,3247,1187],{"class":1186},[1050,3249,1190],{"class":1071},[1050,3251,3216],{"class":1186},[1050,3253,1203],{"class":1071},[1050,3255,3256],{"class":1186}," dependent_keys",[1050,3258,1203],{"class":1071},[1050,3260,1217],{"class":1186},[1050,3262,1268],{"class":1071},[1050,3264,3266],{"class":1052,"line":3265},98,[1050,3267,1169],{"class":1067},[1050,3269,3271,3273,3276,3278,3280,3282,3285],{"class":1052,"line":3270},99,[1050,3272,2015],{"class":1141},[1050,3274,3275],{"class":1145}," invalidate_dependents",[1050,3277,1190],{"class":1071},[1050,3279,2024],{"class":2023},[1050,3281,1203],{"class":1071},[1050,3283,3284],{"class":2029}," dependency",[1050,3286,2053],{"class":1071},[1050,3288,3290,3292,3295],{"class":1052,"line":3289},100,[1050,3291,2058],{"class":1155},[1050,3293,3294],{"class":1159},"Invalidate all cached values that depend on a specific dependency.",[1050,3296,1163],{"class":1155},[1050,3298,3300,3303,3305,3307,3309,3311,3314,3316],{"class":1052,"line":3299},101,[1050,3301,3302],{"class":1067},"        dep_list_key ",[1050,3304,1220],{"class":1071},[1050,3306,2427],{"class":1141},[1050,3308,3188],{"class":1197},[1050,3310,1287],{"class":1286},[1050,3312,3313],{"class":1067},"dependency",[1050,3315,1293],{"class":1286},[1050,3317,2808],{"class":1197},[1050,3319,3321,3324,3326,3328,3330,3332,3334,3336,3338,3340],{"class":1052,"line":3320},102,[1050,3322,3323],{"class":1067},"        dependent_keys ",[1050,3325,1220],{"class":1071},[1050,3327,1252],{"class":1067},[1050,3329,1072],{"class":1071},[1050,3331,1257],{"class":1186},[1050,3333,1190],{"class":1071},[1050,3335,3216],{"class":1186},[1050,3337,1203],{"class":1071},[1050,3339,2832],{"class":2106},[1050,3341,2835],{"class":1071},[1050,3343,3345],{"class":1052,"line":3344},103,[1050,3346,2412],{"class":1067},[1050,3348,3350,3352,3354],{"class":1052,"line":3349},104,[1050,3351,2386],{"class":1063},[1050,3353,3256],{"class":1067},[1050,3355,1396],{"class":1071},[1050,3357,3359],{"class":1052,"line":3358},105,[1050,3360,3361],{"class":1056},"            # Delete all dependent keys and their dependency info\n",[1050,3363,3365,3368,3370,3373,3375,3378],{"class":1052,"line":3364},106,[1050,3366,3367],{"class":1067},"            keys_to_delete ",[1050,3369,1220],{"class":1071},[1050,3371,3372],{"class":2106}," list",[1050,3374,1190],{"class":1071},[1050,3376,3377],{"class":1186},"dependent_keys",[1050,3379,1268],{"class":1071},[1050,3381,3383,3386,3388,3391,3393,3395,3397,3399,3401,3403,3406,3409,3412,3414,3416],{"class":1052,"line":3382},107,[1050,3384,3385],{"class":1067},"            keys_to_delete",[1050,3387,1072],{"class":1071},[1050,3389,3390],{"class":1186},"extend",[1050,3392,1577],{"class":1071},[1050,3394,1280],{"class":1141},[1050,3396,1296],{"class":1197},[1050,3398,1287],{"class":1286},[1050,3400,2092],{"class":1186},[1050,3402,1293],{"class":1286},[1050,3404,3405],{"class":1197},":deps\"",[1050,3407,3408],{"class":1063}," for",[1050,3410,3411],{"class":1186}," key ",[1050,3413,2781],{"class":1063},[1050,3415,3256],{"class":1186},[1050,3417,1602],{"class":1071},[1050,3419,3421,3423,3425,3427,3429,3432],{"class":1052,"line":3420},108,[1050,3422,2119],{"class":1067},[1050,3424,1072],{"class":1071},[1050,3426,1646],{"class":1186},[1050,3428,1190],{"class":1071},[1050,3430,3431],{"class":1186},"keys_to_delete",[1050,3433,1268],{"class":1071},[1050,3435,3437],{"class":1052,"line":3436},109,[1050,3438,2594],{"class":1067},[1050,3440,3442],{"class":1052,"line":3441},110,[1050,3443,3444],{"class":1056},"            # Delete the dependency list\n",[1050,3446,3448,3450,3452,3454,3456,3458],{"class":1052,"line":3447},111,[1050,3449,2119],{"class":1067},[1050,3451,1072],{"class":1071},[1050,3453,1434],{"class":1186},[1050,3455,1190],{"class":1071},[1050,3457,3216],{"class":1186},[1050,3459,1268],{"class":1071},[1050,3461,3463],{"class":1052,"line":3462},112,[1050,3464,1129],{"emptyLinePlaceholder":1128},[1050,3466,3468],{"class":1052,"line":3467},113,[1050,3469,3470],{"class":1056},"# Usage examples\n",[1050,3472,3474,3477,3479,3481],{"class":1052,"line":3473},114,[1050,3475,3476],{"class":1067},"advanced_cache ",[1050,3478,1220],{"class":1071},[1050,3480,1995],{"class":1186},[1050,3482,2558],{"class":1071},[1050,3484,3486],{"class":1052,"line":3485},115,[1050,3487,1129],{"emptyLinePlaceholder":1128},[1050,3489,3491],{"class":1052,"line":3490},116,[1050,3492,3493],{"class":1056},"# Atomic counter\n",[1050,3495,3497,3500,3502,3505,3507,3510,3512,3514,3517,3519],{"class":1052,"line":3496},117,[1050,3498,3499],{"class":1067},"page_views ",[1050,3501,1220],{"class":1071},[1050,3503,3504],{"class":1067}," advanced_cache",[1050,3506,1072],{"class":1071},[1050,3508,3509],{"class":1186},"atomic_increment",[1050,3511,1190],{"class":1071},[1050,3513,1194],{"class":1193},[1050,3515,3516],{"class":1197},"page_views",[1050,3518,1194],{"class":1193},[1050,3520,1268],{"class":1071},[1050,3522,3524,3527,3529,3531,3534,3536,3538,3540,3542],{"class":1052,"line":3523},118,[1050,3525,3526],{"class":1274},"print",[1050,3528,1190],{"class":1071},[1050,3530,1280],{"class":1141},[1050,3532,3533],{"class":1197},"\"Page views: ",[1050,3535,1287],{"class":1286},[1050,3537,3516],{"class":1186},[1050,3539,1293],{"class":1286},[1050,3541,1296],{"class":1197},[1050,3543,1268],{"class":1071},[1050,3545,3547],{"class":1052,"line":3546},119,[1050,3548,1129],{"emptyLinePlaceholder":1128},[1050,3550,3552],{"class":1052,"line":3551},120,[1050,3553,3554],{"class":1056},"# Cache with lock (prevents cache stampede)\n",[1050,3556,3558,3560,3563],{"class":1052,"line":3557},121,[1050,3559,1142],{"class":1141},[1050,3561,3562],{"class":1145}," expensive_computation",[1050,3564,1149],{"class":1071},[1050,3566,3568,3571,3573,3575,3577,3580,3582],{"class":1052,"line":3567},122,[1050,3569,3570],{"class":1067},"    time",[1050,3572,1072],{"class":1071},[1050,3574,2642],{"class":1186},[1050,3576,1190],{"class":1071},[1050,3578,3579],{"class":1223},"2",[1050,3581,1227],{"class":1071},[1050,3583,3584],{"class":1056},"  # Simulate expensive operation\n",[1050,3586,3588,3591,3593,3596],{"class":1052,"line":3587},123,[1050,3589,3590],{"class":1063},"    return",[1050,3592,2468],{"class":1193},[1050,3594,3595],{"class":1197},"computed_result",[1050,3597,2808],{"class":1193},[1050,3599,3601],{"class":1052,"line":3600},124,[1050,3602,1129],{"emptyLinePlaceholder":1128},[1050,3604,3606,3609,3611,3613,3615,3617],{"class":1052,"line":3605},125,[1050,3607,3608],{"class":1067},"result ",[1050,3610,1220],{"class":1071},[1050,3612,3504],{"class":1067},[1050,3614,1072],{"class":1071},[1050,3616,2662],{"class":1186},[1050,3618,3619],{"class":1071},"(\n",[1050,3621,3623,3626,3629,3631],{"class":1052,"line":3622},126,[1050,3624,3625],{"class":1193},"    '",[1050,3627,3628],{"class":1197},"expensive_data",[1050,3630,1194],{"class":1193},[1050,3632,1492],{"class":1071},[1050,3634,3636,3639],{"class":1052,"line":3635},127,[1050,3637,3638],{"class":1186},"    expensive_computation",[1050,3640,1492],{"class":1071},[1050,3642,3644,3647,3649],{"class":1052,"line":3643},128,[1050,3645,3646],{"class":1216},"    timeout",[1050,3648,1220],{"class":1071},[1050,3650,3651],{"class":1223},"600\n",[1050,3653,3655],{"class":1052,"line":3654},129,[1050,3656,1268],{"class":1071},[1050,3658,3660],{"class":1052,"line":3659},130,[1050,3661,1129],{"emptyLinePlaceholder":1128},[1050,3663,3665],{"class":1052,"line":3664},131,[1050,3666,3667],{"class":1056},"# Cache with tags\n",[1050,3669,3671,3674,3676,3679],{"class":1052,"line":3670},132,[1050,3672,3673],{"class":1067},"advanced_cache",[1050,3675,1072],{"class":1071},[1050,3677,3678],{"class":1186},"cache_with_tags",[1050,3680,3619],{"class":1071},[1050,3682,3684,3686,3689,3691],{"class":1052,"line":3683},133,[1050,3685,3625],{"class":1193},[1050,3687,3688],{"class":1197},"user_profile_123",[1050,3690,1194],{"class":1193},[1050,3692,1492],{"class":1071},[1050,3694,3696,3699,3701,3703,3705,3707,3709,3711,3713,3715,3717,3720,3722,3724,3726,3729,3731],{"class":1052,"line":3695},134,[1050,3697,3698],{"class":1071},"    {",[1050,3700,1194],{"class":1193},[1050,3702,1851],{"class":1197},[1050,3704,1194],{"class":1193},[1050,3706,1482],{"class":1071},[1050,3708,1206],{"class":1193},[1050,3710,1860],{"class":1197},[1050,3712,1194],{"class":1193},[1050,3714,1203],{"class":1071},[1050,3716,1206],{"class":1193},[1050,3718,3719],{"class":1197},"email",[1050,3721,1194],{"class":1193},[1050,3723,1482],{"class":1071},[1050,3725,1206],{"class":1193},[1050,3727,3728],{"class":1197},"john@example.com",[1050,3730,1194],{"class":1193},[1050,3732,3733],{"class":1071},"},\n",[1050,3735,3737,3740,3743,3745,3748,3750,3752,3754,3757,3759],{"class":1052,"line":3736},135,[1050,3738,3739],{"class":1216},"    tags",[1050,3741,3742],{"class":1071},"=[",[1050,3744,1194],{"class":1193},[1050,3746,3747],{"class":1197},"user_123",[1050,3749,1194],{"class":1193},[1050,3751,1203],{"class":1071},[1050,3753,1206],{"class":1193},[1050,3755,3756],{"class":1197},"profiles",[1050,3758,1194],{"class":1193},[1050,3760,3761],{"class":1071},"],\n",[1050,3763,3765,3767,3769],{"class":1052,"line":3764},136,[1050,3766,3646],{"class":1216},[1050,3768,1220],{"class":1071},[1050,3770,3771],{"class":1223},"1800\n",[1050,3773,3775],{"class":1052,"line":3774},137,[1050,3776,1268],{"class":1071},[1050,3778,3780],{"class":1052,"line":3779},138,[1050,3781,1129],{"emptyLinePlaceholder":1128},[1050,3783,3785],{"class":1052,"line":3784},139,[1050,3786,3787],{"class":1056},"# Invalidate by tag\n",[1050,3789,3791,3793,3795,3798,3800,3802,3804,3806],{"class":1052,"line":3790},140,[1050,3792,3673],{"class":1067},[1050,3794,1072],{"class":1071},[1050,3796,3797],{"class":1186},"invalidate_by_tag",[1050,3799,1190],{"class":1071},[1050,3801,1194],{"class":1193},[1050,3803,3747],{"class":1197},[1050,3805,1194],{"class":1193},[1050,3807,1268],{"class":1071},[1030,3809,3811],{"id":3810},"caching-patterns","Caching Patterns",[1035,3813,3815],{"id":3814},"memoization-pattern","Memoization Pattern",[1040,3817,3819],{"className":1042,"code":3818,"language":1044,"meta":1045,"style":1045},"# Memoization with caching\nfrom functools import wraps\nfrom django.core.cache import cache\nimport hashlib\nimport pickle\n\ndef memoize(timeout=300, cache_key_func=None):\n    \"\"\"Decorator to memoize function results in cache.\"\"\"\n    def decorator(func):\n        @wraps(func)\n        def wrapper(*args, **kwargs):\n            # Generate cache key\n            if cache_key_func:\n                cache_key = cache_key_func(*args, **kwargs)\n            else:\n                # Default key generation\n                key_data = pickle.dumps((func.__name__, args, sorted(kwargs.items())))\n                cache_key = f\"memoize:{hashlib.md5(key_data).hexdigest()}\"\n            \n            # Try cache first\n            result = cache.get(cache_key)\n            if result is not None:\n                return result\n            \n            # Compute and cache result\n            result = func(*args, **kwargs)\n            cache.set(cache_key, result, timeout)\n            \n            return result\n        \n        # Add cache control methods\n        wrapper.cache_clear = lambda: cache.clear()\n        wrapper.cache_info = lambda: {\"cache_key\": cache_key}\n        \n        return wrapper\n    return decorator\n\n# Usage examples\n@memoize(timeout=600)\ndef fibonacci(n):\n    \"\"\"Cached fibonacci calculation.\"\"\"\n    if n \u003C 2:\n        return n\n    return fibonacci(n-1) + fibonacci(n-2)\n\n@memoize(timeout=1800, cache_key_func=lambda user_id: f\"user_stats_{user_id}\")\ndef get_user_statistics(user_id):\n    \"\"\"Get cached user statistics.\"\"\"\n    from django.db.models import Count, Avg\n    from .models import Post, Comment\n    \n    stats = {\n        'post_count': Post.objects.filter(author_id=user_id).count(),\n        'comment_count': Comment.objects.filter(author_id=user_id).count(),\n        'avg_post_length': Post.objects.filter(author_id=user_id).aggregate(\n            avg_length=Avg('content_length')\n        )['avg_length'] or 0,\n    }\n    \n    return stats\n\n# Usage\nuser_stats = get_user_statistics(123)  # First call: computed and cached\nuser_stats = get_user_statistics(123)  # Second call: returned from cache\n",[1047,3820,3821,3826,3838,3856,3863,3869,3873,3900,3909,3923,3937,3963,3968,3977,4000,4007,4012,4060,4099,4103,4108,4128,4143,4150,4154,4159,4182,4205,4209,4215,4219,4224,4252,4283,4287,4295,4302,4306,4310,4328,4342,4351,4366,4373,4404,4408,4453,4466,4475,4502,4521,4525,4535,4575,4611,4647,4668,4691,4696,4700,4707,4711,4716,4735],{"__ignoreMap":1045},[1050,3822,3823],{"class":1052,"line":1053},[1050,3824,3825],{"class":1056},"# Memoization with caching\n",[1050,3827,3828,3830,3833,3835],{"class":1052,"line":1060},[1050,3829,1064],{"class":1063},[1050,3831,3832],{"class":1067}," functools ",[1050,3834,1083],{"class":1063},[1050,3836,3837],{"class":1067}," wraps\n",[1050,3839,3840,3842,3844,3846,3848,3850,3852,3854],{"class":1052,"line":1089},[1050,3841,1064],{"class":1063},[1050,3843,1068],{"class":1067},[1050,3845,1072],{"class":1071},[1050,3847,1075],{"class":1067},[1050,3849,1072],{"class":1071},[1050,3851,1080],{"class":1067},[1050,3853,1083],{"class":1063},[1050,3855,1086],{"class":1067},[1050,3857,3858,3860],{"class":1052,"line":1109},[1050,3859,1083],{"class":1063},[1050,3861,3862],{"class":1067}," hashlib\n",[1050,3864,3865,3867],{"class":1052,"line":1117},[1050,3866,1083],{"class":1063},[1050,3868,1122],{"class":1067},[1050,3870,3871],{"class":1052,"line":1125},[1050,3872,1129],{"emptyLinePlaceholder":1128},[1050,3874,3875,3877,3880,3882,3885,3887,3889,3891,3894,3896,3898],{"class":1052,"line":1132},[1050,3876,1142],{"class":1141},[1050,3878,3879],{"class":1145}," memoize",[1050,3881,1190],{"class":1071},[1050,3883,3884],{"class":2029},"timeout",[1050,3886,1220],{"class":1390},[1050,3888,1224],{"class":1223},[1050,3890,1203],{"class":1071},[1050,3892,3893],{"class":2029}," cache_key_func",[1050,3895,1220],{"class":1390},[1050,3897,2147],{"class":2146},[1050,3899,2053],{"class":1071},[1050,3901,3902,3904,3907],{"class":1052,"line":1138},[1050,3903,1156],{"class":1155},[1050,3905,3906],{"class":1159},"Decorator to memoize function results in cache.",[1050,3908,1163],{"class":1155},[1050,3910,3911,3913,3916,3918,3921],{"class":1052,"line":1152},[1050,3912,2015],{"class":1141},[1050,3914,3915],{"class":1145}," decorator",[1050,3917,1190],{"class":1071},[1050,3919,3920],{"class":2029},"func",[1050,3922,2053],{"class":1071},[1050,3924,3925,3928,3931,3933,3935],{"class":1052,"line":1166},[1050,3926,3927],{"class":1071},"        @",[1050,3929,3930],{"class":1145},"wraps",[1050,3932,1190],{"class":1071},[1050,3934,3920],{"class":1186},[1050,3936,1268],{"class":1071},[1050,3938,3939,3942,3945,3947,3950,3953,3955,3958,3961],{"class":1052,"line":1172},[1050,3940,3941],{"class":1141},"        def",[1050,3943,3944],{"class":1145}," wrapper",[1050,3946,1190],{"class":1071},[1050,3948,3949],{"class":1390},"*",[1050,3951,3952],{"class":2029},"args",[1050,3954,1203],{"class":1071},[1050,3956,3957],{"class":1390}," **",[1050,3959,3960],{"class":2029},"kwargs",[1050,3962,2053],{"class":1071},[1050,3964,3965],{"class":1052,"line":1178},[1050,3966,3967],{"class":1056},"            # Generate cache key\n",[1050,3969,3970,3973,3975],{"class":1052,"line":1233},[1050,3971,3972],{"class":1063},"            if",[1050,3974,3893],{"class":1067},[1050,3976,1396],{"class":1071},[1050,3978,3979,3982,3984,3986,3988,3990,3992,3994,3996,3998],{"class":1052,"line":1238},[1050,3980,3981],{"class":1067},"                cache_key ",[1050,3983,1220],{"class":1071},[1050,3985,3893],{"class":1186},[1050,3987,1190],{"class":1071},[1050,3989,3949],{"class":1390},[1050,3991,3952],{"class":1186},[1050,3993,1203],{"class":1071},[1050,3995,3957],{"class":1390},[1050,3997,3960],{"class":1186},[1050,3999,1268],{"class":1071},[1050,4001,4002,4005],{"class":1052,"line":1244},[1050,4003,4004],{"class":1063},"            else",[1050,4006,1396],{"class":1071},[1050,4008,4009],{"class":1052,"line":1271},[1050,4010,4011],{"class":1056},"                # Default key generation\n",[1050,4013,4014,4017,4019,4022,4024,4027,4030,4032,4034,4038,4040,4043,4045,4048,4050,4052,4054,4057],{"class":1052,"line":1301},[1050,4015,4016],{"class":1067},"                key_data ",[1050,4018,1220],{"class":1071},[1050,4020,4021],{"class":1067}," pickle",[1050,4023,1072],{"class":1071},[1050,4025,4026],{"class":1186},"dumps",[1050,4028,4029],{"class":1071},"((",[1050,4031,3920],{"class":1186},[1050,4033,1072],{"class":1071},[1050,4035,4037],{"class":4036},"s131V","__name__",[1050,4039,1203],{"class":1071},[1050,4041,4042],{"class":1186}," args",[1050,4044,1203],{"class":1071},[1050,4046,4047],{"class":1274}," sorted",[1050,4049,1190],{"class":1071},[1050,4051,3960],{"class":1186},[1050,4053,1072],{"class":1071},[1050,4055,4056],{"class":1186},"items",[1050,4058,4059],{"class":1071},"())))\n",[1050,4061,4062,4064,4066,4068,4071,4073,4076,4078,4081,4083,4086,4089,4092,4095,4097],{"class":1052,"line":1306},[1050,4063,3981],{"class":1067},[1050,4065,1220],{"class":1071},[1050,4067,2427],{"class":1141},[1050,4069,4070],{"class":1197},"\"memoize:",[1050,4072,1287],{"class":1286},[1050,4074,4075],{"class":1067},"hashlib",[1050,4077,1072],{"class":1071},[1050,4079,4080],{"class":1186},"md5",[1050,4082,1190],{"class":1071},[1050,4084,4085],{"class":1186},"key_data",[1050,4087,4088],{"class":1071},").",[1050,4090,4091],{"class":1186},"hexdigest",[1050,4093,4094],{"class":1071},"()",[1050,4096,1293],{"class":1286},[1050,4098,2808],{"class":1197},[1050,4100,4101],{"class":1052,"line":1312},[1050,4102,2594],{"class":1067},[1050,4104,4105],{"class":1052,"line":1345},[1050,4106,4107],{"class":1056},"            # Try cache first\n",[1050,4109,4110,4113,4115,4117,4119,4121,4123,4126],{"class":1052,"line":1367},[1050,4111,4112],{"class":1067},"            result ",[1050,4114,1220],{"class":1071},[1050,4116,1252],{"class":1067},[1050,4118,1072],{"class":1071},[1050,4120,1257],{"class":1186},[1050,4122,1190],{"class":1071},[1050,4124,4125],{"class":1186},"cache_key",[1050,4127,1268],{"class":1071},[1050,4129,4130,4132,4135,4137,4139,4141],{"class":1052,"line":1372},[1050,4131,3972],{"class":1063},[1050,4133,4134],{"class":1067}," result ",[1050,4136,2392],{"class":1390},[1050,4138,2395],{"class":1390},[1050,4140,2398],{"class":2146},[1050,4142,1396],{"class":1071},[1050,4144,4145,4147],{"class":1052,"line":1378},[1050,4146,2587],{"class":1063},[1050,4148,4149],{"class":1067}," result\n",[1050,4151,4152],{"class":1052,"line":1399},[1050,4153,2594],{"class":1067},[1050,4155,4156],{"class":1052,"line":1416},[1050,4157,4158],{"class":1056},"            # Compute and cache result\n",[1050,4160,4161,4163,4165,4168,4170,4172,4174,4176,4178,4180],{"class":1052,"line":1421},[1050,4162,4112],{"class":1067},[1050,4164,1220],{"class":1071},[1050,4166,4167],{"class":1186}," func",[1050,4169,1190],{"class":1071},[1050,4171,3949],{"class":1390},[1050,4173,3952],{"class":1186},[1050,4175,1203],{"class":1071},[1050,4177,3957],{"class":1390},[1050,4179,3960],{"class":1186},[1050,4181,1268],{"class":1071},[1050,4183,4184,4186,4188,4190,4192,4194,4196,4199,4201,4203],{"class":1052,"line":1427},[1050,4185,2119],{"class":1067},[1050,4187,1072],{"class":1071},[1050,4189,1187],{"class":1186},[1050,4191,1190],{"class":1071},[1050,4193,4125],{"class":1186},[1050,4195,1203],{"class":1071},[1050,4197,4198],{"class":1186}," result",[1050,4200,1203],{"class":1071},[1050,4202,1217],{"class":1186},[1050,4204,1268],{"class":1071},[1050,4206,4207],{"class":1052,"line":1447},[1050,4208,2594],{"class":1067},[1050,4210,4211,4213],{"class":1052,"line":1452},[1050,4212,2080],{"class":1063},[1050,4214,4149],{"class":1067},[1050,4216,4217],{"class":1052,"line":1458},[1050,4218,2412],{"class":1067},[1050,4220,4221],{"class":1052,"line":1471},[1050,4222,4223],{"class":1056},"        # Add cache control methods\n",[1050,4225,4226,4229,4231,4235,4238,4241,4243,4245,4247,4250],{"class":1052,"line":1495},[1050,4227,4228],{"class":1067},"        wrapper",[1050,4230,1072],{"class":1071},[1050,4232,4234],{"class":4233},"sBPpx","cache_clear",[1050,4236,4237],{"class":1071}," =",[1050,4239,4240],{"class":1141}," lambda",[1050,4242,1482],{"class":1071},[1050,4244,1252],{"class":1067},[1050,4246,1072],{"class":1071},[1050,4248,4249],{"class":1186},"clear",[1050,4251,2558],{"class":1071},[1050,4253,4254,4256,4258,4261,4263,4265,4267,4269,4271,4273,4275,4277,4280],{"class":1052,"line":1516},[1050,4255,4228],{"class":1067},[1050,4257,1072],{"class":1071},[1050,4259,4260],{"class":4233},"cache_info",[1050,4262,4237],{"class":1071},[1050,4264,4240],{"class":1141},[1050,4266,1482],{"class":1071},[1050,4268,1832],{"class":1071},[1050,4270,1296],{"class":1193},[1050,4272,4125],{"class":1197},[1050,4274,1296],{"class":1193},[1050,4276,1482],{"class":1071},[1050,4278,4279],{"class":1067}," cache_key",[1050,4281,4282],{"class":1071},"}\n",[1050,4284,4285],{"class":1052,"line":1536},[1050,4286,2412],{"class":1067},[1050,4288,4289,4292],{"class":1052,"line":1551},[1050,4290,4291],{"class":1063},"        return",[1050,4293,4294],{"class":1067}," wrapper\n",[1050,4296,4297,4299],{"class":1052,"line":1556},[1050,4298,3590],{"class":1063},[1050,4300,4301],{"class":1067}," decorator\n",[1050,4303,4304],{"class":1052,"line":1562},[1050,4305,1129],{"emptyLinePlaceholder":1128},[1050,4307,4308],{"class":1052,"line":1605},[1050,4309,3470],{"class":1056},[1050,4311,4312,4315,4318,4320,4322,4324,4326],{"class":1052,"line":1628},[1050,4313,4314],{"class":1071},"@",[1050,4316,4317],{"class":1145},"memoize",[1050,4319,1190],{"class":1071},[1050,4321,3884],{"class":1216},[1050,4323,1220],{"class":1071},[1050,4325,1546],{"class":1223},[1050,4327,1268],{"class":1071},[1050,4329,4330,4332,4335,4337,4340],{"class":1052,"line":1633},[1050,4331,1142],{"class":1141},[1050,4333,4334],{"class":1145}," fibonacci",[1050,4336,1190],{"class":1071},[1050,4338,4339],{"class":2029},"n",[1050,4341,2053],{"class":1071},[1050,4343,4344,4346,4349],{"class":1052,"line":1639},[1050,4345,1156],{"class":1155},[1050,4347,4348],{"class":1159},"Cached fibonacci calculation.",[1050,4350,1163],{"class":1155},[1050,4352,4353,4355,4358,4361,4364],{"class":1052,"line":1675},[1050,4354,1381],{"class":1063},[1050,4356,4357],{"class":1067}," n ",[1050,4359,4360],{"class":1390},"\u003C",[1050,4362,4363],{"class":1223}," 2",[1050,4365,1396],{"class":1071},[1050,4367,4368,4370],{"class":1052,"line":1680},[1050,4369,4291],{"class":1063},[1050,4371,4372],{"class":1067}," n\n",[1050,4374,4375,4377,4379,4381,4383,4385,4387,4389,4392,4394,4396,4398,4400,4402],{"class":1052,"line":1686},[1050,4376,3590],{"class":1063},[1050,4378,4334],{"class":1186},[1050,4380,1190],{"class":1071},[1050,4382,4339],{"class":1186},[1050,4384,2266],{"class":1390},[1050,4386,2040],{"class":1223},[1050,4388,1227],{"class":1071},[1050,4390,4391],{"class":1390}," +",[1050,4393,4334],{"class":1186},[1050,4395,1190],{"class":1071},[1050,4397,4339],{"class":1186},[1050,4399,2266],{"class":1390},[1050,4401,3579],{"class":1223},[1050,4403,1268],{"class":1071},[1050,4405,4406],{"class":1052,"line":1692},[1050,4407,1129],{"emptyLinePlaceholder":1128},[1050,4409,4410,4412,4414,4416,4418,4420,4423,4425,4427,4429,4432,4435,4437,4439,4442,4444,4447,4449,4451],{"class":1052,"line":1697},[1050,4411,4314],{"class":1071},[1050,4413,4317],{"class":1145},[1050,4415,1190],{"class":1071},[1050,4417,3884],{"class":1216},[1050,4419,1220],{"class":1071},[1050,4421,4422],{"class":1223},"1800",[1050,4424,1203],{"class":1071},[1050,4426,3893],{"class":1216},[1050,4428,1220],{"class":1071},[1050,4430,4431],{"class":1141},"lambda",[1050,4433,4434],{"class":2029}," user_id",[1050,4436,1482],{"class":1071},[1050,4438,2427],{"class":1141},[1050,4440,4441],{"class":1197},"\"user_stats_",[1050,4443,1287],{"class":1286},[1050,4445,4446],{"class":1186},"user_id",[1050,4448,1293],{"class":1286},[1050,4450,1296],{"class":1197},[1050,4452,1268],{"class":1071},[1050,4454,4455,4457,4460,4462,4464],{"class":1052,"line":1703},[1050,4456,1142],{"class":1141},[1050,4458,4459],{"class":1145}," get_user_statistics",[1050,4461,1190],{"class":1071},[1050,4463,4446],{"class":2029},[1050,4465,2053],{"class":1071},[1050,4467,4468,4470,4473],{"class":1052,"line":1713},[1050,4469,1156],{"class":1155},[1050,4471,4472],{"class":1159},"Get cached user statistics.",[1050,4474,1163],{"class":1155},[1050,4476,4477,4480,4482,4484,4487,4489,4492,4494,4497,4499],{"class":1052,"line":1723},[1050,4478,4479],{"class":1063},"    from",[1050,4481,1068],{"class":1067},[1050,4483,1072],{"class":1071},[1050,4485,4486],{"class":1067},"db",[1050,4488,1072],{"class":1071},[1050,4490,4491],{"class":1067},"models ",[1050,4493,1083],{"class":1063},[1050,4495,4496],{"class":1067}," Count",[1050,4498,1203],{"class":1071},[1050,4500,4501],{"class":1067}," Avg\n",[1050,4503,4504,4506,4509,4511,4513,4516,4518],{"class":1052,"line":1728},[1050,4505,4479],{"class":1063},[1050,4507,4508],{"class":1071}," .",[1050,4510,4491],{"class":1067},[1050,4512,1083],{"class":1063},[1050,4514,4515],{"class":1067}," Post",[1050,4517,1203],{"class":1071},[1050,4519,4520],{"class":1067}," Comment\n",[1050,4522,4523],{"class":1052,"line":1734},[1050,4524,1169],{"class":1067},[1050,4526,4527,4530,4532],{"class":1052,"line":1744},[1050,4528,4529],{"class":1067},"    stats ",[1050,4531,1220],{"class":1071},[1050,4533,4534],{"class":1071}," {\n",[1050,4536,4537,4539,4542,4544,4546,4548,4550,4553,4555,4558,4560,4563,4565,4567,4569,4572],{"class":1052,"line":1749},[1050,4538,1474],{"class":1193},[1050,4540,4541],{"class":1197},"post_count",[1050,4543,1194],{"class":1193},[1050,4545,1482],{"class":1071},[1050,4547,4515],{"class":1067},[1050,4549,1072],{"class":1071},[1050,4551,4552],{"class":4233},"objects",[1050,4554,1072],{"class":1071},[1050,4556,4557],{"class":1186},"filter",[1050,4559,1190],{"class":1071},[1050,4561,4562],{"class":1216},"author_id",[1050,4564,1220],{"class":1071},[1050,4566,4446],{"class":1186},[1050,4568,4088],{"class":1071},[1050,4570,4571],{"class":1186},"count",[1050,4573,4574],{"class":1071},"(),\n",[1050,4576,4577,4579,4582,4584,4586,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609],{"class":1052,"line":1755},[1050,4578,1474],{"class":1193},[1050,4580,4581],{"class":1197},"comment_count",[1050,4583,1194],{"class":1193},[1050,4585,1482],{"class":1071},[1050,4587,4588],{"class":1067}," Comment",[1050,4590,1072],{"class":1071},[1050,4592,4552],{"class":4233},[1050,4594,1072],{"class":1071},[1050,4596,4557],{"class":1186},[1050,4598,1190],{"class":1071},[1050,4600,4562],{"class":1216},[1050,4602,1220],{"class":1071},[1050,4604,4446],{"class":1186},[1050,4606,4088],{"class":1071},[1050,4608,4571],{"class":1186},[1050,4610,4574],{"class":1071},[1050,4612,4613,4615,4618,4620,4622,4624,4626,4628,4630,4632,4634,4636,4638,4640,4642,4645],{"class":1052,"line":1779},[1050,4614,1474],{"class":1193},[1050,4616,4617],{"class":1197},"avg_post_length",[1050,4619,1194],{"class":1193},[1050,4621,1482],{"class":1071},[1050,4623,4515],{"class":1067},[1050,4625,1072],{"class":1071},[1050,4627,4552],{"class":4233},[1050,4629,1072],{"class":1071},[1050,4631,4557],{"class":1186},[1050,4633,1190],{"class":1071},[1050,4635,4562],{"class":1216},[1050,4637,1220],{"class":1071},[1050,4639,4446],{"class":1186},[1050,4641,4088],{"class":1071},[1050,4643,4644],{"class":1186},"aggregate",[1050,4646,3619],{"class":1071},[1050,4648,4649,4652,4654,4657,4659,4661,4664,4666],{"class":1052,"line":1800},[1050,4650,4651],{"class":1216},"            avg_length",[1050,4653,1220],{"class":1071},[1050,4655,4656],{"class":1186},"Avg",[1050,4658,1190],{"class":1071},[1050,4660,1194],{"class":1193},[1050,4662,4663],{"class":1197},"content_length",[1050,4665,1194],{"class":1193},[1050,4667,1268],{"class":1071},[1050,4669,4670,4673,4675,4678,4680,4683,4686,4689],{"class":1052,"line":1805},[1050,4671,4672],{"class":1071},"        )[",[1050,4674,1194],{"class":1193},[1050,4676,4677],{"class":1197},"avg_length",[1050,4679,1194],{"class":1193},[1050,4681,4682],{"class":1071},"]",[1050,4684,4685],{"class":1390}," or",[1050,4687,4688],{"class":1223}," 0",[1050,4690,1492],{"class":1071},[1050,4692,4693],{"class":1052,"line":1811},[1050,4694,4695],{"class":1071},"    }\n",[1050,4697,4698],{"class":1052,"line":1868},[1050,4699,1169],{"class":1067},[1050,4701,4702,4704],{"class":1052,"line":1909},[1050,4703,3590],{"class":1063},[1050,4705,4706],{"class":1067}," stats\n",[1050,4708,4709],{"class":1052,"line":2721},[1050,4710,1129],{"emptyLinePlaceholder":1128},[1050,4712,4713],{"class":1052,"line":2731},[1050,4714,4715],{"class":1056},"# Usage\n",[1050,4717,4718,4721,4723,4725,4727,4730,4732],{"class":1052,"line":2737},[1050,4719,4720],{"class":1067},"user_stats ",[1050,4722,1220],{"class":1071},[1050,4724,4459],{"class":1186},[1050,4726,1190],{"class":1071},[1050,4728,4729],{"class":1223},"123",[1050,4731,1227],{"class":1071},[1050,4733,4734],{"class":1056},"  # First call: computed and cached\n",[1050,4736,4737,4739,4741,4743,4745,4747,4749],{"class":1052,"line":2761},[1050,4738,4720],{"class":1067},[1050,4740,1220],{"class":1071},[1050,4742,4459],{"class":1186},[1050,4744,1190],{"class":1071},[1050,4746,4729],{"class":1223},[1050,4748,1227],{"class":1071},[1050,4750,4751],{"class":1056},"  # Second call: returned from cache\n",[1035,4753,4755],{"id":4754},"cache-aside-pattern","Cache-Aside Pattern",[1040,4757,4759],{"className":1042,"code":4758,"language":1044,"meta":1045,"style":1045},"# Cache-aside pattern implementation\nfrom django.core.cache import cache\nfrom django.db import models\nfrom .models import Post, User\n\nclass CacheAsideManager:\n    \"\"\"Implement cache-aside pattern for model operations.\"\"\"\n    \n    def __init__(self, model_class, cache_timeout=3600):\n        self.model_class = model_class\n        self.cache_timeout = cache_timeout\n    \n    def get_cache_key(self, pk):\n        \"\"\"Generate cache key for model instance.\"\"\"\n        return f\"{self.model_class._meta.label_lower}:{pk}\"\n    \n    def get_by_pk(self, pk):\n        \"\"\"Get model instance with cache-aside pattern.\"\"\"\n        cache_key = self.get_cache_key(pk)\n        \n        # Try cache first\n        instance = cache.get(cache_key)\n        if instance is not None:\n            return instance\n        \n        # Cache miss - get from database\n        try:\n            instance = self.model_class.objects.get(pk=pk)\n            # Cache the instance\n            cache.set(cache_key, instance, self.cache_timeout)\n            return instance\n        except self.model_class.DoesNotExist:\n            # Cache negative result to prevent repeated DB queries\n            cache.set(cache_key, None, 300)  # Cache for 5 minutes\n            raise\n    \n    def update_instance(self, pk, **update_fields):\n        \"\"\"Update instance and invalidate cache.\"\"\"\n        # Update in database\n        updated_count = self.model_class.objects.filter(pk=pk).update(**update_fields)\n        \n        if updated_count > 0:\n            # Invalidate cache\n            cache_key = self.get_cache_key(pk)\n            cache.delete(cache_key)\n            \n            # Optionally, refresh cache immediately\n            return self.get_by_pk(pk)\n        \n        return None\n    \n    def delete_instance(self, pk):\n        \"\"\"Delete instance and invalidate cache.\"\"\"\n        # Delete from database\n        deleted_count = self.model_class.objects.filter(pk=pk).delete()[0]\n        \n        if deleted_count > 0:\n            # Invalidate cache\n            cache_key = self.get_cache_key(pk)\n            cache.delete(cache_key)\n        \n        return deleted_count > 0\n\n# Usage\npost_cache = CacheAsideManager(Post, cache_timeout=1800)\nuser_cache = CacheAsideManager(User, cache_timeout=3600)\n\n# Get cached post\npost = post_cache.get_by_pk(123)\n\n# Update post (invalidates cache)\nupdated_post = post_cache.update_instance(123, title=\"New Title\")\n\n# Delete post (invalidates cache)\npost_cache.delete_instance(123)\n",[1047,4760,4761,4766,4784,4800,4817,4821,4830,4839,4843,4871,4886,4900,4904,4922,4931,4970,4974,4991,5000,5020,5024,5029,5048,5063,5070,5074,5079,5085,5116,5121,5148,5154,5171,5176,5202,5207,5211,5235,5244,5249,5292,5296,5310,5315,5334,5348,5352,5357,5374,5378,5385,5389,5406,5415,5420,5460,5464,5477,5481,5499,5513,5517,5528,5532,5536,5560,5584,5588,5593,5613,5617,5622,5656,5660,5665],{"__ignoreMap":1045},[1050,4762,4763],{"class":1052,"line":1053},[1050,4764,4765],{"class":1056},"# Cache-aside pattern implementation\n",[1050,4767,4768,4770,4772,4774,4776,4778,4780,4782],{"class":1052,"line":1060},[1050,4769,1064],{"class":1063},[1050,4771,1068],{"class":1067},[1050,4773,1072],{"class":1071},[1050,4775,1075],{"class":1067},[1050,4777,1072],{"class":1071},[1050,4779,1080],{"class":1067},[1050,4781,1083],{"class":1063},[1050,4783,1086],{"class":1067},[1050,4785,4786,4788,4790,4792,4795,4797],{"class":1052,"line":1089},[1050,4787,1064],{"class":1063},[1050,4789,1068],{"class":1067},[1050,4791,1072],{"class":1071},[1050,4793,4794],{"class":1067},"db ",[1050,4796,1083],{"class":1063},[1050,4798,4799],{"class":1067}," models\n",[1050,4801,4802,4804,4806,4808,4810,4812,4814],{"class":1052,"line":1109},[1050,4803,1064],{"class":1063},[1050,4805,4508],{"class":1071},[1050,4807,4491],{"class":1067},[1050,4809,1083],{"class":1063},[1050,4811,4515],{"class":1067},[1050,4813,1203],{"class":1071},[1050,4815,4816],{"class":1067}," User\n",[1050,4818,4819],{"class":1052,"line":1117},[1050,4820,1129],{"emptyLinePlaceholder":1128},[1050,4822,4823,4825,4828],{"class":1052,"line":1125},[1050,4824,1991],{"class":1141},[1050,4826,4827],{"class":1994}," CacheAsideManager",[1050,4829,1396],{"class":1071},[1050,4831,4832,4834,4837],{"class":1052,"line":1132},[1050,4833,1156],{"class":1155},[1050,4835,4836],{"class":1159},"Implement cache-aside pattern for model operations.",[1050,4838,1163],{"class":1155},[1050,4840,4841],{"class":1052,"line":1138},[1050,4842,1169],{"class":1067},[1050,4844,4845,4847,4850,4852,4854,4856,4859,4861,4864,4866,4869],{"class":1052,"line":1152},[1050,4846,2015],{"class":1141},[1050,4848,4849],{"class":1274}," __init__",[1050,4851,1190],{"class":1071},[1050,4853,2024],{"class":2023},[1050,4855,1203],{"class":1071},[1050,4857,4858],{"class":2029}," model_class",[1050,4860,1203],{"class":1071},[1050,4862,4863],{"class":2029}," cache_timeout",[1050,4865,1220],{"class":1390},[1050,4867,4868],{"class":1223},"3600",[1050,4870,2053],{"class":1071},[1050,4872,4873,4876,4878,4881,4883],{"class":1052,"line":1166},[1050,4874,4875],{"class":2656},"        self",[1050,4877,1072],{"class":1071},[1050,4879,4880],{"class":4233},"model_class",[1050,4882,4237],{"class":1071},[1050,4884,4885],{"class":1067}," model_class\n",[1050,4887,4888,4890,4892,4895,4897],{"class":1052,"line":1172},[1050,4889,4875],{"class":2656},[1050,4891,1072],{"class":1071},[1050,4893,4894],{"class":4233},"cache_timeout",[1050,4896,4237],{"class":1071},[1050,4898,4899],{"class":1067}," cache_timeout\n",[1050,4901,4902],{"class":1052,"line":1178},[1050,4903,1169],{"class":1067},[1050,4905,4906,4908,4911,4913,4915,4917,4920],{"class":1052,"line":1233},[1050,4907,2015],{"class":1141},[1050,4909,4910],{"class":1145}," get_cache_key",[1050,4912,1190],{"class":1071},[1050,4914,2024],{"class":2023},[1050,4916,1203],{"class":1071},[1050,4918,4919],{"class":2029}," pk",[1050,4921,2053],{"class":1071},[1050,4923,4924,4926,4929],{"class":1052,"line":1238},[1050,4925,2058],{"class":1155},[1050,4927,4928],{"class":1159},"Generate cache key for model instance.",[1050,4930,1163],{"class":1155},[1050,4932,4933,4935,4937,4939,4941,4943,4945,4947,4949,4952,4954,4957,4959,4961,4963,4966,4968],{"class":1052,"line":1244},[1050,4934,4291],{"class":1063},[1050,4936,2427],{"class":1141},[1050,4938,1296],{"class":1197},[1050,4940,1287],{"class":1286},[1050,4942,2024],{"class":2656},[1050,4944,1072],{"class":1071},[1050,4946,4880],{"class":4233},[1050,4948,1072],{"class":1071},[1050,4950,4951],{"class":4233},"_meta",[1050,4953,1072],{"class":1071},[1050,4955,4956],{"class":4233},"label_lower",[1050,4958,1293],{"class":1286},[1050,4960,1482],{"class":1197},[1050,4962,1287],{"class":1286},[1050,4964,4965],{"class":1067},"pk",[1050,4967,1293],{"class":1286},[1050,4969,2808],{"class":1197},[1050,4971,4972],{"class":1052,"line":1271},[1050,4973,1169],{"class":1067},[1050,4975,4976,4978,4981,4983,4985,4987,4989],{"class":1052,"line":1301},[1050,4977,2015],{"class":1141},[1050,4979,4980],{"class":1145}," get_by_pk",[1050,4982,1190],{"class":1071},[1050,4984,2024],{"class":2023},[1050,4986,1203],{"class":1071},[1050,4988,4919],{"class":2029},[1050,4990,2053],{"class":1071},[1050,4992,4993,4995,4998],{"class":1052,"line":1306},[1050,4994,2058],{"class":1155},[1050,4996,4997],{"class":1159},"Get model instance with cache-aside pattern.",[1050,4999,1163],{"class":1155},[1050,5001,5002,5005,5007,5009,5011,5014,5016,5018],{"class":1052,"line":1312},[1050,5003,5004],{"class":1067},"        cache_key ",[1050,5006,1220],{"class":1071},[1050,5008,2657],{"class":2656},[1050,5010,1072],{"class":1071},[1050,5012,5013],{"class":1186},"get_cache_key",[1050,5015,1190],{"class":1071},[1050,5017,4965],{"class":1186},[1050,5019,1268],{"class":1071},[1050,5021,5022],{"class":1052,"line":1345},[1050,5023,2412],{"class":1067},[1050,5025,5026],{"class":1052,"line":1367},[1050,5027,5028],{"class":1056},"        # Try cache first\n",[1050,5030,5031,5034,5036,5038,5040,5042,5044,5046],{"class":1052,"line":1372},[1050,5032,5033],{"class":1067},"        instance ",[1050,5035,1220],{"class":1071},[1050,5037,1252],{"class":1067},[1050,5039,1072],{"class":1071},[1050,5041,1257],{"class":1186},[1050,5043,1190],{"class":1071},[1050,5045,4125],{"class":1186},[1050,5047,1268],{"class":1071},[1050,5049,5050,5052,5055,5057,5059,5061],{"class":1052,"line":1378},[1050,5051,2386],{"class":1063},[1050,5053,5054],{"class":1067}," instance ",[1050,5056,2392],{"class":1390},[1050,5058,2395],{"class":1390},[1050,5060,2398],{"class":2146},[1050,5062,1396],{"class":1071},[1050,5064,5065,5067],{"class":1052,"line":1399},[1050,5066,2080],{"class":1063},[1050,5068,5069],{"class":1067}," instance\n",[1050,5071,5072],{"class":1052,"line":1416},[1050,5073,2412],{"class":1067},[1050,5075,5076],{"class":1052,"line":1421},[1050,5077,5078],{"class":1056},"        # Cache miss - get from database\n",[1050,5080,5081,5083],{"class":1052,"line":1427},[1050,5082,2068],{"class":1063},[1050,5084,1396],{"class":1071},[1050,5086,5087,5090,5092,5094,5096,5098,5100,5102,5104,5106,5108,5110,5112,5114],{"class":1052,"line":1447},[1050,5088,5089],{"class":1067},"            instance ",[1050,5091,1220],{"class":1071},[1050,5093,2657],{"class":2656},[1050,5095,1072],{"class":1071},[1050,5097,4880],{"class":4233},[1050,5099,1072],{"class":1071},[1050,5101,4552],{"class":4233},[1050,5103,1072],{"class":1071},[1050,5105,1257],{"class":1186},[1050,5107,1190],{"class":1071},[1050,5109,4965],{"class":1216},[1050,5111,1220],{"class":1071},[1050,5113,4965],{"class":1186},[1050,5115,1268],{"class":1071},[1050,5117,5118],{"class":1052,"line":1452},[1050,5119,5120],{"class":1056},"            # Cache the instance\n",[1050,5122,5123,5125,5127,5129,5131,5133,5135,5138,5140,5142,5144,5146],{"class":1052,"line":1458},[1050,5124,2119],{"class":1067},[1050,5126,1072],{"class":1071},[1050,5128,1187],{"class":1186},[1050,5130,1190],{"class":1071},[1050,5132,4125],{"class":1186},[1050,5134,1203],{"class":1071},[1050,5136,5137],{"class":1186}," instance",[1050,5139,1203],{"class":1071},[1050,5141,2657],{"class":2656},[1050,5143,1072],{"class":1071},[1050,5145,4894],{"class":4233},[1050,5147,1268],{"class":1071},[1050,5149,5150,5152],{"class":1052,"line":1471},[1050,5151,2080],{"class":1063},[1050,5153,5069],{"class":1067},[1050,5155,5156,5158,5160,5162,5164,5166,5169],{"class":1052,"line":1495},[1050,5157,2103],{"class":1063},[1050,5159,2657],{"class":2656},[1050,5161,1072],{"class":1071},[1050,5163,4880],{"class":4233},[1050,5165,1072],{"class":1071},[1050,5167,5168],{"class":4233},"DoesNotExist",[1050,5170,1396],{"class":1071},[1050,5172,5173],{"class":1052,"line":1516},[1050,5174,5175],{"class":1056},"            # Cache negative result to prevent repeated DB queries\n",[1050,5177,5178,5180,5182,5184,5186,5188,5190,5192,5194,5197,5199],{"class":1052,"line":1536},[1050,5179,2119],{"class":1067},[1050,5181,1072],{"class":1071},[1050,5183,1187],{"class":1186},[1050,5185,1190],{"class":1071},[1050,5187,4125],{"class":1186},[1050,5189,1203],{"class":1071},[1050,5191,2398],{"class":2146},[1050,5193,1203],{"class":1071},[1050,5195,5196],{"class":1223}," 300",[1050,5198,1227],{"class":1071},[1050,5200,5201],{"class":1056},"  # Cache for 5 minutes\n",[1050,5203,5204],{"class":1052,"line":1551},[1050,5205,5206],{"class":1063},"            raise\n",[1050,5208,5209],{"class":1052,"line":1556},[1050,5210,1169],{"class":1067},[1050,5212,5213,5215,5218,5220,5222,5224,5226,5228,5230,5233],{"class":1052,"line":1562},[1050,5214,2015],{"class":1141},[1050,5216,5217],{"class":1145}," update_instance",[1050,5219,1190],{"class":1071},[1050,5221,2024],{"class":2023},[1050,5223,1203],{"class":1071},[1050,5225,4919],{"class":2029},[1050,5227,1203],{"class":1071},[1050,5229,3957],{"class":1390},[1050,5231,5232],{"class":2029},"update_fields",[1050,5234,2053],{"class":1071},[1050,5236,5237,5239,5242],{"class":1052,"line":1605},[1050,5238,2058],{"class":1155},[1050,5240,5241],{"class":1159},"Update instance and invalidate cache.",[1050,5243,1163],{"class":1155},[1050,5245,5246],{"class":1052,"line":1628},[1050,5247,5248],{"class":1056},"        # Update in database\n",[1050,5250,5251,5254,5256,5258,5260,5262,5264,5266,5268,5270,5272,5274,5276,5278,5280,5283,5285,5288,5290],{"class":1052,"line":1633},[1050,5252,5253],{"class":1067},"        updated_count ",[1050,5255,1220],{"class":1071},[1050,5257,2657],{"class":2656},[1050,5259,1072],{"class":1071},[1050,5261,4880],{"class":4233},[1050,5263,1072],{"class":1071},[1050,5265,4552],{"class":4233},[1050,5267,1072],{"class":1071},[1050,5269,4557],{"class":1186},[1050,5271,1190],{"class":1071},[1050,5273,4965],{"class":1216},[1050,5275,1220],{"class":1071},[1050,5277,4965],{"class":1186},[1050,5279,4088],{"class":1071},[1050,5281,5282],{"class":1186},"update",[1050,5284,1190],{"class":1071},[1050,5286,5287],{"class":1390},"**",[1050,5289,5232],{"class":1186},[1050,5291,1268],{"class":1071},[1050,5293,5294],{"class":1052,"line":1639},[1050,5295,2412],{"class":1067},[1050,5297,5298,5300,5303,5306,5308],{"class":1052,"line":1675},[1050,5299,2386],{"class":1063},[1050,5301,5302],{"class":1067}," updated_count ",[1050,5304,5305],{"class":1390},">",[1050,5307,4688],{"class":1223},[1050,5309,1396],{"class":1071},[1050,5311,5312],{"class":1052,"line":1680},[1050,5313,5314],{"class":1056},"            # Invalidate cache\n",[1050,5316,5317,5320,5322,5324,5326,5328,5330,5332],{"class":1052,"line":1686},[1050,5318,5319],{"class":1067},"            cache_key ",[1050,5321,1220],{"class":1071},[1050,5323,2657],{"class":2656},[1050,5325,1072],{"class":1071},[1050,5327,5013],{"class":1186},[1050,5329,1190],{"class":1071},[1050,5331,4965],{"class":1186},[1050,5333,1268],{"class":1071},[1050,5335,5336,5338,5340,5342,5344,5346],{"class":1052,"line":1692},[1050,5337,2119],{"class":1067},[1050,5339,1072],{"class":1071},[1050,5341,1434],{"class":1186},[1050,5343,1190],{"class":1071},[1050,5345,4125],{"class":1186},[1050,5347,1268],{"class":1071},[1050,5349,5350],{"class":1052,"line":1697},[1050,5351,2594],{"class":1067},[1050,5353,5354],{"class":1052,"line":1703},[1050,5355,5356],{"class":1056},"            # Optionally, refresh cache immediately\n",[1050,5358,5359,5361,5363,5365,5368,5370,5372],{"class":1052,"line":1713},[1050,5360,2080],{"class":1063},[1050,5362,2657],{"class":2656},[1050,5364,1072],{"class":1071},[1050,5366,5367],{"class":1186},"get_by_pk",[1050,5369,1190],{"class":1071},[1050,5371,4965],{"class":1186},[1050,5373,1268],{"class":1071},[1050,5375,5376],{"class":1052,"line":1723},[1050,5377,2412],{"class":1067},[1050,5379,5380,5382],{"class":1052,"line":1728},[1050,5381,4291],{"class":1063},[1050,5383,5384],{"class":2146}," None\n",[1050,5386,5387],{"class":1052,"line":1734},[1050,5388,1169],{"class":1067},[1050,5390,5391,5393,5396,5398,5400,5402,5404],{"class":1052,"line":1744},[1050,5392,2015],{"class":1141},[1050,5394,5395],{"class":1145}," delete_instance",[1050,5397,1190],{"class":1071},[1050,5399,2024],{"class":2023},[1050,5401,1203],{"class":1071},[1050,5403,4919],{"class":2029},[1050,5405,2053],{"class":1071},[1050,5407,5408,5410,5413],{"class":1052,"line":1749},[1050,5409,2058],{"class":1155},[1050,5411,5412],{"class":1159},"Delete instance and invalidate cache.",[1050,5414,1163],{"class":1155},[1050,5416,5417],{"class":1052,"line":1755},[1050,5418,5419],{"class":1056},"        # Delete from database\n",[1050,5421,5422,5425,5427,5429,5431,5433,5435,5437,5439,5441,5443,5445,5447,5449,5451,5453,5456,5458],{"class":1052,"line":1779},[1050,5423,5424],{"class":1067},"        deleted_count ",[1050,5426,1220],{"class":1071},[1050,5428,2657],{"class":2656},[1050,5430,1072],{"class":1071},[1050,5432,4880],{"class":4233},[1050,5434,1072],{"class":1071},[1050,5436,4552],{"class":4233},[1050,5438,1072],{"class":1071},[1050,5440,4557],{"class":1186},[1050,5442,1190],{"class":1071},[1050,5444,4965],{"class":1216},[1050,5446,1220],{"class":1071},[1050,5448,4965],{"class":1186},[1050,5450,4088],{"class":1071},[1050,5452,1434],{"class":1186},[1050,5454,5455],{"class":1071},"()[",[1050,5457,2050],{"class":1223},[1050,5459,1776],{"class":1071},[1050,5461,5462],{"class":1052,"line":1800},[1050,5463,2412],{"class":1067},[1050,5465,5466,5468,5471,5473,5475],{"class":1052,"line":1805},[1050,5467,2386],{"class":1063},[1050,5469,5470],{"class":1067}," deleted_count ",[1050,5472,5305],{"class":1390},[1050,5474,4688],{"class":1223},[1050,5476,1396],{"class":1071},[1050,5478,5479],{"class":1052,"line":1811},[1050,5480,5314],{"class":1056},[1050,5482,5483,5485,5487,5489,5491,5493,5495,5497],{"class":1052,"line":1868},[1050,5484,5319],{"class":1067},[1050,5486,1220],{"class":1071},[1050,5488,2657],{"class":2656},[1050,5490,1072],{"class":1071},[1050,5492,5013],{"class":1186},[1050,5494,1190],{"class":1071},[1050,5496,4965],{"class":1186},[1050,5498,1268],{"class":1071},[1050,5500,5501,5503,5505,5507,5509,5511],{"class":1052,"line":1909},[1050,5502,2119],{"class":1067},[1050,5504,1072],{"class":1071},[1050,5506,1434],{"class":1186},[1050,5508,1190],{"class":1071},[1050,5510,4125],{"class":1186},[1050,5512,1268],{"class":1071},[1050,5514,5515],{"class":1052,"line":2721},[1050,5516,2412],{"class":1067},[1050,5518,5519,5521,5523,5525],{"class":1052,"line":2731},[1050,5520,4291],{"class":1063},[1050,5522,5470],{"class":1067},[1050,5524,5305],{"class":1390},[1050,5526,5527],{"class":1223}," 0\n",[1050,5529,5530],{"class":1052,"line":2737},[1050,5531,1129],{"emptyLinePlaceholder":1128},[1050,5533,5534],{"class":1052,"line":2761},[1050,5535,4715],{"class":1056},[1050,5537,5538,5541,5543,5545,5547,5550,5552,5554,5556,5558],{"class":1052,"line":2766},[1050,5539,5540],{"class":1067},"post_cache ",[1050,5542,1220],{"class":1071},[1050,5544,4827],{"class":1186},[1050,5546,1190],{"class":1071},[1050,5548,5549],{"class":1186},"Post",[1050,5551,1203],{"class":1071},[1050,5553,4863],{"class":1216},[1050,5555,1220],{"class":1071},[1050,5557,4422],{"class":1223},[1050,5559,1268],{"class":1071},[1050,5561,5562,5565,5567,5569,5571,5574,5576,5578,5580,5582],{"class":1052,"line":2772},[1050,5563,5564],{"class":1067},"user_cache ",[1050,5566,1220],{"class":1071},[1050,5568,4827],{"class":1186},[1050,5570,1190],{"class":1071},[1050,5572,5573],{"class":1186},"User",[1050,5575,1203],{"class":1071},[1050,5577,4863],{"class":1216},[1050,5579,1220],{"class":1071},[1050,5581,4868],{"class":1223},[1050,5583,1268],{"class":1071},[1050,5585,5586],{"class":1052,"line":2788},[1050,5587,1129],{"emptyLinePlaceholder":1128},[1050,5589,5590],{"class":1052,"line":2811},[1050,5591,5592],{"class":1056},"# Get cached post\n",[1050,5594,5595,5598,5600,5603,5605,5607,5609,5611],{"class":1052,"line":2838},[1050,5596,5597],{"class":1067},"post ",[1050,5599,1220],{"class":1071},[1050,5601,5602],{"class":1067}," post_cache",[1050,5604,1072],{"class":1071},[1050,5606,5367],{"class":1186},[1050,5608,1190],{"class":1071},[1050,5610,4729],{"class":1223},[1050,5612,1268],{"class":1071},[1050,5614,5615],{"class":1052,"line":2854},[1050,5616,1129],{"emptyLinePlaceholder":1128},[1050,5618,5619],{"class":1052,"line":2878},[1050,5620,5621],{"class":1056},"# Update post (invalidates cache)\n",[1050,5623,5624,5627,5629,5631,5633,5636,5638,5640,5642,5645,5647,5649,5652,5654],{"class":1052,"line":2883},[1050,5625,5626],{"class":1067},"updated_post ",[1050,5628,1220],{"class":1071},[1050,5630,5602],{"class":1067},[1050,5632,1072],{"class":1071},[1050,5634,5635],{"class":1186},"update_instance",[1050,5637,1190],{"class":1071},[1050,5639,4729],{"class":1223},[1050,5641,1203],{"class":1071},[1050,5643,5644],{"class":1216}," title",[1050,5646,1220],{"class":1071},[1050,5648,1296],{"class":1193},[1050,5650,5651],{"class":1197},"New Title",[1050,5653,1296],{"class":1193},[1050,5655,1268],{"class":1071},[1050,5657,5658],{"class":1052,"line":2902},[1050,5659,1129],{"emptyLinePlaceholder":1128},[1050,5661,5662],{"class":1052,"line":2912},[1050,5663,5664],{"class":1056},"# Delete post (invalidates cache)\n",[1050,5666,5667,5670,5672,5675,5677,5679],{"class":1052,"line":2932},[1050,5668,5669],{"class":1067},"post_cache",[1050,5671,1072],{"class":1071},[1050,5673,5674],{"class":1186},"delete_instance",[1050,5676,1190],{"class":1071},[1050,5678,4729],{"class":1223},[1050,5680,1268],{"class":1071},[1035,5682,5684],{"id":5683},"write-through-pattern","Write-Through Pattern",[1040,5686,5688],{"className":1042,"code":5687,"language":1044,"meta":1045,"style":1045},"# Write-through caching pattern\nclass WriteThroughCache:\n    \"\"\"Implement write-through caching pattern.\"\"\"\n    \n    def __init__(self, model_class, cache_timeout=3600):\n        self.model_class = model_class\n        self.cache_timeout = cache_timeout\n    \n    def get_cache_key(self, pk):\n        return f\"{self.model_class._meta.label_lower}:wt:{pk}\"\n    \n    def get(self, pk):\n        \"\"\"Get instance (cache-first).\"\"\"\n        cache_key = self.get_cache_key(pk)\n        \n        # Try cache first\n        instance = cache.get(cache_key)\n        if instance is not None:\n            return instance\n        \n        # Load from database and cache\n        try:\n            instance = self.model_class.objects.get(pk=pk)\n            cache.set(cache_key, instance, self.cache_timeout)\n            return instance\n        except self.model_class.DoesNotExist:\n            return None\n    \n    def create(self, **fields):\n        \"\"\"Create instance (write to both DB and cache).\"\"\"\n        # Create in database\n        instance = self.model_class.objects.create(**fields)\n        \n        # Immediately cache\n        cache_key = self.get_cache_key(instance.pk)\n        cache.set(cache_key, instance, self.cache_timeout)\n        \n        return instance\n    \n    def update(self, pk, **fields):\n        \"\"\"Update instance (write to both DB and cache).\"\"\"\n        # Update in database\n        updated_count = self.model_class.objects.filter(pk=pk).update(**fields)\n        \n        if updated_count > 0:\n            # Get updated instance\n            instance = self.model_class.objects.get(pk=pk)\n            \n            # Update cache\n            cache_key = self.get_cache_key(pk)\n            cache.set(cache_key, instance, self.cache_timeout)\n            \n            return instance\n        \n        return None\n    \n    def delete(self, pk):\n        \"\"\"Delete instance (remove from both DB and cache).\"\"\"\n        # Delete from database\n        deleted_count = self.model_class.objects.filter(pk=pk).delete()[0]\n        \n        if deleted_count > 0:\n            # Remove from cache\n            cache_key = self.get_cache_key(pk)\n            cache.delete(cache_key)\n        \n        return deleted_count > 0\n\n# Usage\nwt_cache = WriteThroughCache(Post)\n\n# Create (writes to both DB and cache)\nnew_post = wt_cache.create(title=\"New Post\", content=\"Content\")\n\n# Update (writes to both DB and cache)\nupdated_post = wt_cache.update(new_post.pk, title=\"Updated Title\")\n\n# Get (cache-first)\npost = wt_cache.get(new_post.pk)\n",[1047,5689,5690,5695,5704,5713,5717,5741,5753,5765,5769,5785,5822,5826,5843,5852,5870,5874,5878,5896,5910,5916,5920,5925,5931,5961,5987,5993,6009,6015,6019,6039,6048,6053,6082,6086,6091,6114,6140,6144,6150,6154,6177,6186,6190,6230,6234,6246,6251,6281,6285,6290,6308,6334,6338,6344,6348,6354,6358,6375,6384,6388,6426,6430,6442,6447,6465,6479,6483,6493,6497,6501,6516,6520,6525,6569,6573,6578,6614,6618,6623],{"__ignoreMap":1045},[1050,5691,5692],{"class":1052,"line":1053},[1050,5693,5694],{"class":1056},"# Write-through caching pattern\n",[1050,5696,5697,5699,5702],{"class":1052,"line":1060},[1050,5698,1991],{"class":1141},[1050,5700,5701],{"class":1994}," WriteThroughCache",[1050,5703,1396],{"class":1071},[1050,5705,5706,5708,5711],{"class":1052,"line":1089},[1050,5707,1156],{"class":1155},[1050,5709,5710],{"class":1159},"Implement write-through caching pattern.",[1050,5712,1163],{"class":1155},[1050,5714,5715],{"class":1052,"line":1109},[1050,5716,1169],{"class":1067},[1050,5718,5719,5721,5723,5725,5727,5729,5731,5733,5735,5737,5739],{"class":1052,"line":1117},[1050,5720,2015],{"class":1141},[1050,5722,4849],{"class":1274},[1050,5724,1190],{"class":1071},[1050,5726,2024],{"class":2023},[1050,5728,1203],{"class":1071},[1050,5730,4858],{"class":2029},[1050,5732,1203],{"class":1071},[1050,5734,4863],{"class":2029},[1050,5736,1220],{"class":1390},[1050,5738,4868],{"class":1223},[1050,5740,2053],{"class":1071},[1050,5742,5743,5745,5747,5749,5751],{"class":1052,"line":1125},[1050,5744,4875],{"class":2656},[1050,5746,1072],{"class":1071},[1050,5748,4880],{"class":4233},[1050,5750,4237],{"class":1071},[1050,5752,4885],{"class":1067},[1050,5754,5755,5757,5759,5761,5763],{"class":1052,"line":1132},[1050,5756,4875],{"class":2656},[1050,5758,1072],{"class":1071},[1050,5760,4894],{"class":4233},[1050,5762,4237],{"class":1071},[1050,5764,4899],{"class":1067},[1050,5766,5767],{"class":1052,"line":1138},[1050,5768,1169],{"class":1067},[1050,5770,5771,5773,5775,5777,5779,5781,5783],{"class":1052,"line":1152},[1050,5772,2015],{"class":1141},[1050,5774,4910],{"class":1145},[1050,5776,1190],{"class":1071},[1050,5778,2024],{"class":2023},[1050,5780,1203],{"class":1071},[1050,5782,4919],{"class":2029},[1050,5784,2053],{"class":1071},[1050,5786,5787,5789,5791,5793,5795,5797,5799,5801,5803,5805,5807,5809,5811,5814,5816,5818,5820],{"class":1052,"line":1166},[1050,5788,4291],{"class":1063},[1050,5790,2427],{"class":1141},[1050,5792,1296],{"class":1197},[1050,5794,1287],{"class":1286},[1050,5796,2024],{"class":2656},[1050,5798,1072],{"class":1071},[1050,5800,4880],{"class":4233},[1050,5802,1072],{"class":1071},[1050,5804,4951],{"class":4233},[1050,5806,1072],{"class":1071},[1050,5808,4956],{"class":4233},[1050,5810,1293],{"class":1286},[1050,5812,5813],{"class":1197},":wt:",[1050,5815,1287],{"class":1286},[1050,5817,4965],{"class":1067},[1050,5819,1293],{"class":1286},[1050,5821,2808],{"class":1197},[1050,5823,5824],{"class":1052,"line":1172},[1050,5825,1169],{"class":1067},[1050,5827,5828,5830,5833,5835,5837,5839,5841],{"class":1052,"line":1178},[1050,5829,2015],{"class":1141},[1050,5831,5832],{"class":1145}," get",[1050,5834,1190],{"class":1071},[1050,5836,2024],{"class":2023},[1050,5838,1203],{"class":1071},[1050,5840,4919],{"class":2029},[1050,5842,2053],{"class":1071},[1050,5844,5845,5847,5850],{"class":1052,"line":1233},[1050,5846,2058],{"class":1155},[1050,5848,5849],{"class":1159},"Get instance (cache-first).",[1050,5851,1163],{"class":1155},[1050,5853,5854,5856,5858,5860,5862,5864,5866,5868],{"class":1052,"line":1238},[1050,5855,5004],{"class":1067},[1050,5857,1220],{"class":1071},[1050,5859,2657],{"class":2656},[1050,5861,1072],{"class":1071},[1050,5863,5013],{"class":1186},[1050,5865,1190],{"class":1071},[1050,5867,4965],{"class":1186},[1050,5869,1268],{"class":1071},[1050,5871,5872],{"class":1052,"line":1244},[1050,5873,2412],{"class":1067},[1050,5875,5876],{"class":1052,"line":1271},[1050,5877,5028],{"class":1056},[1050,5879,5880,5882,5884,5886,5888,5890,5892,5894],{"class":1052,"line":1301},[1050,5881,5033],{"class":1067},[1050,5883,1220],{"class":1071},[1050,5885,1252],{"class":1067},[1050,5887,1072],{"class":1071},[1050,5889,1257],{"class":1186},[1050,5891,1190],{"class":1071},[1050,5893,4125],{"class":1186},[1050,5895,1268],{"class":1071},[1050,5897,5898,5900,5902,5904,5906,5908],{"class":1052,"line":1306},[1050,5899,2386],{"class":1063},[1050,5901,5054],{"class":1067},[1050,5903,2392],{"class":1390},[1050,5905,2395],{"class":1390},[1050,5907,2398],{"class":2146},[1050,5909,1396],{"class":1071},[1050,5911,5912,5914],{"class":1052,"line":1312},[1050,5913,2080],{"class":1063},[1050,5915,5069],{"class":1067},[1050,5917,5918],{"class":1052,"line":1345},[1050,5919,2412],{"class":1067},[1050,5921,5922],{"class":1052,"line":1367},[1050,5923,5924],{"class":1056},"        # Load from database and cache\n",[1050,5926,5927,5929],{"class":1052,"line":1372},[1050,5928,2068],{"class":1063},[1050,5930,1396],{"class":1071},[1050,5932,5933,5935,5937,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957,5959],{"class":1052,"line":1378},[1050,5934,5089],{"class":1067},[1050,5936,1220],{"class":1071},[1050,5938,2657],{"class":2656},[1050,5940,1072],{"class":1071},[1050,5942,4880],{"class":4233},[1050,5944,1072],{"class":1071},[1050,5946,4552],{"class":4233},[1050,5948,1072],{"class":1071},[1050,5950,1257],{"class":1186},[1050,5952,1190],{"class":1071},[1050,5954,4965],{"class":1216},[1050,5956,1220],{"class":1071},[1050,5958,4965],{"class":1186},[1050,5960,1268],{"class":1071},[1050,5962,5963,5965,5967,5969,5971,5973,5975,5977,5979,5981,5983,5985],{"class":1052,"line":1399},[1050,5964,2119],{"class":1067},[1050,5966,1072],{"class":1071},[1050,5968,1187],{"class":1186},[1050,5970,1190],{"class":1071},[1050,5972,4125],{"class":1186},[1050,5974,1203],{"class":1071},[1050,5976,5137],{"class":1186},[1050,5978,1203],{"class":1071},[1050,5980,2657],{"class":2656},[1050,5982,1072],{"class":1071},[1050,5984,4894],{"class":4233},[1050,5986,1268],{"class":1071},[1050,5988,5989,5991],{"class":1052,"line":1416},[1050,5990,2080],{"class":1063},[1050,5992,5069],{"class":1067},[1050,5994,5995,5997,5999,6001,6003,6005,6007],{"class":1052,"line":1421},[1050,5996,2103],{"class":1063},[1050,5998,2657],{"class":2656},[1050,6000,1072],{"class":1071},[1050,6002,4880],{"class":4233},[1050,6004,1072],{"class":1071},[1050,6006,5168],{"class":4233},[1050,6008,1396],{"class":1071},[1050,6010,6011,6013],{"class":1052,"line":1427},[1050,6012,2080],{"class":1063},[1050,6014,5384],{"class":2146},[1050,6016,6017],{"class":1052,"line":1447},[1050,6018,1169],{"class":1067},[1050,6020,6021,6023,6026,6028,6030,6032,6034,6037],{"class":1052,"line":1452},[1050,6022,2015],{"class":1141},[1050,6024,6025],{"class":1145}," create",[1050,6027,1190],{"class":1071},[1050,6029,2024],{"class":2023},[1050,6031,1203],{"class":1071},[1050,6033,3957],{"class":1390},[1050,6035,6036],{"class":2029},"fields",[1050,6038,2053],{"class":1071},[1050,6040,6041,6043,6046],{"class":1052,"line":1458},[1050,6042,2058],{"class":1155},[1050,6044,6045],{"class":1159},"Create instance (write to both DB and cache).",[1050,6047,1163],{"class":1155},[1050,6049,6050],{"class":1052,"line":1471},[1050,6051,6052],{"class":1056},"        # Create in database\n",[1050,6054,6055,6057,6059,6061,6063,6065,6067,6069,6071,6074,6076,6078,6080],{"class":1052,"line":1495},[1050,6056,5033],{"class":1067},[1050,6058,1220],{"class":1071},[1050,6060,2657],{"class":2656},[1050,6062,1072],{"class":1071},[1050,6064,4880],{"class":4233},[1050,6066,1072],{"class":1071},[1050,6068,4552],{"class":4233},[1050,6070,1072],{"class":1071},[1050,6072,6073],{"class":1186},"create",[1050,6075,1190],{"class":1071},[1050,6077,5287],{"class":1390},[1050,6079,6036],{"class":1186},[1050,6081,1268],{"class":1071},[1050,6083,6084],{"class":1052,"line":1516},[1050,6085,2412],{"class":1067},[1050,6087,6088],{"class":1052,"line":1536},[1050,6089,6090],{"class":1056},"        # Immediately cache\n",[1050,6092,6093,6095,6097,6099,6101,6103,6105,6108,6110,6112],{"class":1052,"line":1551},[1050,6094,5004],{"class":1067},[1050,6096,1220],{"class":1071},[1050,6098,2657],{"class":2656},[1050,6100,1072],{"class":1071},[1050,6102,5013],{"class":1186},[1050,6104,1190],{"class":1071},[1050,6106,6107],{"class":1186},"instance",[1050,6109,1072],{"class":1071},[1050,6111,4965],{"class":4233},[1050,6113,1268],{"class":1071},[1050,6115,6116,6118,6120,6122,6124,6126,6128,6130,6132,6134,6136,6138],{"class":1052,"line":1556},[1050,6117,2740],{"class":1067},[1050,6119,1072],{"class":1071},[1050,6121,1187],{"class":1186},[1050,6123,1190],{"class":1071},[1050,6125,4125],{"class":1186},[1050,6127,1203],{"class":1071},[1050,6129,5137],{"class":1186},[1050,6131,1203],{"class":1071},[1050,6133,2657],{"class":2656},[1050,6135,1072],{"class":1071},[1050,6137,4894],{"class":4233},[1050,6139,1268],{"class":1071},[1050,6141,6142],{"class":1052,"line":1562},[1050,6143,2412],{"class":1067},[1050,6145,6146,6148],{"class":1052,"line":1605},[1050,6147,4291],{"class":1063},[1050,6149,5069],{"class":1067},[1050,6151,6152],{"class":1052,"line":1628},[1050,6153,1169],{"class":1067},[1050,6155,6156,6158,6161,6163,6165,6167,6169,6171,6173,6175],{"class":1052,"line":1633},[1050,6157,2015],{"class":1141},[1050,6159,6160],{"class":1145}," update",[1050,6162,1190],{"class":1071},[1050,6164,2024],{"class":2023},[1050,6166,1203],{"class":1071},[1050,6168,4919],{"class":2029},[1050,6170,1203],{"class":1071},[1050,6172,3957],{"class":1390},[1050,6174,6036],{"class":2029},[1050,6176,2053],{"class":1071},[1050,6178,6179,6181,6184],{"class":1052,"line":1639},[1050,6180,2058],{"class":1155},[1050,6182,6183],{"class":1159},"Update instance (write to both DB and cache).",[1050,6185,1163],{"class":1155},[1050,6187,6188],{"class":1052,"line":1675},[1050,6189,5248],{"class":1056},[1050,6191,6192,6194,6196,6198,6200,6202,6204,6206,6208,6210,6212,6214,6216,6218,6220,6222,6224,6226,6228],{"class":1052,"line":1680},[1050,6193,5253],{"class":1067},[1050,6195,1220],{"class":1071},[1050,6197,2657],{"class":2656},[1050,6199,1072],{"class":1071},[1050,6201,4880],{"class":4233},[1050,6203,1072],{"class":1071},[1050,6205,4552],{"class":4233},[1050,6207,1072],{"class":1071},[1050,6209,4557],{"class":1186},[1050,6211,1190],{"class":1071},[1050,6213,4965],{"class":1216},[1050,6215,1220],{"class":1071},[1050,6217,4965],{"class":1186},[1050,6219,4088],{"class":1071},[1050,6221,5282],{"class":1186},[1050,6223,1190],{"class":1071},[1050,6225,5287],{"class":1390},[1050,6227,6036],{"class":1186},[1050,6229,1268],{"class":1071},[1050,6231,6232],{"class":1052,"line":1686},[1050,6233,2412],{"class":1067},[1050,6235,6236,6238,6240,6242,6244],{"class":1052,"line":1692},[1050,6237,2386],{"class":1063},[1050,6239,5302],{"class":1067},[1050,6241,5305],{"class":1390},[1050,6243,4688],{"class":1223},[1050,6245,1396],{"class":1071},[1050,6247,6248],{"class":1052,"line":1697},[1050,6249,6250],{"class":1056},"            # Get updated instance\n",[1050,6252,6253,6255,6257,6259,6261,6263,6265,6267,6269,6271,6273,6275,6277,6279],{"class":1052,"line":1703},[1050,6254,5089],{"class":1067},[1050,6256,1220],{"class":1071},[1050,6258,2657],{"class":2656},[1050,6260,1072],{"class":1071},[1050,6262,4880],{"class":4233},[1050,6264,1072],{"class":1071},[1050,6266,4552],{"class":4233},[1050,6268,1072],{"class":1071},[1050,6270,1257],{"class":1186},[1050,6272,1190],{"class":1071},[1050,6274,4965],{"class":1216},[1050,6276,1220],{"class":1071},[1050,6278,4965],{"class":1186},[1050,6280,1268],{"class":1071},[1050,6282,6283],{"class":1052,"line":1713},[1050,6284,2594],{"class":1067},[1050,6286,6287],{"class":1052,"line":1723},[1050,6288,6289],{"class":1056},"            # Update cache\n",[1050,6291,6292,6294,6296,6298,6300,6302,6304,6306],{"class":1052,"line":1728},[1050,6293,5319],{"class":1067},[1050,6295,1220],{"class":1071},[1050,6297,2657],{"class":2656},[1050,6299,1072],{"class":1071},[1050,6301,5013],{"class":1186},[1050,6303,1190],{"class":1071},[1050,6305,4965],{"class":1186},[1050,6307,1268],{"class":1071},[1050,6309,6310,6312,6314,6316,6318,6320,6322,6324,6326,6328,6330,6332],{"class":1052,"line":1734},[1050,6311,2119],{"class":1067},[1050,6313,1072],{"class":1071},[1050,6315,1187],{"class":1186},[1050,6317,1190],{"class":1071},[1050,6319,4125],{"class":1186},[1050,6321,1203],{"class":1071},[1050,6323,5137],{"class":1186},[1050,6325,1203],{"class":1071},[1050,6327,2657],{"class":2656},[1050,6329,1072],{"class":1071},[1050,6331,4894],{"class":4233},[1050,6333,1268],{"class":1071},[1050,6335,6336],{"class":1052,"line":1744},[1050,6337,2594],{"class":1067},[1050,6339,6340,6342],{"class":1052,"line":1749},[1050,6341,2080],{"class":1063},[1050,6343,5069],{"class":1067},[1050,6345,6346],{"class":1052,"line":1755},[1050,6347,2412],{"class":1067},[1050,6349,6350,6352],{"class":1052,"line":1779},[1050,6351,4291],{"class":1063},[1050,6353,5384],{"class":2146},[1050,6355,6356],{"class":1052,"line":1800},[1050,6357,1169],{"class":1067},[1050,6359,6360,6362,6365,6367,6369,6371,6373],{"class":1052,"line":1805},[1050,6361,2015],{"class":1141},[1050,6363,6364],{"class":1145}," delete",[1050,6366,1190],{"class":1071},[1050,6368,2024],{"class":2023},[1050,6370,1203],{"class":1071},[1050,6372,4919],{"class":2029},[1050,6374,2053],{"class":1071},[1050,6376,6377,6379,6382],{"class":1052,"line":1811},[1050,6378,2058],{"class":1155},[1050,6380,6381],{"class":1159},"Delete instance (remove from both DB and cache).",[1050,6383,1163],{"class":1155},[1050,6385,6386],{"class":1052,"line":1868},[1050,6387,5419],{"class":1056},[1050,6389,6390,6392,6394,6396,6398,6400,6402,6404,6406,6408,6410,6412,6414,6416,6418,6420,6422,6424],{"class":1052,"line":1909},[1050,6391,5424],{"class":1067},[1050,6393,1220],{"class":1071},[1050,6395,2657],{"class":2656},[1050,6397,1072],{"class":1071},[1050,6399,4880],{"class":4233},[1050,6401,1072],{"class":1071},[1050,6403,4552],{"class":4233},[1050,6405,1072],{"class":1071},[1050,6407,4557],{"class":1186},[1050,6409,1190],{"class":1071},[1050,6411,4965],{"class":1216},[1050,6413,1220],{"class":1071},[1050,6415,4965],{"class":1186},[1050,6417,4088],{"class":1071},[1050,6419,1434],{"class":1186},[1050,6421,5455],{"class":1071},[1050,6423,2050],{"class":1223},[1050,6425,1776],{"class":1071},[1050,6427,6428],{"class":1052,"line":2721},[1050,6429,2412],{"class":1067},[1050,6431,6432,6434,6436,6438,6440],{"class":1052,"line":2731},[1050,6433,2386],{"class":1063},[1050,6435,5470],{"class":1067},[1050,6437,5305],{"class":1390},[1050,6439,4688],{"class":1223},[1050,6441,1396],{"class":1071},[1050,6443,6444],{"class":1052,"line":2737},[1050,6445,6446],{"class":1056},"            # Remove from cache\n",[1050,6448,6449,6451,6453,6455,6457,6459,6461,6463],{"class":1052,"line":2761},[1050,6450,5319],{"class":1067},[1050,6452,1220],{"class":1071},[1050,6454,2657],{"class":2656},[1050,6456,1072],{"class":1071},[1050,6458,5013],{"class":1186},[1050,6460,1190],{"class":1071},[1050,6462,4965],{"class":1186},[1050,6464,1268],{"class":1071},[1050,6466,6467,6469,6471,6473,6475,6477],{"class":1052,"line":2766},[1050,6468,2119],{"class":1067},[1050,6470,1072],{"class":1071},[1050,6472,1434],{"class":1186},[1050,6474,1190],{"class":1071},[1050,6476,4125],{"class":1186},[1050,6478,1268],{"class":1071},[1050,6480,6481],{"class":1052,"line":2772},[1050,6482,2412],{"class":1067},[1050,6484,6485,6487,6489,6491],{"class":1052,"line":2788},[1050,6486,4291],{"class":1063},[1050,6488,5470],{"class":1067},[1050,6490,5305],{"class":1390},[1050,6492,5527],{"class":1223},[1050,6494,6495],{"class":1052,"line":2811},[1050,6496,1129],{"emptyLinePlaceholder":1128},[1050,6498,6499],{"class":1052,"line":2838},[1050,6500,4715],{"class":1056},[1050,6502,6503,6506,6508,6510,6512,6514],{"class":1052,"line":2854},[1050,6504,6505],{"class":1067},"wt_cache ",[1050,6507,1220],{"class":1071},[1050,6509,5701],{"class":1186},[1050,6511,1190],{"class":1071},[1050,6513,5549],{"class":1186},[1050,6515,1268],{"class":1071},[1050,6517,6518],{"class":1052,"line":2878},[1050,6519,1129],{"emptyLinePlaceholder":1128},[1050,6521,6522],{"class":1052,"line":2883},[1050,6523,6524],{"class":1056},"# Create (writes to both DB and cache)\n",[1050,6526,6527,6530,6532,6535,6537,6539,6541,6544,6546,6548,6551,6553,6555,6558,6560,6562,6565,6567],{"class":1052,"line":2902},[1050,6528,6529],{"class":1067},"new_post ",[1050,6531,1220],{"class":1071},[1050,6533,6534],{"class":1067}," wt_cache",[1050,6536,1072],{"class":1071},[1050,6538,6073],{"class":1186},[1050,6540,1190],{"class":1071},[1050,6542,6543],{"class":1216},"title",[1050,6545,1220],{"class":1071},[1050,6547,1296],{"class":1193},[1050,6549,6550],{"class":1197},"New Post",[1050,6552,1296],{"class":1193},[1050,6554,1203],{"class":1071},[1050,6556,6557],{"class":1216}," content",[1050,6559,1220],{"class":1071},[1050,6561,1296],{"class":1193},[1050,6563,6564],{"class":1197},"Content",[1050,6566,1296],{"class":1193},[1050,6568,1268],{"class":1071},[1050,6570,6571],{"class":1052,"line":2912},[1050,6572,1129],{"emptyLinePlaceholder":1128},[1050,6574,6575],{"class":1052,"line":2932},[1050,6576,6577],{"class":1056},"# Update (writes to both DB and cache)\n",[1050,6579,6580,6582,6584,6586,6588,6590,6592,6595,6597,6599,6601,6603,6605,6607,6610,6612],{"class":1052,"line":2956},[1050,6581,5626],{"class":1067},[1050,6583,1220],{"class":1071},[1050,6585,6534],{"class":1067},[1050,6587,1072],{"class":1071},[1050,6589,5282],{"class":1186},[1050,6591,1190],{"class":1071},[1050,6593,6594],{"class":1186},"new_post",[1050,6596,1072],{"class":1071},[1050,6598,4965],{"class":4233},[1050,6600,1203],{"class":1071},[1050,6602,5644],{"class":1216},[1050,6604,1220],{"class":1071},[1050,6606,1296],{"class":1193},[1050,6608,6609],{"class":1197},"Updated Title",[1050,6611,1296],{"class":1193},[1050,6613,1268],{"class":1071},[1050,6615,6616],{"class":1052,"line":2961},[1050,6617,1129],{"emptyLinePlaceholder":1128},[1050,6619,6620],{"class":1052,"line":2970},[1050,6621,6622],{"class":1056},"# Get (cache-first)\n",[1050,6624,6625,6627,6629,6631,6633,6635,6637,6639,6641,6643],{"class":1052,"line":2976},[1050,6626,5597],{"class":1067},[1050,6628,1220],{"class":1071},[1050,6630,6534],{"class":1067},[1050,6632,1072],{"class":1071},[1050,6634,1257],{"class":1186},[1050,6636,1190],{"class":1071},[1050,6638,6594],{"class":1186},[1050,6640,1072],{"class":1071},[1050,6642,4965],{"class":4233},[1050,6644,1268],{"class":1071},[1030,6646,6648],{"id":6647},"complex-data-caching","Complex Data Caching",[1035,6650,6652],{"id":6651},"caching-query-results","Caching Query Results",[1040,6654,6656],{"className":1042,"code":6655,"language":1044,"meta":1045,"style":1045},"# Advanced query result caching\nfrom django.core.cache import cache\nfrom django.db import models\nfrom django.db.models import Q, Count, Avg\nimport hashlib\nimport json\n\nclass QueryCache:\n    \"\"\"Cache complex database query results.\"\"\"\n    \n    def __init__(self, cache_timeout=600):\n        self.cache_timeout = cache_timeout\n    \n    def generate_query_key(self, model_class, filters=None, ordering=None, annotations=None):\n        \"\"\"Generate cache key for query parameters.\"\"\"\n        key_parts = [\n            model_class._meta.label_lower,\n            'query'\n        ]\n        \n        # Add filters\n        if filters:\n            filter_str = json.dumps(filters, sort_keys=True)\n            key_parts.append(hashlib.md5(filter_str.encode()).hexdigest())\n        \n        # Add ordering\n        if ordering:\n            order_str = ':'.join(ordering) if isinstance(ordering, (list, tuple)) else ordering\n            key_parts.append(f\"order_{hashlib.md5(order_str.encode()).hexdigest()}\")\n        \n        # Add annotations\n        if annotations:\n            ann_str = json.dumps(annotations, sort_keys=True)\n            key_parts.append(f\"ann_{hashlib.md5(ann_str.encode()).hexdigest()}\")\n        \n        return ':'.join(key_parts)\n    \n    def cached_query(self, queryset, cache_key=None, timeout=None):\n        \"\"\"Cache queryset results.\"\"\"\n        if cache_key is None:\n            # Generate key from queryset\n            cache_key = f\"queryset:{hash(str(queryset.query))}\"\n        \n        if timeout is None:\n            timeout = self.cache_timeout\n        \n        # Try cache first\n        cached_result = cache.get(cache_key)\n        if cached_result is not None:\n            return cached_result\n        \n        # Execute query and cache results\n        result = list(queryset)\n        cache.set(cache_key, result, timeout)\n        \n        return result\n    \n    def cached_aggregate(self, queryset, aggregations, cache_key=None, timeout=None):\n        \"\"\"Cache aggregate query results.\"\"\"\n        if cache_key is None:\n            agg_str = json.dumps(aggregations, sort_keys=True)\n            cache_key = f\"aggregate:{hash(str(queryset.query))}:{hashlib.md5(agg_str.encode()).hexdigest()}\"\n        \n        if timeout is None:\n            timeout = self.cache_timeout\n        \n        # Try cache first\n        cached_result = cache.get(cache_key)\n        if cached_result is not None:\n            return cached_result\n        \n        # Execute aggregate and cache result\n        result = queryset.aggregate(**aggregations)\n        cache.set(cache_key, result, timeout)\n        \n        return result\n    \n    def cached_count(self, queryset, cache_key=None, timeout=None):\n        \"\"\"Cache count query results.\"\"\"\n        if cache_key is None:\n            cache_key = f\"count:{hash(str(queryset.query))}\"\n        \n        if timeout is None:\n            timeout = self.cache_timeout\n        \n        # Try cache first\n        cached_count = cache.get(cache_key)\n        if cached_count is not None:\n            return cached_count\n        \n        # Execute count and cache result\n        count = queryset.count()\n        cache.set(cache_key, count, timeout)\n        \n        return count\n\n# Usage examples\nquery_cache = QueryCache(cache_timeout=900)  # 15 minutes\n\n# Cache complex query\ndef get_popular_posts():\n    \"\"\"Get popular posts with caching.\"\"\"\n    queryset = Post.objects.filter(\n        published=True\n    ).annotate(\n        comment_count=Count('comments')\n    ).filter(\n        comment_count__gte=5\n    ).order_by('-views', '-created_at')[:10]\n    \n    cache_key = 'popular_posts_with_comments'\n    return query_cache.cached_query(queryset, cache_key, timeout=1800)\n\n# Cache aggregate results\ndef get_blog_statistics():\n    \"\"\"Get blog statistics with caching.\"\"\"\n    queryset = Post.objects.filter(published=True)\n    \n    aggregations = {\n        'total_posts': Count('id'),\n        'avg_views': Avg('views'),\n        'total_views': models.Sum('views'),\n    }\n    \n    cache_key = 'blog_statistics'\n    return query_cache.cached_aggregate(queryset, aggregations, cache_key)\n\n# Cache count queries\ndef get_published_post_count():\n    \"\"\"Get published post count with caching.\"\"\"\n    queryset = Post.objects.filter(published=True)\n    cache_key = 'published_post_count'\n    return query_cache.cached_count(queryset, cache_key, timeout=3600)\n",[1047,6657,6658,6663,6681,6695,6722,6728,6734,6738,6747,6756,6760,6780,6792,6796,6840,6849,6859,6874,6884,6889,6893,6898,6906,6937,6972,6976,6981,6989,7045,7089,7093,7098,7106,7134,7178,7182,7203,7207,7241,7250,7263,7268,7304,7308,7321,7335,7339,7343,7362,7377,7384,7388,7393,7408,7430,7434,7440,7444,7482,7491,7503,7531,7591,7595,7607,7619,7623,7627,7645,7659,7665,7669,7674,7694,7716,7720,7726,7730,7763,7772,7784,7817,7821,7833,7845,7849,7853,7872,7887,7894,7898,7903,7918,7941,7945,7952,7956,7960,7983,7987,7992,8001,8010,8029,8039,8049,8070,8078,8088,8120,8124,8138,8168,8172,8177,8186,8195,8222,8226,8235,8259,8284,8313,8317,8321,8334,8359,8363,8368,8377,8386,8412,8425],{"__ignoreMap":1045},[1050,6659,6660],{"class":1052,"line":1053},[1050,6661,6662],{"class":1056},"# Advanced query result caching\n",[1050,6664,6665,6667,6669,6671,6673,6675,6677,6679],{"class":1052,"line":1060},[1050,6666,1064],{"class":1063},[1050,6668,1068],{"class":1067},[1050,6670,1072],{"class":1071},[1050,6672,1075],{"class":1067},[1050,6674,1072],{"class":1071},[1050,6676,1080],{"class":1067},[1050,6678,1083],{"class":1063},[1050,6680,1086],{"class":1067},[1050,6682,6683,6685,6687,6689,6691,6693],{"class":1052,"line":1089},[1050,6684,1064],{"class":1063},[1050,6686,1068],{"class":1067},[1050,6688,1072],{"class":1071},[1050,6690,4794],{"class":1067},[1050,6692,1083],{"class":1063},[1050,6694,4799],{"class":1067},[1050,6696,6697,6699,6701,6703,6705,6707,6709,6711,6714,6716,6718,6720],{"class":1052,"line":1109},[1050,6698,1064],{"class":1063},[1050,6700,1068],{"class":1067},[1050,6702,1072],{"class":1071},[1050,6704,4486],{"class":1067},[1050,6706,1072],{"class":1071},[1050,6708,4491],{"class":1067},[1050,6710,1083],{"class":1063},[1050,6712,6713],{"class":1067}," Q",[1050,6715,1203],{"class":1071},[1050,6717,4496],{"class":1067},[1050,6719,1203],{"class":1071},[1050,6721,4501],{"class":1067},[1050,6723,6724,6726],{"class":1052,"line":1117},[1050,6725,1083],{"class":1063},[1050,6727,3862],{"class":1067},[1050,6729,6730,6732],{"class":1052,"line":1125},[1050,6731,1083],{"class":1063},[1050,6733,1114],{"class":1067},[1050,6735,6736],{"class":1052,"line":1132},[1050,6737,1129],{"emptyLinePlaceholder":1128},[1050,6739,6740,6742,6745],{"class":1052,"line":1138},[1050,6741,1991],{"class":1141},[1050,6743,6744],{"class":1994}," QueryCache",[1050,6746,1396],{"class":1071},[1050,6748,6749,6751,6754],{"class":1052,"line":1152},[1050,6750,1156],{"class":1155},[1050,6752,6753],{"class":1159},"Cache complex database query results.",[1050,6755,1163],{"class":1155},[1050,6757,6758],{"class":1052,"line":1166},[1050,6759,1169],{"class":1067},[1050,6761,6762,6764,6766,6768,6770,6772,6774,6776,6778],{"class":1052,"line":1172},[1050,6763,2015],{"class":1141},[1050,6765,4849],{"class":1274},[1050,6767,1190],{"class":1071},[1050,6769,2024],{"class":2023},[1050,6771,1203],{"class":1071},[1050,6773,4863],{"class":2029},[1050,6775,1220],{"class":1390},[1050,6777,1546],{"class":1223},[1050,6779,2053],{"class":1071},[1050,6781,6782,6784,6786,6788,6790],{"class":1052,"line":1178},[1050,6783,4875],{"class":2656},[1050,6785,1072],{"class":1071},[1050,6787,4894],{"class":4233},[1050,6789,4237],{"class":1071},[1050,6791,4899],{"class":1067},[1050,6793,6794],{"class":1052,"line":1233},[1050,6795,1169],{"class":1067},[1050,6797,6798,6800,6803,6805,6807,6809,6811,6813,6816,6818,6820,6822,6825,6827,6829,6831,6834,6836,6838],{"class":1052,"line":1238},[1050,6799,2015],{"class":1141},[1050,6801,6802],{"class":1145}," generate_query_key",[1050,6804,1190],{"class":1071},[1050,6806,2024],{"class":2023},[1050,6808,1203],{"class":1071},[1050,6810,4858],{"class":2029},[1050,6812,1203],{"class":1071},[1050,6814,6815],{"class":2029}," filters",[1050,6817,1220],{"class":1390},[1050,6819,2147],{"class":2146},[1050,6821,1203],{"class":1071},[1050,6823,6824],{"class":2029}," ordering",[1050,6826,1220],{"class":1390},[1050,6828,2147],{"class":2146},[1050,6830,1203],{"class":1071},[1050,6832,6833],{"class":2029}," annotations",[1050,6835,1220],{"class":1390},[1050,6837,2147],{"class":2146},[1050,6839,2053],{"class":1071},[1050,6841,6842,6844,6847],{"class":1052,"line":1244},[1050,6843,2058],{"class":1155},[1050,6845,6846],{"class":1159},"Generate cache key for query parameters.",[1050,6848,1163],{"class":1155},[1050,6850,6851,6854,6856],{"class":1052,"line":1271},[1050,6852,6853],{"class":1067},"        key_parts ",[1050,6855,1220],{"class":1071},[1050,6857,6858],{"class":1071}," [\n",[1050,6860,6861,6864,6866,6868,6870,6872],{"class":1052,"line":1301},[1050,6862,6863],{"class":1067},"            model_class",[1050,6865,1072],{"class":1071},[1050,6867,4951],{"class":4233},[1050,6869,1072],{"class":1071},[1050,6871,4956],{"class":4233},[1050,6873,1492],{"class":1071},[1050,6875,6876,6879,6882],{"class":1052,"line":1306},[1050,6877,6878],{"class":1193},"            '",[1050,6880,6881],{"class":1197},"query",[1050,6883,1533],{"class":1193},[1050,6885,6886],{"class":1052,"line":1312},[1050,6887,6888],{"class":1071},"        ]\n",[1050,6890,6891],{"class":1052,"line":1345},[1050,6892,2412],{"class":1067},[1050,6894,6895],{"class":1052,"line":1367},[1050,6896,6897],{"class":1056},"        # Add filters\n",[1050,6899,6900,6902,6904],{"class":1052,"line":1372},[1050,6901,2386],{"class":1063},[1050,6903,6815],{"class":1067},[1050,6905,1396],{"class":1071},[1050,6907,6908,6911,6913,6916,6918,6920,6922,6925,6927,6930,6932,6935],{"class":1052,"line":1378},[1050,6909,6910],{"class":1067},"            filter_str ",[1050,6912,1220],{"class":1071},[1050,6914,6915],{"class":1067}," json",[1050,6917,1072],{"class":1071},[1050,6919,4026],{"class":1186},[1050,6921,1190],{"class":1071},[1050,6923,6924],{"class":1186},"filters",[1050,6926,1203],{"class":1071},[1050,6928,6929],{"class":1216}," sort_keys",[1050,6931,1220],{"class":1071},[1050,6933,6934],{"class":2146},"True",[1050,6936,1268],{"class":1071},[1050,6938,6939,6942,6944,6947,6949,6951,6953,6955,6957,6960,6962,6965,6968,6970],{"class":1052,"line":1399},[1050,6940,6941],{"class":1067},"            key_parts",[1050,6943,1072],{"class":1071},[1050,6945,6946],{"class":1186},"append",[1050,6948,1190],{"class":1071},[1050,6950,4075],{"class":1186},[1050,6952,1072],{"class":1071},[1050,6954,4080],{"class":1186},[1050,6956,1190],{"class":1071},[1050,6958,6959],{"class":1186},"filter_str",[1050,6961,1072],{"class":1071},[1050,6963,6964],{"class":1186},"encode",[1050,6966,6967],{"class":1071},"()).",[1050,6969,4091],{"class":1186},[1050,6971,2835],{"class":1071},[1050,6973,6974],{"class":1052,"line":1416},[1050,6975,2412],{"class":1067},[1050,6977,6978],{"class":1052,"line":1421},[1050,6979,6980],{"class":1056},"        # Add ordering\n",[1050,6982,6983,6985,6987],{"class":1052,"line":1427},[1050,6984,2386],{"class":1063},[1050,6986,6824],{"class":1067},[1050,6988,1396],{"class":1071},[1050,6990,6991,6994,6996,6998,7000,7002,7004,7007,7009,7012,7014,7017,7020,7022,7024,7026,7029,7031,7033,7036,7039,7042],{"class":1052,"line":1447},[1050,6992,6993],{"class":1067},"            order_str ",[1050,6995,1220],{"class":1071},[1050,6997,1206],{"class":1193},[1050,6999,1482],{"class":1197},[1050,7001,1194],{"class":1193},[1050,7003,1072],{"class":1071},[1050,7005,7006],{"class":1186},"join",[1050,7008,1190],{"class":1071},[1050,7010,7011],{"class":1186},"ordering",[1050,7013,1227],{"class":1071},[1050,7015,7016],{"class":1063}," if",[1050,7018,7019],{"class":1274}," isinstance",[1050,7021,1190],{"class":1071},[1050,7023,7011],{"class":1186},[1050,7025,1203],{"class":1071},[1050,7027,7028],{"class":1071}," (",[1050,7030,2987],{"class":2106},[1050,7032,1203],{"class":1071},[1050,7034,7035],{"class":2106}," tuple",[1050,7037,7038],{"class":1071},"))",[1050,7040,7041],{"class":1063}," else",[1050,7043,7044],{"class":1067}," ordering\n",[1050,7046,7047,7049,7051,7053,7055,7057,7060,7062,7064,7066,7068,7070,7073,7075,7077,7079,7081,7083,7085,7087],{"class":1052,"line":1452},[1050,7048,6941],{"class":1067},[1050,7050,1072],{"class":1071},[1050,7052,6946],{"class":1186},[1050,7054,1190],{"class":1071},[1050,7056,1280],{"class":1141},[1050,7058,7059],{"class":1197},"\"order_",[1050,7061,1287],{"class":1286},[1050,7063,4075],{"class":1186},[1050,7065,1072],{"class":1071},[1050,7067,4080],{"class":1186},[1050,7069,1190],{"class":1071},[1050,7071,7072],{"class":1186},"order_str",[1050,7074,1072],{"class":1071},[1050,7076,6964],{"class":1186},[1050,7078,6967],{"class":1071},[1050,7080,4091],{"class":1186},[1050,7082,4094],{"class":1071},[1050,7084,1293],{"class":1286},[1050,7086,1296],{"class":1197},[1050,7088,1268],{"class":1071},[1050,7090,7091],{"class":1052,"line":1458},[1050,7092,2412],{"class":1067},[1050,7094,7095],{"class":1052,"line":1471},[1050,7096,7097],{"class":1056},"        # Add annotations\n",[1050,7099,7100,7102,7104],{"class":1052,"line":1495},[1050,7101,2386],{"class":1063},[1050,7103,6833],{"class":1067},[1050,7105,1396],{"class":1071},[1050,7107,7108,7111,7113,7115,7117,7119,7121,7124,7126,7128,7130,7132],{"class":1052,"line":1516},[1050,7109,7110],{"class":1067},"            ann_str ",[1050,7112,1220],{"class":1071},[1050,7114,6915],{"class":1067},[1050,7116,1072],{"class":1071},[1050,7118,4026],{"class":1186},[1050,7120,1190],{"class":1071},[1050,7122,7123],{"class":1186},"annotations",[1050,7125,1203],{"class":1071},[1050,7127,6929],{"class":1216},[1050,7129,1220],{"class":1071},[1050,7131,6934],{"class":2146},[1050,7133,1268],{"class":1071},[1050,7135,7136,7138,7140,7142,7144,7146,7149,7151,7153,7155,7157,7159,7162,7164,7166,7168,7170,7172,7174,7176],{"class":1052,"line":1536},[1050,7137,6941],{"class":1067},[1050,7139,1072],{"class":1071},[1050,7141,6946],{"class":1186},[1050,7143,1190],{"class":1071},[1050,7145,1280],{"class":1141},[1050,7147,7148],{"class":1197},"\"ann_",[1050,7150,1287],{"class":1286},[1050,7152,4075],{"class":1186},[1050,7154,1072],{"class":1071},[1050,7156,4080],{"class":1186},[1050,7158,1190],{"class":1071},[1050,7160,7161],{"class":1186},"ann_str",[1050,7163,1072],{"class":1071},[1050,7165,6964],{"class":1186},[1050,7167,6967],{"class":1071},[1050,7169,4091],{"class":1186},[1050,7171,4094],{"class":1071},[1050,7173,1293],{"class":1286},[1050,7175,1296],{"class":1197},[1050,7177,1268],{"class":1071},[1050,7179,7180],{"class":1052,"line":1551},[1050,7181,2412],{"class":1067},[1050,7183,7184,7186,7188,7190,7192,7194,7196,7198,7201],{"class":1052,"line":1556},[1050,7185,4291],{"class":1063},[1050,7187,1206],{"class":1193},[1050,7189,1482],{"class":1197},[1050,7191,1194],{"class":1193},[1050,7193,1072],{"class":1071},[1050,7195,7006],{"class":1186},[1050,7197,1190],{"class":1071},[1050,7199,7200],{"class":1186},"key_parts",[1050,7202,1268],{"class":1071},[1050,7204,7205],{"class":1052,"line":1562},[1050,7206,1169],{"class":1067},[1050,7208,7209,7211,7214,7216,7218,7220,7223,7225,7227,7229,7231,7233,7235,7237,7239],{"class":1052,"line":1605},[1050,7210,2015],{"class":1141},[1050,7212,7213],{"class":1145}," cached_query",[1050,7215,1190],{"class":1071},[1050,7217,2024],{"class":2023},[1050,7219,1203],{"class":1071},[1050,7221,7222],{"class":2029}," queryset",[1050,7224,1203],{"class":1071},[1050,7226,4279],{"class":2029},[1050,7228,1220],{"class":1390},[1050,7230,2147],{"class":2146},[1050,7232,1203],{"class":1071},[1050,7234,1217],{"class":2029},[1050,7236,1220],{"class":1390},[1050,7238,2147],{"class":2146},[1050,7240,2053],{"class":1071},[1050,7242,7243,7245,7248],{"class":1052,"line":1628},[1050,7244,2058],{"class":1155},[1050,7246,7247],{"class":1159},"Cache queryset results.",[1050,7249,1163],{"class":1155},[1050,7251,7252,7254,7257,7259,7261],{"class":1052,"line":1633},[1050,7253,2386],{"class":1063},[1050,7255,7256],{"class":1067}," cache_key ",[1050,7258,2392],{"class":1390},[1050,7260,2398],{"class":2146},[1050,7262,1396],{"class":1071},[1050,7264,7265],{"class":1052,"line":1639},[1050,7266,7267],{"class":1056},"            # Generate key from queryset\n",[1050,7269,7270,7272,7274,7276,7279,7281,7284,7286,7289,7291,7294,7296,7298,7300,7302],{"class":1052,"line":1675},[1050,7271,5319],{"class":1067},[1050,7273,1220],{"class":1071},[1050,7275,2427],{"class":1141},[1050,7277,7278],{"class":1197},"\"queryset:",[1050,7280,1287],{"class":1286},[1050,7282,7283],{"class":1274},"hash",[1050,7285,1190],{"class":1071},[1050,7287,7288],{"class":2106},"str",[1050,7290,1190],{"class":1071},[1050,7292,7293],{"class":1186},"queryset",[1050,7295,1072],{"class":1071},[1050,7297,6881],{"class":4233},[1050,7299,7038],{"class":1071},[1050,7301,1293],{"class":1286},[1050,7303,2808],{"class":1197},[1050,7305,7306],{"class":1052,"line":1680},[1050,7307,2412],{"class":1067},[1050,7309,7310,7312,7315,7317,7319],{"class":1052,"line":1686},[1050,7311,2386],{"class":1063},[1050,7313,7314],{"class":1067}," timeout ",[1050,7316,2392],{"class":1390},[1050,7318,2398],{"class":2146},[1050,7320,1396],{"class":1071},[1050,7322,7323,7326,7328,7330,7332],{"class":1052,"line":1692},[1050,7324,7325],{"class":1067},"            timeout ",[1050,7327,1220],{"class":1071},[1050,7329,2657],{"class":2656},[1050,7331,1072],{"class":1071},[1050,7333,7334],{"class":4233},"cache_timeout\n",[1050,7336,7337],{"class":1052,"line":1697},[1050,7338,2412],{"class":1067},[1050,7340,7341],{"class":1052,"line":1703},[1050,7342,5028],{"class":1056},[1050,7344,7345,7348,7350,7352,7354,7356,7358,7360],{"class":1052,"line":1713},[1050,7346,7347],{"class":1067},"        cached_result ",[1050,7349,1220],{"class":1071},[1050,7351,1252],{"class":1067},[1050,7353,1072],{"class":1071},[1050,7355,1257],{"class":1186},[1050,7357,1190],{"class":1071},[1050,7359,4125],{"class":1186},[1050,7361,1268],{"class":1071},[1050,7363,7364,7366,7369,7371,7373,7375],{"class":1052,"line":1723},[1050,7365,2386],{"class":1063},[1050,7367,7368],{"class":1067}," cached_result ",[1050,7370,2392],{"class":1390},[1050,7372,2395],{"class":1390},[1050,7374,2398],{"class":2146},[1050,7376,1396],{"class":1071},[1050,7378,7379,7381],{"class":1052,"line":1728},[1050,7380,2080],{"class":1063},[1050,7382,7383],{"class":1067}," cached_result\n",[1050,7385,7386],{"class":1052,"line":1734},[1050,7387,2412],{"class":1067},[1050,7389,7390],{"class":1052,"line":1744},[1050,7391,7392],{"class":1056},"        # Execute query and cache results\n",[1050,7394,7395,7398,7400,7402,7404,7406],{"class":1052,"line":1749},[1050,7396,7397],{"class":1067},"        result ",[1050,7399,1220],{"class":1071},[1050,7401,3372],{"class":2106},[1050,7403,1190],{"class":1071},[1050,7405,7293],{"class":1186},[1050,7407,1268],{"class":1071},[1050,7409,7410,7412,7414,7416,7418,7420,7422,7424,7426,7428],{"class":1052,"line":1755},[1050,7411,2740],{"class":1067},[1050,7413,1072],{"class":1071},[1050,7415,1187],{"class":1186},[1050,7417,1190],{"class":1071},[1050,7419,4125],{"class":1186},[1050,7421,1203],{"class":1071},[1050,7423,4198],{"class":1186},[1050,7425,1203],{"class":1071},[1050,7427,1217],{"class":1186},[1050,7429,1268],{"class":1071},[1050,7431,7432],{"class":1052,"line":1779},[1050,7433,2412],{"class":1067},[1050,7435,7436,7438],{"class":1052,"line":1800},[1050,7437,4291],{"class":1063},[1050,7439,4149],{"class":1067},[1050,7441,7442],{"class":1052,"line":1805},[1050,7443,1169],{"class":1067},[1050,7445,7446,7448,7451,7453,7455,7457,7459,7461,7464,7466,7468,7470,7472,7474,7476,7478,7480],{"class":1052,"line":1811},[1050,7447,2015],{"class":1141},[1050,7449,7450],{"class":1145}," cached_aggregate",[1050,7452,1190],{"class":1071},[1050,7454,2024],{"class":2023},[1050,7456,1203],{"class":1071},[1050,7458,7222],{"class":2029},[1050,7460,1203],{"class":1071},[1050,7462,7463],{"class":2029}," aggregations",[1050,7465,1203],{"class":1071},[1050,7467,4279],{"class":2029},[1050,7469,1220],{"class":1390},[1050,7471,2147],{"class":2146},[1050,7473,1203],{"class":1071},[1050,7475,1217],{"class":2029},[1050,7477,1220],{"class":1390},[1050,7479,2147],{"class":2146},[1050,7481,2053],{"class":1071},[1050,7483,7484,7486,7489],{"class":1052,"line":1868},[1050,7485,2058],{"class":1155},[1050,7487,7488],{"class":1159},"Cache aggregate query results.",[1050,7490,1163],{"class":1155},[1050,7492,7493,7495,7497,7499,7501],{"class":1052,"line":1909},[1050,7494,2386],{"class":1063},[1050,7496,7256],{"class":1067},[1050,7498,2392],{"class":1390},[1050,7500,2398],{"class":2146},[1050,7502,1396],{"class":1071},[1050,7504,7505,7508,7510,7512,7514,7516,7518,7521,7523,7525,7527,7529],{"class":1052,"line":2721},[1050,7506,7507],{"class":1067},"            agg_str ",[1050,7509,1220],{"class":1071},[1050,7511,6915],{"class":1067},[1050,7513,1072],{"class":1071},[1050,7515,4026],{"class":1186},[1050,7517,1190],{"class":1071},[1050,7519,7520],{"class":1186},"aggregations",[1050,7522,1203],{"class":1071},[1050,7524,6929],{"class":1216},[1050,7526,1220],{"class":1071},[1050,7528,6934],{"class":2146},[1050,7530,1268],{"class":1071},[1050,7532,7533,7535,7537,7539,7542,7544,7546,7548,7550,7552,7554,7556,7558,7560,7562,7564,7566,7568,7570,7572,7574,7577,7579,7581,7583,7585,7587,7589],{"class":1052,"line":2731},[1050,7534,5319],{"class":1067},[1050,7536,1220],{"class":1071},[1050,7538,2427],{"class":1141},[1050,7540,7541],{"class":1197},"\"aggregate:",[1050,7543,1287],{"class":1286},[1050,7545,7283],{"class":1274},[1050,7547,1190],{"class":1071},[1050,7549,7288],{"class":2106},[1050,7551,1190],{"class":1071},[1050,7553,7293],{"class":1186},[1050,7555,1072],{"class":1071},[1050,7557,6881],{"class":4233},[1050,7559,7038],{"class":1071},[1050,7561,1293],{"class":1286},[1050,7563,1482],{"class":1197},[1050,7565,1287],{"class":1286},[1050,7567,4075],{"class":1067},[1050,7569,1072],{"class":1071},[1050,7571,4080],{"class":1186},[1050,7573,1190],{"class":1071},[1050,7575,7576],{"class":1186},"agg_str",[1050,7578,1072],{"class":1071},[1050,7580,6964],{"class":1186},[1050,7582,6967],{"class":1071},[1050,7584,4091],{"class":1186},[1050,7586,4094],{"class":1071},[1050,7588,1293],{"class":1286},[1050,7590,2808],{"class":1197},[1050,7592,7593],{"class":1052,"line":2737},[1050,7594,2412],{"class":1067},[1050,7596,7597,7599,7601,7603,7605],{"class":1052,"line":2761},[1050,7598,2386],{"class":1063},[1050,7600,7314],{"class":1067},[1050,7602,2392],{"class":1390},[1050,7604,2398],{"class":2146},[1050,7606,1396],{"class":1071},[1050,7608,7609,7611,7613,7615,7617],{"class":1052,"line":2766},[1050,7610,7325],{"class":1067},[1050,7612,1220],{"class":1071},[1050,7614,2657],{"class":2656},[1050,7616,1072],{"class":1071},[1050,7618,7334],{"class":4233},[1050,7620,7621],{"class":1052,"line":2772},[1050,7622,2412],{"class":1067},[1050,7624,7625],{"class":1052,"line":2788},[1050,7626,5028],{"class":1056},[1050,7628,7629,7631,7633,7635,7637,7639,7641,7643],{"class":1052,"line":2811},[1050,7630,7347],{"class":1067},[1050,7632,1220],{"class":1071},[1050,7634,1252],{"class":1067},[1050,7636,1072],{"class":1071},[1050,7638,1257],{"class":1186},[1050,7640,1190],{"class":1071},[1050,7642,4125],{"class":1186},[1050,7644,1268],{"class":1071},[1050,7646,7647,7649,7651,7653,7655,7657],{"class":1052,"line":2838},[1050,7648,2386],{"class":1063},[1050,7650,7368],{"class":1067},[1050,7652,2392],{"class":1390},[1050,7654,2395],{"class":1390},[1050,7656,2398],{"class":2146},[1050,7658,1396],{"class":1071},[1050,7660,7661,7663],{"class":1052,"line":2854},[1050,7662,2080],{"class":1063},[1050,7664,7383],{"class":1067},[1050,7666,7667],{"class":1052,"line":2878},[1050,7668,2412],{"class":1067},[1050,7670,7671],{"class":1052,"line":2883},[1050,7672,7673],{"class":1056},"        # Execute aggregate and cache result\n",[1050,7675,7676,7678,7680,7682,7684,7686,7688,7690,7692],{"class":1052,"line":2902},[1050,7677,7397],{"class":1067},[1050,7679,1220],{"class":1071},[1050,7681,7222],{"class":1067},[1050,7683,1072],{"class":1071},[1050,7685,4644],{"class":1186},[1050,7687,1190],{"class":1071},[1050,7689,5287],{"class":1390},[1050,7691,7520],{"class":1186},[1050,7693,1268],{"class":1071},[1050,7695,7696,7698,7700,7702,7704,7706,7708,7710,7712,7714],{"class":1052,"line":2912},[1050,7697,2740],{"class":1067},[1050,7699,1072],{"class":1071},[1050,7701,1187],{"class":1186},[1050,7703,1190],{"class":1071},[1050,7705,4125],{"class":1186},[1050,7707,1203],{"class":1071},[1050,7709,4198],{"class":1186},[1050,7711,1203],{"class":1071},[1050,7713,1217],{"class":1186},[1050,7715,1268],{"class":1071},[1050,7717,7718],{"class":1052,"line":2932},[1050,7719,2412],{"class":1067},[1050,7721,7722,7724],{"class":1052,"line":2956},[1050,7723,4291],{"class":1063},[1050,7725,4149],{"class":1067},[1050,7727,7728],{"class":1052,"line":2961},[1050,7729,1169],{"class":1067},[1050,7731,7732,7734,7737,7739,7741,7743,7745,7747,7749,7751,7753,7755,7757,7759,7761],{"class":1052,"line":2970},[1050,7733,2015],{"class":1141},[1050,7735,7736],{"class":1145}," cached_count",[1050,7738,1190],{"class":1071},[1050,7740,2024],{"class":2023},[1050,7742,1203],{"class":1071},[1050,7744,7222],{"class":2029},[1050,7746,1203],{"class":1071},[1050,7748,4279],{"class":2029},[1050,7750,1220],{"class":1390},[1050,7752,2147],{"class":2146},[1050,7754,1203],{"class":1071},[1050,7756,1217],{"class":2029},[1050,7758,1220],{"class":1390},[1050,7760,2147],{"class":2146},[1050,7762,2053],{"class":1071},[1050,7764,7765,7767,7770],{"class":1052,"line":2976},[1050,7766,2058],{"class":1155},[1050,7768,7769],{"class":1159},"Cache count query results.",[1050,7771,1163],{"class":1155},[1050,7773,7774,7776,7778,7780,7782],{"class":1052,"line":2998},[1050,7775,2386],{"class":1063},[1050,7777,7256],{"class":1067},[1050,7779,2392],{"class":1390},[1050,7781,2398],{"class":2146},[1050,7783,1396],{"class":1071},[1050,7785,7786,7788,7790,7792,7795,7797,7799,7801,7803,7805,7807,7809,7811,7813,7815],{"class":1052,"line":3004},[1050,7787,5319],{"class":1067},[1050,7789,1220],{"class":1071},[1050,7791,2427],{"class":1141},[1050,7793,7794],{"class":1197},"\"count:",[1050,7796,1287],{"class":1286},[1050,7798,7283],{"class":1274},[1050,7800,1190],{"class":1071},[1050,7802,7288],{"class":2106},[1050,7804,1190],{"class":1071},[1050,7806,7293],{"class":1186},[1050,7808,1072],{"class":1071},[1050,7810,6881],{"class":4233},[1050,7812,7038],{"class":1071},[1050,7814,1293],{"class":1286},[1050,7816,2808],{"class":1197},[1050,7818,7819],{"class":1052,"line":3019},[1050,7820,2412],{"class":1067},[1050,7822,7823,7825,7827,7829,7831],{"class":1052,"line":3024},[1050,7824,2386],{"class":1063},[1050,7826,7314],{"class":1067},[1050,7828,2392],{"class":1390},[1050,7830,2398],{"class":2146},[1050,7832,1396],{"class":1071},[1050,7834,7835,7837,7839,7841,7843],{"class":1052,"line":3059},[1050,7836,7325],{"class":1067},[1050,7838,1220],{"class":1071},[1050,7840,2657],{"class":2656},[1050,7842,1072],{"class":1071},[1050,7844,7334],{"class":4233},[1050,7846,7847],{"class":1052,"line":3069},[1050,7848,2412],{"class":1067},[1050,7850,7851],{"class":1052,"line":3074},[1050,7852,5028],{"class":1056},[1050,7854,7855,7858,7860,7862,7864,7866,7868,7870],{"class":1052,"line":3097},[1050,7856,7857],{"class":1067},"        cached_count ",[1050,7859,1220],{"class":1071},[1050,7861,1252],{"class":1067},[1050,7863,1072],{"class":1071},[1050,7865,1257],{"class":1186},[1050,7867,1190],{"class":1071},[1050,7869,4125],{"class":1186},[1050,7871,1268],{"class":1071},[1050,7873,7874,7876,7879,7881,7883,7885],{"class":1052,"line":3102},[1050,7875,2386],{"class":1063},[1050,7877,7878],{"class":1067}," cached_count ",[1050,7880,2392],{"class":1390},[1050,7882,2395],{"class":1390},[1050,7884,2398],{"class":2146},[1050,7886,1396],{"class":1071},[1050,7888,7889,7891],{"class":1052,"line":3108},[1050,7890,2080],{"class":1063},[1050,7892,7893],{"class":1067}," cached_count\n",[1050,7895,7896],{"class":1052,"line":3129},[1050,7897,2412],{"class":1067},[1050,7899,7900],{"class":1052,"line":3153},[1050,7901,7902],{"class":1056},"        # Execute count and cache result\n",[1050,7904,7905,7908,7910,7912,7914,7916],{"class":1052,"line":3158},[1050,7906,7907],{"class":1067},"        count ",[1050,7909,1220],{"class":1071},[1050,7911,7222],{"class":1067},[1050,7913,1072],{"class":1071},[1050,7915,4571],{"class":1186},[1050,7917,2558],{"class":1071},[1050,7919,7920,7922,7924,7926,7928,7930,7932,7935,7937,7939],{"class":1052,"line":3164},[1050,7921,2740],{"class":1067},[1050,7923,1072],{"class":1071},[1050,7925,1187],{"class":1186},[1050,7927,1190],{"class":1071},[1050,7929,4125],{"class":1186},[1050,7931,1203],{"class":1071},[1050,7933,7934],{"class":1186}," count",[1050,7936,1203],{"class":1071},[1050,7938,1217],{"class":1186},[1050,7940,1268],{"class":1071},[1050,7942,7943],{"class":1052,"line":3178},[1050,7944,2412],{"class":1067},[1050,7946,7947,7949],{"class":1052,"line":3200},[1050,7948,4291],{"class":1063},[1050,7950,7951],{"class":1067}," count\n",[1050,7953,7954],{"class":1052,"line":3225},[1050,7955,1129],{"emptyLinePlaceholder":1128},[1050,7957,7958],{"class":1052,"line":3241},[1050,7959,3470],{"class":1056},[1050,7961,7962,7965,7967,7969,7971,7973,7975,7978,7980],{"class":1052,"line":3265},[1050,7963,7964],{"class":1067},"query_cache ",[1050,7966,1220],{"class":1071},[1050,7968,6744],{"class":1186},[1050,7970,1190],{"class":1071},[1050,7972,4894],{"class":1216},[1050,7974,1220],{"class":1071},[1050,7976,7977],{"class":1223},"900",[1050,7979,1227],{"class":1071},[1050,7981,7982],{"class":1056},"  # 15 minutes\n",[1050,7984,7985],{"class":1052,"line":3270},[1050,7986,1129],{"emptyLinePlaceholder":1128},[1050,7988,7989],{"class":1052,"line":3289},[1050,7990,7991],{"class":1056},"# Cache complex query\n",[1050,7993,7994,7996,7999],{"class":1052,"line":3299},[1050,7995,1142],{"class":1141},[1050,7997,7998],{"class":1145}," get_popular_posts",[1050,8000,1149],{"class":1071},[1050,8002,8003,8005,8008],{"class":1052,"line":3320},[1050,8004,1156],{"class":1155},[1050,8006,8007],{"class":1159},"Get popular posts with caching.",[1050,8009,1163],{"class":1155},[1050,8011,8012,8015,8017,8019,8021,8023,8025,8027],{"class":1052,"line":3344},[1050,8013,8014],{"class":1067},"    queryset ",[1050,8016,1220],{"class":1071},[1050,8018,4515],{"class":1067},[1050,8020,1072],{"class":1071},[1050,8022,4552],{"class":4233},[1050,8024,1072],{"class":1071},[1050,8026,4557],{"class":1186},[1050,8028,3619],{"class":1071},[1050,8030,8031,8034,8036],{"class":1052,"line":3349},[1050,8032,8033],{"class":1216},"        published",[1050,8035,1220],{"class":1071},[1050,8037,8038],{"class":2146},"True\n",[1050,8040,8041,8044,8047],{"class":1052,"line":3358},[1050,8042,8043],{"class":1071},"    ).",[1050,8045,8046],{"class":1186},"annotate",[1050,8048,3619],{"class":1071},[1050,8050,8051,8054,8056,8059,8061,8063,8066,8068],{"class":1052,"line":3364},[1050,8052,8053],{"class":1216},"        comment_count",[1050,8055,1220],{"class":1071},[1050,8057,8058],{"class":1186},"Count",[1050,8060,1190],{"class":1071},[1050,8062,1194],{"class":1193},[1050,8064,8065],{"class":1197},"comments",[1050,8067,1194],{"class":1193},[1050,8069,1268],{"class":1071},[1050,8071,8072,8074,8076],{"class":1052,"line":3382},[1050,8073,8043],{"class":1071},[1050,8075,4557],{"class":1186},[1050,8077,3619],{"class":1071},[1050,8079,8080,8083,8085],{"class":1052,"line":3420},[1050,8081,8082],{"class":1216},"        comment_count__gte",[1050,8084,1220],{"class":1071},[1050,8086,8087],{"class":1223},"5\n",[1050,8089,8090,8092,8095,8097,8099,8102,8104,8106,8108,8111,8113,8116,8118],{"class":1052,"line":3436},[1050,8091,8043],{"class":1071},[1050,8093,8094],{"class":1186},"order_by",[1050,8096,1190],{"class":1071},[1050,8098,1194],{"class":1193},[1050,8100,8101],{"class":1197},"-views",[1050,8103,1194],{"class":1193},[1050,8105,1203],{"class":1071},[1050,8107,1206],{"class":1193},[1050,8109,8110],{"class":1197},"-created_at",[1050,8112,1194],{"class":1193},[1050,8114,8115],{"class":1071},")[:",[1050,8117,2346],{"class":1223},[1050,8119,1776],{"class":1071},[1050,8121,8122],{"class":1052,"line":3441},[1050,8123,1169],{"class":1067},[1050,8125,8126,8129,8131,8133,8136],{"class":1052,"line":3447},[1050,8127,8128],{"class":1067},"    cache_key ",[1050,8130,1220],{"class":1071},[1050,8132,1206],{"class":1193},[1050,8134,8135],{"class":1197},"popular_posts_with_comments",[1050,8137,1533],{"class":1193},[1050,8139,8140,8142,8145,8147,8150,8152,8154,8156,8158,8160,8162,8164,8166],{"class":1052,"line":3462},[1050,8141,3590],{"class":1063},[1050,8143,8144],{"class":1067}," query_cache",[1050,8146,1072],{"class":1071},[1050,8148,8149],{"class":1186},"cached_query",[1050,8151,1190],{"class":1071},[1050,8153,7293],{"class":1186},[1050,8155,1203],{"class":1071},[1050,8157,4279],{"class":1186},[1050,8159,1203],{"class":1071},[1050,8161,1217],{"class":1216},[1050,8163,1220],{"class":1071},[1050,8165,4422],{"class":1223},[1050,8167,1268],{"class":1071},[1050,8169,8170],{"class":1052,"line":3467},[1050,8171,1129],{"emptyLinePlaceholder":1128},[1050,8173,8174],{"class":1052,"line":3473},[1050,8175,8176],{"class":1056},"# Cache aggregate results\n",[1050,8178,8179,8181,8184],{"class":1052,"line":3485},[1050,8180,1142],{"class":1141},[1050,8182,8183],{"class":1145}," get_blog_statistics",[1050,8185,1149],{"class":1071},[1050,8187,8188,8190,8193],{"class":1052,"line":3490},[1050,8189,1156],{"class":1155},[1050,8191,8192],{"class":1159},"Get blog statistics with caching.",[1050,8194,1163],{"class":1155},[1050,8196,8197,8199,8201,8203,8205,8207,8209,8211,8213,8216,8218,8220],{"class":1052,"line":3496},[1050,8198,8014],{"class":1067},[1050,8200,1220],{"class":1071},[1050,8202,4515],{"class":1067},[1050,8204,1072],{"class":1071},[1050,8206,4552],{"class":4233},[1050,8208,1072],{"class":1071},[1050,8210,4557],{"class":1186},[1050,8212,1190],{"class":1071},[1050,8214,8215],{"class":1216},"published",[1050,8217,1220],{"class":1071},[1050,8219,6934],{"class":2146},[1050,8221,1268],{"class":1071},[1050,8223,8224],{"class":1052,"line":3523},[1050,8225,1169],{"class":1067},[1050,8227,8228,8231,8233],{"class":1052,"line":3546},[1050,8229,8230],{"class":1067},"    aggregations ",[1050,8232,1220],{"class":1071},[1050,8234,4534],{"class":1071},[1050,8236,8237,8239,8242,8244,8246,8248,8250,8252,8254,8256],{"class":1052,"line":3551},[1050,8238,1474],{"class":1193},[1050,8240,8241],{"class":1197},"total_posts",[1050,8243,1194],{"class":1193},[1050,8245,1482],{"class":1071},[1050,8247,4496],{"class":1186},[1050,8249,1190],{"class":1071},[1050,8251,1194],{"class":1193},[1050,8253,1837],{"class":1197},[1050,8255,1194],{"class":1193},[1050,8257,8258],{"class":1071},"),\n",[1050,8260,8261,8263,8266,8268,8270,8273,8275,8277,8280,8282],{"class":1052,"line":3557},[1050,8262,1474],{"class":1193},[1050,8264,8265],{"class":1197},"avg_views",[1050,8267,1194],{"class":1193},[1050,8269,1482],{"class":1071},[1050,8271,8272],{"class":1186}," Avg",[1050,8274,1190],{"class":1071},[1050,8276,1194],{"class":1193},[1050,8278,8279],{"class":1197},"views",[1050,8281,1194],{"class":1193},[1050,8283,8258],{"class":1071},[1050,8285,8286,8288,8291,8293,8295,8298,8300,8303,8305,8307,8309,8311],{"class":1052,"line":3567},[1050,8287,1474],{"class":1193},[1050,8289,8290],{"class":1197},"total_views",[1050,8292,1194],{"class":1193},[1050,8294,1482],{"class":1071},[1050,8296,8297],{"class":1067}," models",[1050,8299,1072],{"class":1071},[1050,8301,8302],{"class":1186},"Sum",[1050,8304,1190],{"class":1071},[1050,8306,1194],{"class":1193},[1050,8308,8279],{"class":1197},[1050,8310,1194],{"class":1193},[1050,8312,8258],{"class":1071},[1050,8314,8315],{"class":1052,"line":3587},[1050,8316,4695],{"class":1071},[1050,8318,8319],{"class":1052,"line":3600},[1050,8320,1169],{"class":1067},[1050,8322,8323,8325,8327,8329,8332],{"class":1052,"line":3605},[1050,8324,8128],{"class":1067},[1050,8326,1220],{"class":1071},[1050,8328,1206],{"class":1193},[1050,8330,8331],{"class":1197},"blog_statistics",[1050,8333,1533],{"class":1193},[1050,8335,8336,8338,8340,8342,8345,8347,8349,8351,8353,8355,8357],{"class":1052,"line":3622},[1050,8337,3590],{"class":1063},[1050,8339,8144],{"class":1067},[1050,8341,1072],{"class":1071},[1050,8343,8344],{"class":1186},"cached_aggregate",[1050,8346,1190],{"class":1071},[1050,8348,7293],{"class":1186},[1050,8350,1203],{"class":1071},[1050,8352,7463],{"class":1186},[1050,8354,1203],{"class":1071},[1050,8356,4279],{"class":1186},[1050,8358,1268],{"class":1071},[1050,8360,8361],{"class":1052,"line":3635},[1050,8362,1129],{"emptyLinePlaceholder":1128},[1050,8364,8365],{"class":1052,"line":3643},[1050,8366,8367],{"class":1056},"# Cache count queries\n",[1050,8369,8370,8372,8375],{"class":1052,"line":3654},[1050,8371,1142],{"class":1141},[1050,8373,8374],{"class":1145}," get_published_post_count",[1050,8376,1149],{"class":1071},[1050,8378,8379,8381,8384],{"class":1052,"line":3659},[1050,8380,1156],{"class":1155},[1050,8382,8383],{"class":1159},"Get published post count with caching.",[1050,8385,1163],{"class":1155},[1050,8387,8388,8390,8392,8394,8396,8398,8400,8402,8404,8406,8408,8410],{"class":1052,"line":3664},[1050,8389,8014],{"class":1067},[1050,8391,1220],{"class":1071},[1050,8393,4515],{"class":1067},[1050,8395,1072],{"class":1071},[1050,8397,4552],{"class":4233},[1050,8399,1072],{"class":1071},[1050,8401,4557],{"class":1186},[1050,8403,1190],{"class":1071},[1050,8405,8215],{"class":1216},[1050,8407,1220],{"class":1071},[1050,8409,6934],{"class":2146},[1050,8411,1268],{"class":1071},[1050,8413,8414,8416,8418,8420,8423],{"class":1052,"line":3670},[1050,8415,8128],{"class":1067},[1050,8417,1220],{"class":1071},[1050,8419,1206],{"class":1193},[1050,8421,8422],{"class":1197},"published_post_count",[1050,8424,1533],{"class":1193},[1050,8426,8427,8429,8431,8433,8436,8438,8440,8442,8444,8446,8448,8450,8452],{"class":1052,"line":3683},[1050,8428,3590],{"class":1063},[1050,8430,8144],{"class":1067},[1050,8432,1072],{"class":1071},[1050,8434,8435],{"class":1186},"cached_count",[1050,8437,1190],{"class":1071},[1050,8439,7293],{"class":1186},[1050,8441,1203],{"class":1071},[1050,8443,4279],{"class":1186},[1050,8445,1203],{"class":1071},[1050,8447,1217],{"class":1216},[1050,8449,1220],{"class":1071},[1050,8451,4868],{"class":1223},[1050,8453,1268],{"class":1071},[1035,8455,8457],{"id":8456},"caching-external-api-calls","Caching External API Calls",[1040,8459,8461],{"className":1042,"code":8460,"language":1044,"meta":1045,"style":1045},"# Cache external API responses\nimport requests\nfrom django.core.cache import cache\nimport json\nimport hashlib\nfrom datetime import datetime, timedelta\n\nclass APICache:\n    \"\"\"Cache external API responses.\"\"\"\n    \n    def __init__(self, default_timeout=1800):\n        self.default_timeout = default_timeout\n    \n    def generate_api_key(self, url, params=None, headers=None):\n        \"\"\"Generate cache key for API call.\"\"\"\n        key_parts = [url]\n        \n        if params:\n            param_str = json.dumps(params, sort_keys=True)\n            key_parts.append(hashlib.md5(param_str.encode()).hexdigest())\n        \n        if headers:\n            # Only include specific headers that affect response\n            cache_headers = {k: v for k, v in headers.items() \n                           if k.lower() in ['authorization', 'accept', 'content-type']}\n            if cache_headers:\n                header_str = json.dumps(cache_headers, sort_keys=True)\n                key_parts.append(hashlib.md5(header_str.encode()).hexdigest())\n        \n        return f\"api:{'_'.join(key_parts)}\"\n    \n    def cached_get(self, url, params=None, headers=None, timeout=None, **kwargs):\n        \"\"\"Make cached GET request.\"\"\"\n        cache_key = self.generate_api_key(url, params, headers)\n        \n        # Try cache first\n        cached_response = cache.get(cache_key)\n        if cached_response is not None:\n            return cached_response\n        \n        # Make API call\n        try:\n            response = requests.get(url, params=params, headers=headers, **kwargs)\n            response.raise_for_status()\n            \n            # Cache successful response\n            cache_data = {\n                'status_code': response.status_code,\n                'headers': dict(response.headers),\n                'content': response.text,\n                'json': response.json() if response.headers.get('content-type', '').startswith('application/json') else None,\n                'cached_at': datetime.now().isoformat(),\n            }\n            \n            cache_timeout = timeout or self.default_timeout\n            cache.set(cache_key, cache_data, cache_timeout)\n            \n            return cache_data\n        \n        except requests.RequestException as e:\n            # Don't cache errors, but log them\n            import logging\n            logger = logging.getLogger(__name__)\n            logger.error(f\"API request failed: {url} - {e}\")\n            raise\n    \n    def cached_post(self, url, data=None, json_data=None, headers=None, timeout=None, **kwargs):\n        \"\"\"Make cached POST request (use carefully - only for idempotent operations).\"\"\"\n        # Generate key including request body\n        key_data = {\n            'url': url,\n            'data': data,\n            'json': json_data,\n            'headers': headers\n        }\n        \n        key_str = json.dumps(key_data, sort_keys=True)\n        cache_key = f\"api_post:{hashlib.md5(key_str.encode()).hexdigest()}\"\n        \n        # Try cache first\n        cached_response = cache.get(cache_key)\n        if cached_response is not None:\n            return cached_response\n        \n        # Make API call\n        try:\n            response = requests.post(\n                url, \n                data=data, \n                json=json_data, \n                headers=headers, \n                **kwargs\n            )\n            response.raise_for_status()\n            \n            # Cache response\n            cache_data = {\n                'status_code': response.status_code,\n                'headers': dict(response.headers),\n                'content': response.text,\n                'json': response.json() if response.headers.get('content-type', '').startswith('application/json') else None,\n                'cached_at': datetime.now().isoformat(),\n            }\n            \n            cache_timeout = timeout or self.default_timeout\n            cache.set(cache_key, cache_data, cache_timeout)\n            \n            return cache_data\n        \n        except requests.RequestException as e:\n            import logging\n            logger = logging.getLogger(__name__)\n            logger.error(f\"API POST request failed: {url} - {e}\")\n            raise\n    \n    def invalidate_url_pattern(self, url_pattern):\n        \"\"\"Invalidate all cached responses matching URL pattern.\"\"\"\n        # This is a simplified implementation\n        # In production, you might want to use Redis SCAN or similar\n        pass\n\n# Usage examples\napi_cache = APICache(default_timeout=3600)\n\ndef get_weather_data(city):\n    \"\"\"Get weather data with caching.\"\"\"\n    url = \"https://api.weather.com/v1/current\"\n    params = {\n        'city': city,\n        'units': 'metric'\n    }\n    headers = {\n        'Authorization': 'Bearer YOUR_API_KEY'\n    }\n    \n    try:\n        response = api_cache.cached_get(\n            url, \n            params=params, \n            headers=headers, \n            timeout=1800  # Cache for 30 minutes\n        )\n        \n        return response['json'] if response['json'] else json.loads(response['content'])\n    \n    except requests.RequestException:\n        # Return cached data if available, even if expired\n        cache_key = api_cache.generate_api_key(url, params, headers)\n        stale_data = cache.get(f\"{cache_key}:stale\")\n        if stale_data:\n            return stale_data\n        \n        # No cached data available\n        return None\n\ndef get_exchange_rates():\n    \"\"\"Get exchange rates with caching and fallback.\"\"\"\n    url = \"https://api.exchangerate.com/v4/latest/USD\"\n    \n    try:\n        response = api_cache.cached_get(url, timeout=3600)  # Cache for 1 hour\n        return response['json']\n    \n    except requests.RequestException:\n        # Use fallback rates if API is unavailable\n        return {\n            'base': 'USD',\n            'rates': {\n                'EUR': 0.85,\n                'GBP': 0.73,\n                'JPY': 110.0\n            }\n        }\n",[1047,8462,8463,8468,8475,8493,8499,8505,8522,8526,8535,8544,8548,8569,8583,8587,8623,8632,8646,8650,8658,8686,8717,8721,8729,8734,8774,8820,8829,8857,8889,8893,8925,8929,8976,8985,9012,9016,9020,9039,9054,9061,9065,9070,9076,9119,9131,9135,9140,9149,9170,9194,9214,9280,9306,9311,9315,9334,9357,9361,9368,9372,9391,9396,9404,9425,9462,9466,9470,9527,9536,9541,9550,9564,9579,9593,9606,9611,9615,9642,9680,9684,9688,9706,9720,9726,9730,9734,9740,9755,9764,9777,9791,9804,9812,9817,9827,9831,9836,9844,9862,9884,9902,9964,9986,9990,9994,10010,10032,10036,10042,10046,10062,10068,10086,10119,10123,10127,10145,10154,10159,10164,10169,10173,10177,10196,10200,10214,10223,10237,10246,10261,10279,10283,10292,10310,10314,10318,10325,10342,10351,10364,10377,10390,10396,10401,10455,10460,10474,10480,10507,10538,10548,10556,10561,10567,10574,10579,10589,10599,10613,10618,10625,10655,10672,10677,10690,10696,10703,10724,10738,10755,10772,10787,10792],{"__ignoreMap":1045},[1050,8464,8465],{"class":1052,"line":1053},[1050,8466,8467],{"class":1056},"# Cache external API responses\n",[1050,8469,8470,8472],{"class":1052,"line":1060},[1050,8471,1083],{"class":1063},[1050,8473,8474],{"class":1067}," requests\n",[1050,8476,8477,8479,8481,8483,8485,8487,8489,8491],{"class":1052,"line":1089},[1050,8478,1064],{"class":1063},[1050,8480,1068],{"class":1067},[1050,8482,1072],{"class":1071},[1050,8484,1075],{"class":1067},[1050,8486,1072],{"class":1071},[1050,8488,1080],{"class":1067},[1050,8490,1083],{"class":1063},[1050,8492,1086],{"class":1067},[1050,8494,8495,8497],{"class":1052,"line":1109},[1050,8496,1083],{"class":1063},[1050,8498,1114],{"class":1067},[1050,8500,8501,8503],{"class":1052,"line":1117},[1050,8502,1083],{"class":1063},[1050,8504,3862],{"class":1067},[1050,8506,8507,8509,8512,8514,8517,8519],{"class":1052,"line":1125},[1050,8508,1064],{"class":1063},[1050,8510,8511],{"class":1067}," datetime ",[1050,8513,1083],{"class":1063},[1050,8515,8516],{"class":1067}," datetime",[1050,8518,1203],{"class":1071},[1050,8520,8521],{"class":1067}," timedelta\n",[1050,8523,8524],{"class":1052,"line":1132},[1050,8525,1129],{"emptyLinePlaceholder":1128},[1050,8527,8528,8530,8533],{"class":1052,"line":1138},[1050,8529,1991],{"class":1141},[1050,8531,8532],{"class":1994}," APICache",[1050,8534,1396],{"class":1071},[1050,8536,8537,8539,8542],{"class":1052,"line":1152},[1050,8538,1156],{"class":1155},[1050,8540,8541],{"class":1159},"Cache external API responses.",[1050,8543,1163],{"class":1155},[1050,8545,8546],{"class":1052,"line":1166},[1050,8547,1169],{"class":1067},[1050,8549,8550,8552,8554,8556,8558,8560,8563,8565,8567],{"class":1052,"line":1172},[1050,8551,2015],{"class":1141},[1050,8553,4849],{"class":1274},[1050,8555,1190],{"class":1071},[1050,8557,2024],{"class":2023},[1050,8559,1203],{"class":1071},[1050,8561,8562],{"class":2029}," default_timeout",[1050,8564,1220],{"class":1390},[1050,8566,4422],{"class":1223},[1050,8568,2053],{"class":1071},[1050,8570,8571,8573,8575,8578,8580],{"class":1052,"line":1178},[1050,8572,4875],{"class":2656},[1050,8574,1072],{"class":1071},[1050,8576,8577],{"class":4233},"default_timeout",[1050,8579,4237],{"class":1071},[1050,8581,8582],{"class":1067}," default_timeout\n",[1050,8584,8585],{"class":1052,"line":1233},[1050,8586,1169],{"class":1067},[1050,8588,8589,8591,8594,8596,8598,8600,8603,8605,8608,8610,8612,8614,8617,8619,8621],{"class":1052,"line":1238},[1050,8590,2015],{"class":1141},[1050,8592,8593],{"class":1145}," generate_api_key",[1050,8595,1190],{"class":1071},[1050,8597,2024],{"class":2023},[1050,8599,1203],{"class":1071},[1050,8601,8602],{"class":2029}," url",[1050,8604,1203],{"class":1071},[1050,8606,8607],{"class":2029}," params",[1050,8609,1220],{"class":1390},[1050,8611,2147],{"class":2146},[1050,8613,1203],{"class":1071},[1050,8615,8616],{"class":2029}," headers",[1050,8618,1220],{"class":1390},[1050,8620,2147],{"class":2146},[1050,8622,2053],{"class":1071},[1050,8624,8625,8627,8630],{"class":1052,"line":1244},[1050,8626,2058],{"class":1155},[1050,8628,8629],{"class":1159},"Generate cache key for API call.",[1050,8631,1163],{"class":1155},[1050,8633,8634,8636,8638,8641,8644],{"class":1052,"line":1271},[1050,8635,6853],{"class":1067},[1050,8637,1220],{"class":1071},[1050,8639,8640],{"class":1071}," [",[1050,8642,8643],{"class":1067},"url",[1050,8645,1776],{"class":1071},[1050,8647,8648],{"class":1052,"line":1301},[1050,8649,2412],{"class":1067},[1050,8651,8652,8654,8656],{"class":1052,"line":1306},[1050,8653,2386],{"class":1063},[1050,8655,8607],{"class":1067},[1050,8657,1396],{"class":1071},[1050,8659,8660,8663,8665,8667,8669,8671,8673,8676,8678,8680,8682,8684],{"class":1052,"line":1312},[1050,8661,8662],{"class":1067},"            param_str ",[1050,8664,1220],{"class":1071},[1050,8666,6915],{"class":1067},[1050,8668,1072],{"class":1071},[1050,8670,4026],{"class":1186},[1050,8672,1190],{"class":1071},[1050,8674,8675],{"class":1186},"params",[1050,8677,1203],{"class":1071},[1050,8679,6929],{"class":1216},[1050,8681,1220],{"class":1071},[1050,8683,6934],{"class":2146},[1050,8685,1268],{"class":1071},[1050,8687,8688,8690,8692,8694,8696,8698,8700,8702,8704,8707,8709,8711,8713,8715],{"class":1052,"line":1345},[1050,8689,6941],{"class":1067},[1050,8691,1072],{"class":1071},[1050,8693,6946],{"class":1186},[1050,8695,1190],{"class":1071},[1050,8697,4075],{"class":1186},[1050,8699,1072],{"class":1071},[1050,8701,4080],{"class":1186},[1050,8703,1190],{"class":1071},[1050,8705,8706],{"class":1186},"param_str",[1050,8708,1072],{"class":1071},[1050,8710,6964],{"class":1186},[1050,8712,6967],{"class":1071},[1050,8714,4091],{"class":1186},[1050,8716,2835],{"class":1071},[1050,8718,8719],{"class":1052,"line":1367},[1050,8720,2412],{"class":1067},[1050,8722,8723,8725,8727],{"class":1052,"line":1372},[1050,8724,2386],{"class":1063},[1050,8726,8616],{"class":1067},[1050,8728,1396],{"class":1071},[1050,8730,8731],{"class":1052,"line":1378},[1050,8732,8733],{"class":1056},"            # Only include specific headers that affect response\n",[1050,8735,8736,8739,8741,8743,8746,8748,8751,8754,8757,8759,8761,8763,8765,8767,8769,8771],{"class":1052,"line":1399},[1050,8737,8738],{"class":1067},"            cache_headers ",[1050,8740,1220],{"class":1071},[1050,8742,1832],{"class":1071},[1050,8744,8745],{"class":1067},"k",[1050,8747,1482],{"class":1071},[1050,8749,8750],{"class":1067}," v ",[1050,8752,8753],{"class":1063},"for",[1050,8755,8756],{"class":1067}," k",[1050,8758,1203],{"class":1071},[1050,8760,8750],{"class":1067},[1050,8762,2781],{"class":1063},[1050,8764,8616],{"class":1067},[1050,8766,1072],{"class":1071},[1050,8768,4056],{"class":1186},[1050,8770,4094],{"class":1071},[1050,8772,8773],{"class":1067}," \n",[1050,8775,8776,8779,8781,8783,8786,8788,8790,8792,8794,8797,8799,8801,8803,8806,8808,8810,8812,8815,8817],{"class":1052,"line":1416},[1050,8777,8778],{"class":1063},"                           if",[1050,8780,8756],{"class":1067},[1050,8782,1072],{"class":1071},[1050,8784,8785],{"class":1186},"lower",[1050,8787,4094],{"class":1071},[1050,8789,1391],{"class":1390},[1050,8791,8640],{"class":1071},[1050,8793,1194],{"class":1193},[1050,8795,8796],{"class":1197},"authorization",[1050,8798,1194],{"class":1193},[1050,8800,1203],{"class":1071},[1050,8802,1206],{"class":1193},[1050,8804,8805],{"class":1197},"accept",[1050,8807,1194],{"class":1193},[1050,8809,1203],{"class":1071},[1050,8811,1206],{"class":1193},[1050,8813,8814],{"class":1197},"content-type",[1050,8816,1194],{"class":1193},[1050,8818,8819],{"class":1071},"]}\n",[1050,8821,8822,8824,8827],{"class":1052,"line":1421},[1050,8823,3972],{"class":1063},[1050,8825,8826],{"class":1067}," cache_headers",[1050,8828,1396],{"class":1071},[1050,8830,8831,8834,8836,8838,8840,8842,8844,8847,8849,8851,8853,8855],{"class":1052,"line":1427},[1050,8832,8833],{"class":1067},"                header_str ",[1050,8835,1220],{"class":1071},[1050,8837,6915],{"class":1067},[1050,8839,1072],{"class":1071},[1050,8841,4026],{"class":1186},[1050,8843,1190],{"class":1071},[1050,8845,8846],{"class":1186},"cache_headers",[1050,8848,1203],{"class":1071},[1050,8850,6929],{"class":1216},[1050,8852,1220],{"class":1071},[1050,8854,6934],{"class":2146},[1050,8856,1268],{"class":1071},[1050,8858,8859,8862,8864,8866,8868,8870,8872,8874,8876,8879,8881,8883,8885,8887],{"class":1052,"line":1447},[1050,8860,8861],{"class":1067},"                key_parts",[1050,8863,1072],{"class":1071},[1050,8865,6946],{"class":1186},[1050,8867,1190],{"class":1071},[1050,8869,4075],{"class":1186},[1050,8871,1072],{"class":1071},[1050,8873,4080],{"class":1186},[1050,8875,1190],{"class":1071},[1050,8877,8878],{"class":1186},"header_str",[1050,8880,1072],{"class":1071},[1050,8882,6964],{"class":1186},[1050,8884,6967],{"class":1071},[1050,8886,4091],{"class":1186},[1050,8888,2835],{"class":1071},[1050,8890,8891],{"class":1052,"line":1452},[1050,8892,2412],{"class":1067},[1050,8894,8895,8897,8899,8902,8904,8906,8909,8911,8913,8915,8917,8919,8921,8923],{"class":1052,"line":1458},[1050,8896,4291],{"class":1063},[1050,8898,2427],{"class":1141},[1050,8900,8901],{"class":1197},"\"api:",[1050,8903,1287],{"class":1286},[1050,8905,1194],{"class":1193},[1050,8907,8908],{"class":1197},"_",[1050,8910,1194],{"class":1193},[1050,8912,1072],{"class":1071},[1050,8914,7006],{"class":1186},[1050,8916,1190],{"class":1071},[1050,8918,7200],{"class":1186},[1050,8920,1227],{"class":1071},[1050,8922,1293],{"class":1286},[1050,8924,2808],{"class":1197},[1050,8926,8927],{"class":1052,"line":1471},[1050,8928,1169],{"class":1067},[1050,8930,8931,8933,8936,8938,8940,8942,8944,8946,8948,8950,8952,8954,8956,8958,8960,8962,8964,8966,8968,8970,8972,8974],{"class":1052,"line":1495},[1050,8932,2015],{"class":1141},[1050,8934,8935],{"class":1145}," cached_get",[1050,8937,1190],{"class":1071},[1050,8939,2024],{"class":2023},[1050,8941,1203],{"class":1071},[1050,8943,8602],{"class":2029},[1050,8945,1203],{"class":1071},[1050,8947,8607],{"class":2029},[1050,8949,1220],{"class":1390},[1050,8951,2147],{"class":2146},[1050,8953,1203],{"class":1071},[1050,8955,8616],{"class":2029},[1050,8957,1220],{"class":1390},[1050,8959,2147],{"class":2146},[1050,8961,1203],{"class":1071},[1050,8963,1217],{"class":2029},[1050,8965,1220],{"class":1390},[1050,8967,2147],{"class":2146},[1050,8969,1203],{"class":1071},[1050,8971,3957],{"class":1390},[1050,8973,3960],{"class":2029},[1050,8975,2053],{"class":1071},[1050,8977,8978,8980,8983],{"class":1052,"line":1516},[1050,8979,2058],{"class":1155},[1050,8981,8982],{"class":1159},"Make cached GET request.",[1050,8984,1163],{"class":1155},[1050,8986,8987,8989,8991,8993,8995,8998,9000,9002,9004,9006,9008,9010],{"class":1052,"line":1536},[1050,8988,5004],{"class":1067},[1050,8990,1220],{"class":1071},[1050,8992,2657],{"class":2656},[1050,8994,1072],{"class":1071},[1050,8996,8997],{"class":1186},"generate_api_key",[1050,8999,1190],{"class":1071},[1050,9001,8643],{"class":1186},[1050,9003,1203],{"class":1071},[1050,9005,8607],{"class":1186},[1050,9007,1203],{"class":1071},[1050,9009,8616],{"class":1186},[1050,9011,1268],{"class":1071},[1050,9013,9014],{"class":1052,"line":1551},[1050,9015,2412],{"class":1067},[1050,9017,9018],{"class":1052,"line":1556},[1050,9019,5028],{"class":1056},[1050,9021,9022,9025,9027,9029,9031,9033,9035,9037],{"class":1052,"line":1562},[1050,9023,9024],{"class":1067},"        cached_response ",[1050,9026,1220],{"class":1071},[1050,9028,1252],{"class":1067},[1050,9030,1072],{"class":1071},[1050,9032,1257],{"class":1186},[1050,9034,1190],{"class":1071},[1050,9036,4125],{"class":1186},[1050,9038,1268],{"class":1071},[1050,9040,9041,9043,9046,9048,9050,9052],{"class":1052,"line":1605},[1050,9042,2386],{"class":1063},[1050,9044,9045],{"class":1067}," cached_response ",[1050,9047,2392],{"class":1390},[1050,9049,2395],{"class":1390},[1050,9051,2398],{"class":2146},[1050,9053,1396],{"class":1071},[1050,9055,9056,9058],{"class":1052,"line":1628},[1050,9057,2080],{"class":1063},[1050,9059,9060],{"class":1067}," cached_response\n",[1050,9062,9063],{"class":1052,"line":1633},[1050,9064,2412],{"class":1067},[1050,9066,9067],{"class":1052,"line":1639},[1050,9068,9069],{"class":1056},"        # Make API call\n",[1050,9071,9072,9074],{"class":1052,"line":1675},[1050,9073,2068],{"class":1063},[1050,9075,1396],{"class":1071},[1050,9077,9078,9081,9083,9086,9088,9090,9092,9094,9096,9098,9100,9102,9104,9106,9108,9111,9113,9115,9117],{"class":1052,"line":1680},[1050,9079,9080],{"class":1067},"            response ",[1050,9082,1220],{"class":1071},[1050,9084,9085],{"class":1067}," requests",[1050,9087,1072],{"class":1071},[1050,9089,1257],{"class":1186},[1050,9091,1190],{"class":1071},[1050,9093,8643],{"class":1186},[1050,9095,1203],{"class":1071},[1050,9097,8607],{"class":1216},[1050,9099,1220],{"class":1071},[1050,9101,8675],{"class":1186},[1050,9103,1203],{"class":1071},[1050,9105,8616],{"class":1216},[1050,9107,1220],{"class":1071},[1050,9109,9110],{"class":1186},"headers",[1050,9112,1203],{"class":1071},[1050,9114,3957],{"class":1390},[1050,9116,3960],{"class":1186},[1050,9118,1268],{"class":1071},[1050,9120,9121,9124,9126,9129],{"class":1052,"line":1686},[1050,9122,9123],{"class":1067},"            response",[1050,9125,1072],{"class":1071},[1050,9127,9128],{"class":1186},"raise_for_status",[1050,9130,2558],{"class":1071},[1050,9132,9133],{"class":1052,"line":1692},[1050,9134,2594],{"class":1067},[1050,9136,9137],{"class":1052,"line":1697},[1050,9138,9139],{"class":1056},"            # Cache successful response\n",[1050,9141,9142,9145,9147],{"class":1052,"line":1703},[1050,9143,9144],{"class":1067},"            cache_data ",[1050,9146,1220],{"class":1071},[1050,9148,4534],{"class":1071},[1050,9150,9151,9154,9157,9159,9161,9164,9166,9168],{"class":1052,"line":1713},[1050,9152,9153],{"class":1193},"                '",[1050,9155,9156],{"class":1197},"status_code",[1050,9158,1194],{"class":1193},[1050,9160,1482],{"class":1071},[1050,9162,9163],{"class":1067}," response",[1050,9165,1072],{"class":1071},[1050,9167,9156],{"class":4233},[1050,9169,1492],{"class":1071},[1050,9171,9172,9174,9176,9178,9180,9183,9185,9188,9190,9192],{"class":1052,"line":1723},[1050,9173,9153],{"class":1193},[1050,9175,9110],{"class":1197},[1050,9177,1194],{"class":1193},[1050,9179,1482],{"class":1071},[1050,9181,9182],{"class":2106}," dict",[1050,9184,1190],{"class":1071},[1050,9186,9187],{"class":1186},"response",[1050,9189,1072],{"class":1071},[1050,9191,9110],{"class":4233},[1050,9193,8258],{"class":1071},[1050,9195,9196,9198,9201,9203,9205,9207,9209,9212],{"class":1052,"line":1728},[1050,9197,9153],{"class":1193},[1050,9199,9200],{"class":1197},"content",[1050,9202,1194],{"class":1193},[1050,9204,1482],{"class":1071},[1050,9206,9163],{"class":1067},[1050,9208,1072],{"class":1071},[1050,9210,9211],{"class":4233},"text",[1050,9213,1492],{"class":1071},[1050,9215,9216,9218,9221,9223,9225,9227,9229,9231,9233,9235,9237,9239,9241,9243,9245,9247,9249,9251,9253,9255,9258,9260,9263,9265,9267,9270,9272,9274,9276,9278],{"class":1052,"line":1734},[1050,9217,9153],{"class":1193},[1050,9219,9220],{"class":1197},"json",[1050,9222,1194],{"class":1193},[1050,9224,1482],{"class":1071},[1050,9226,9163],{"class":1067},[1050,9228,1072],{"class":1071},[1050,9230,9220],{"class":1186},[1050,9232,4094],{"class":1071},[1050,9234,7016],{"class":1063},[1050,9236,9163],{"class":1067},[1050,9238,1072],{"class":1071},[1050,9240,9110],{"class":4233},[1050,9242,1072],{"class":1071},[1050,9244,1257],{"class":1186},[1050,9246,1190],{"class":1071},[1050,9248,1194],{"class":1193},[1050,9250,8814],{"class":1197},[1050,9252,1194],{"class":1193},[1050,9254,1203],{"class":1071},[1050,9256,9257],{"class":1193}," ''",[1050,9259,4088],{"class":1071},[1050,9261,9262],{"class":1186},"startswith",[1050,9264,1190],{"class":1071},[1050,9266,1194],{"class":1193},[1050,9268,9269],{"class":1197},"application/json",[1050,9271,1194],{"class":1193},[1050,9273,1227],{"class":1071},[1050,9275,7041],{"class":1063},[1050,9277,2398],{"class":2146},[1050,9279,1492],{"class":1071},[1050,9281,9282,9284,9287,9289,9291,9293,9295,9298,9301,9304],{"class":1052,"line":1744},[1050,9283,9153],{"class":1193},[1050,9285,9286],{"class":1197},"cached_at",[1050,9288,1194],{"class":1193},[1050,9290,1482],{"class":1071},[1050,9292,8516],{"class":1067},[1050,9294,1072],{"class":1071},[1050,9296,9297],{"class":1186},"now",[1050,9299,9300],{"class":1071},"().",[1050,9302,9303],{"class":1186},"isoformat",[1050,9305,4574],{"class":1071},[1050,9307,9308],{"class":1052,"line":1749},[1050,9309,9310],{"class":1071},"            }\n",[1050,9312,9313],{"class":1052,"line":1755},[1050,9314,2594],{"class":1067},[1050,9316,9317,9320,9322,9324,9327,9329,9331],{"class":1052,"line":1779},[1050,9318,9319],{"class":1067},"            cache_timeout ",[1050,9321,1220],{"class":1071},[1050,9323,7314],{"class":1067},[1050,9325,9326],{"class":1390},"or",[1050,9328,2657],{"class":2656},[1050,9330,1072],{"class":1071},[1050,9332,9333],{"class":4233},"default_timeout\n",[1050,9335,9336,9338,9340,9342,9344,9346,9348,9351,9353,9355],{"class":1052,"line":1800},[1050,9337,2119],{"class":1067},[1050,9339,1072],{"class":1071},[1050,9341,1187],{"class":1186},[1050,9343,1190],{"class":1071},[1050,9345,4125],{"class":1186},[1050,9347,1203],{"class":1071},[1050,9349,9350],{"class":1186}," cache_data",[1050,9352,1203],{"class":1071},[1050,9354,4863],{"class":1186},[1050,9356,1268],{"class":1071},[1050,9358,9359],{"class":1052,"line":1805},[1050,9360,2594],{"class":1067},[1050,9362,9363,9365],{"class":1052,"line":1811},[1050,9364,2080],{"class":1063},[1050,9366,9367],{"class":1067}," cache_data\n",[1050,9369,9370],{"class":1052,"line":1868},[1050,9371,2412],{"class":1067},[1050,9373,9374,9376,9378,9380,9383,9386,9389],{"class":1052,"line":1909},[1050,9375,2103],{"class":1063},[1050,9377,9085],{"class":1067},[1050,9379,1072],{"class":1071},[1050,9381,9382],{"class":4233},"RequestException",[1050,9384,9385],{"class":1063}," as",[1050,9387,9388],{"class":1067}," e",[1050,9390,1396],{"class":1071},[1050,9392,9393],{"class":1052,"line":2721},[1050,9394,9395],{"class":1056},"            # Don't cache errors, but log them\n",[1050,9397,9398,9401],{"class":1052,"line":2731},[1050,9399,9400],{"class":1063},"            import",[1050,9402,9403],{"class":1067}," logging\n",[1050,9405,9406,9409,9411,9414,9416,9419,9421,9423],{"class":1052,"line":2737},[1050,9407,9408],{"class":1067},"            logger ",[1050,9410,1220],{"class":1071},[1050,9412,9413],{"class":1067}," logging",[1050,9415,1072],{"class":1071},[1050,9417,9418],{"class":1186},"getLogger",[1050,9420,1190],{"class":1071},[1050,9422,4037],{"class":4036},[1050,9424,1268],{"class":1071},[1050,9426,9427,9430,9432,9435,9437,9439,9442,9444,9446,9448,9451,9453,9456,9458,9460],{"class":1052,"line":2761},[1050,9428,9429],{"class":1067},"            logger",[1050,9431,1072],{"class":1071},[1050,9433,9434],{"class":1186},"error",[1050,9436,1190],{"class":1071},[1050,9438,1280],{"class":1141},[1050,9440,9441],{"class":1197},"\"API request failed: ",[1050,9443,1287],{"class":1286},[1050,9445,8643],{"class":1186},[1050,9447,1293],{"class":1286},[1050,9449,9450],{"class":1197}," - ",[1050,9452,1287],{"class":1286},[1050,9454,9455],{"class":1186},"e",[1050,9457,1293],{"class":1286},[1050,9459,1296],{"class":1197},[1050,9461,1268],{"class":1071},[1050,9463,9464],{"class":1052,"line":2766},[1050,9465,5206],{"class":1063},[1050,9467,9468],{"class":1052,"line":2772},[1050,9469,1169],{"class":1067},[1050,9471,9472,9474,9477,9479,9481,9483,9485,9487,9490,9492,9494,9496,9499,9501,9503,9505,9507,9509,9511,9513,9515,9517,9519,9521,9523,9525],{"class":1052,"line":2788},[1050,9473,2015],{"class":1141},[1050,9475,9476],{"class":1145}," cached_post",[1050,9478,1190],{"class":1071},[1050,9480,2024],{"class":2023},[1050,9482,1203],{"class":1071},[1050,9484,8602],{"class":2029},[1050,9486,1203],{"class":1071},[1050,9488,9489],{"class":2029}," data",[1050,9491,1220],{"class":1390},[1050,9493,2147],{"class":2146},[1050,9495,1203],{"class":1071},[1050,9497,9498],{"class":2029}," json_data",[1050,9500,1220],{"class":1390},[1050,9502,2147],{"class":2146},[1050,9504,1203],{"class":1071},[1050,9506,8616],{"class":2029},[1050,9508,1220],{"class":1390},[1050,9510,2147],{"class":2146},[1050,9512,1203],{"class":1071},[1050,9514,1217],{"class":2029},[1050,9516,1220],{"class":1390},[1050,9518,2147],{"class":2146},[1050,9520,1203],{"class":1071},[1050,9522,3957],{"class":1390},[1050,9524,3960],{"class":2029},[1050,9526,2053],{"class":1071},[1050,9528,9529,9531,9534],{"class":1052,"line":2811},[1050,9530,2058],{"class":1155},[1050,9532,9533],{"class":1159},"Make cached POST request (use carefully - only for idempotent operations).",[1050,9535,1163],{"class":1155},[1050,9537,9538],{"class":1052,"line":2838},[1050,9539,9540],{"class":1056},"        # Generate key including request body\n",[1050,9542,9543,9546,9548],{"class":1052,"line":2854},[1050,9544,9545],{"class":1067},"        key_data ",[1050,9547,1220],{"class":1071},[1050,9549,4534],{"class":1071},[1050,9551,9552,9554,9556,9558,9560,9562],{"class":1052,"line":2878},[1050,9553,6878],{"class":1193},[1050,9555,8643],{"class":1197},[1050,9557,1194],{"class":1193},[1050,9559,1482],{"class":1071},[1050,9561,8602],{"class":1067},[1050,9563,1492],{"class":1071},[1050,9565,9566,9568,9571,9573,9575,9577],{"class":1052,"line":2883},[1050,9567,6878],{"class":1193},[1050,9569,9570],{"class":1197},"data",[1050,9572,1194],{"class":1193},[1050,9574,1482],{"class":1071},[1050,9576,9489],{"class":1067},[1050,9578,1492],{"class":1071},[1050,9580,9581,9583,9585,9587,9589,9591],{"class":1052,"line":2902},[1050,9582,6878],{"class":1193},[1050,9584,9220],{"class":1197},[1050,9586,1194],{"class":1193},[1050,9588,1482],{"class":1071},[1050,9590,9498],{"class":1067},[1050,9592,1492],{"class":1071},[1050,9594,9595,9597,9599,9601,9603],{"class":1052,"line":2912},[1050,9596,6878],{"class":1193},[1050,9598,9110],{"class":1197},[1050,9600,1194],{"class":1193},[1050,9602,1482],{"class":1071},[1050,9604,9605],{"class":1067}," headers\n",[1050,9607,9608],{"class":1052,"line":2932},[1050,9609,9610],{"class":1071},"        }\n",[1050,9612,9613],{"class":1052,"line":2956},[1050,9614,2412],{"class":1067},[1050,9616,9617,9620,9622,9624,9626,9628,9630,9632,9634,9636,9638,9640],{"class":1052,"line":2961},[1050,9618,9619],{"class":1067},"        key_str ",[1050,9621,1220],{"class":1071},[1050,9623,6915],{"class":1067},[1050,9625,1072],{"class":1071},[1050,9627,4026],{"class":1186},[1050,9629,1190],{"class":1071},[1050,9631,4085],{"class":1186},[1050,9633,1203],{"class":1071},[1050,9635,6929],{"class":1216},[1050,9637,1220],{"class":1071},[1050,9639,6934],{"class":2146},[1050,9641,1268],{"class":1071},[1050,9643,9644,9646,9648,9650,9653,9655,9657,9659,9661,9663,9666,9668,9670,9672,9674,9676,9678],{"class":1052,"line":2970},[1050,9645,5004],{"class":1067},[1050,9647,1220],{"class":1071},[1050,9649,2427],{"class":1141},[1050,9651,9652],{"class":1197},"\"api_post:",[1050,9654,1287],{"class":1286},[1050,9656,4075],{"class":1067},[1050,9658,1072],{"class":1071},[1050,9660,4080],{"class":1186},[1050,9662,1190],{"class":1071},[1050,9664,9665],{"class":1186},"key_str",[1050,9667,1072],{"class":1071},[1050,9669,6964],{"class":1186},[1050,9671,6967],{"class":1071},[1050,9673,4091],{"class":1186},[1050,9675,4094],{"class":1071},[1050,9677,1293],{"class":1286},[1050,9679,2808],{"class":1197},[1050,9681,9682],{"class":1052,"line":2976},[1050,9683,2412],{"class":1067},[1050,9685,9686],{"class":1052,"line":2998},[1050,9687,5028],{"class":1056},[1050,9689,9690,9692,9694,9696,9698,9700,9702,9704],{"class":1052,"line":3004},[1050,9691,9024],{"class":1067},[1050,9693,1220],{"class":1071},[1050,9695,1252],{"class":1067},[1050,9697,1072],{"class":1071},[1050,9699,1257],{"class":1186},[1050,9701,1190],{"class":1071},[1050,9703,4125],{"class":1186},[1050,9705,1268],{"class":1071},[1050,9707,9708,9710,9712,9714,9716,9718],{"class":1052,"line":3019},[1050,9709,2386],{"class":1063},[1050,9711,9045],{"class":1067},[1050,9713,2392],{"class":1390},[1050,9715,2395],{"class":1390},[1050,9717,2398],{"class":2146},[1050,9719,1396],{"class":1071},[1050,9721,9722,9724],{"class":1052,"line":3024},[1050,9723,2080],{"class":1063},[1050,9725,9060],{"class":1067},[1050,9727,9728],{"class":1052,"line":3059},[1050,9729,2412],{"class":1067},[1050,9731,9732],{"class":1052,"line":3069},[1050,9733,9069],{"class":1056},[1050,9735,9736,9738],{"class":1052,"line":3074},[1050,9737,2068],{"class":1063},[1050,9739,1396],{"class":1071},[1050,9741,9742,9744,9746,9748,9750,9753],{"class":1052,"line":3097},[1050,9743,9080],{"class":1067},[1050,9745,1220],{"class":1071},[1050,9747,9085],{"class":1067},[1050,9749,1072],{"class":1071},[1050,9751,9752],{"class":1186},"post",[1050,9754,3619],{"class":1071},[1050,9756,9757,9760,9762],{"class":1052,"line":3102},[1050,9758,9759],{"class":1186},"                url",[1050,9761,1203],{"class":1071},[1050,9763,8773],{"class":1186},[1050,9765,9766,9769,9771,9773,9775],{"class":1052,"line":3108},[1050,9767,9768],{"class":1216},"                data",[1050,9770,1220],{"class":1071},[1050,9772,9570],{"class":1186},[1050,9774,1203],{"class":1071},[1050,9776,8773],{"class":1186},[1050,9778,9779,9782,9784,9787,9789],{"class":1052,"line":3129},[1050,9780,9781],{"class":1216},"                json",[1050,9783,1220],{"class":1071},[1050,9785,9786],{"class":1186},"json_data",[1050,9788,1203],{"class":1071},[1050,9790,8773],{"class":1186},[1050,9792,9793,9796,9798,9800,9802],{"class":1052,"line":3153},[1050,9794,9795],{"class":1216},"                headers",[1050,9797,1220],{"class":1071},[1050,9799,9110],{"class":1186},[1050,9801,1203],{"class":1071},[1050,9803,8773],{"class":1186},[1050,9805,9806,9809],{"class":1052,"line":3158},[1050,9807,9808],{"class":1390},"                **",[1050,9810,9811],{"class":1186},"kwargs\n",[1050,9813,9814],{"class":1052,"line":3164},[1050,9815,9816],{"class":1071},"            )\n",[1050,9818,9819,9821,9823,9825],{"class":1052,"line":3178},[1050,9820,9123],{"class":1067},[1050,9822,1072],{"class":1071},[1050,9824,9128],{"class":1186},[1050,9826,2558],{"class":1071},[1050,9828,9829],{"class":1052,"line":3200},[1050,9830,2594],{"class":1067},[1050,9832,9833],{"class":1052,"line":3225},[1050,9834,9835],{"class":1056},"            # Cache response\n",[1050,9837,9838,9840,9842],{"class":1052,"line":3241},[1050,9839,9144],{"class":1067},[1050,9841,1220],{"class":1071},[1050,9843,4534],{"class":1071},[1050,9845,9846,9848,9850,9852,9854,9856,9858,9860],{"class":1052,"line":3265},[1050,9847,9153],{"class":1193},[1050,9849,9156],{"class":1197},[1050,9851,1194],{"class":1193},[1050,9853,1482],{"class":1071},[1050,9855,9163],{"class":1067},[1050,9857,1072],{"class":1071},[1050,9859,9156],{"class":4233},[1050,9861,1492],{"class":1071},[1050,9863,9864,9866,9868,9870,9872,9874,9876,9878,9880,9882],{"class":1052,"line":3270},[1050,9865,9153],{"class":1193},[1050,9867,9110],{"class":1197},[1050,9869,1194],{"class":1193},[1050,9871,1482],{"class":1071},[1050,9873,9182],{"class":2106},[1050,9875,1190],{"class":1071},[1050,9877,9187],{"class":1186},[1050,9879,1072],{"class":1071},[1050,9881,9110],{"class":4233},[1050,9883,8258],{"class":1071},[1050,9885,9886,9888,9890,9892,9894,9896,9898,9900],{"class":1052,"line":3289},[1050,9887,9153],{"class":1193},[1050,9889,9200],{"class":1197},[1050,9891,1194],{"class":1193},[1050,9893,1482],{"class":1071},[1050,9895,9163],{"class":1067},[1050,9897,1072],{"class":1071},[1050,9899,9211],{"class":4233},[1050,9901,1492],{"class":1071},[1050,9903,9904,9906,9908,9910,9912,9914,9916,9918,9920,9922,9924,9926,9928,9930,9932,9934,9936,9938,9940,9942,9944,9946,9948,9950,9952,9954,9956,9958,9960,9962],{"class":1052,"line":3299},[1050,9905,9153],{"class":1193},[1050,9907,9220],{"class":1197},[1050,9909,1194],{"class":1193},[1050,9911,1482],{"class":1071},[1050,9913,9163],{"class":1067},[1050,9915,1072],{"class":1071},[1050,9917,9220],{"class":1186},[1050,9919,4094],{"class":1071},[1050,9921,7016],{"class":1063},[1050,9923,9163],{"class":1067},[1050,9925,1072],{"class":1071},[1050,9927,9110],{"class":4233},[1050,9929,1072],{"class":1071},[1050,9931,1257],{"class":1186},[1050,9933,1190],{"class":1071},[1050,9935,1194],{"class":1193},[1050,9937,8814],{"class":1197},[1050,9939,1194],{"class":1193},[1050,9941,1203],{"class":1071},[1050,9943,9257],{"class":1193},[1050,9945,4088],{"class":1071},[1050,9947,9262],{"class":1186},[1050,9949,1190],{"class":1071},[1050,9951,1194],{"class":1193},[1050,9953,9269],{"class":1197},[1050,9955,1194],{"class":1193},[1050,9957,1227],{"class":1071},[1050,9959,7041],{"class":1063},[1050,9961,2398],{"class":2146},[1050,9963,1492],{"class":1071},[1050,9965,9966,9968,9970,9972,9974,9976,9978,9980,9982,9984],{"class":1052,"line":3320},[1050,9967,9153],{"class":1193},[1050,9969,9286],{"class":1197},[1050,9971,1194],{"class":1193},[1050,9973,1482],{"class":1071},[1050,9975,8516],{"class":1067},[1050,9977,1072],{"class":1071},[1050,9979,9297],{"class":1186},[1050,9981,9300],{"class":1071},[1050,9983,9303],{"class":1186},[1050,9985,4574],{"class":1071},[1050,9987,9988],{"class":1052,"line":3344},[1050,9989,9310],{"class":1071},[1050,9991,9992],{"class":1052,"line":3349},[1050,9993,2594],{"class":1067},[1050,9995,9996,9998,10000,10002,10004,10006,10008],{"class":1052,"line":3358},[1050,9997,9319],{"class":1067},[1050,9999,1220],{"class":1071},[1050,10001,7314],{"class":1067},[1050,10003,9326],{"class":1390},[1050,10005,2657],{"class":2656},[1050,10007,1072],{"class":1071},[1050,10009,9333],{"class":4233},[1050,10011,10012,10014,10016,10018,10020,10022,10024,10026,10028,10030],{"class":1052,"line":3364},[1050,10013,2119],{"class":1067},[1050,10015,1072],{"class":1071},[1050,10017,1187],{"class":1186},[1050,10019,1190],{"class":1071},[1050,10021,4125],{"class":1186},[1050,10023,1203],{"class":1071},[1050,10025,9350],{"class":1186},[1050,10027,1203],{"class":1071},[1050,10029,4863],{"class":1186},[1050,10031,1268],{"class":1071},[1050,10033,10034],{"class":1052,"line":3382},[1050,10035,2594],{"class":1067},[1050,10037,10038,10040],{"class":1052,"line":3420},[1050,10039,2080],{"class":1063},[1050,10041,9367],{"class":1067},[1050,10043,10044],{"class":1052,"line":3436},[1050,10045,2412],{"class":1067},[1050,10047,10048,10050,10052,10054,10056,10058,10060],{"class":1052,"line":3441},[1050,10049,2103],{"class":1063},[1050,10051,9085],{"class":1067},[1050,10053,1072],{"class":1071},[1050,10055,9382],{"class":4233},[1050,10057,9385],{"class":1063},[1050,10059,9388],{"class":1067},[1050,10061,1396],{"class":1071},[1050,10063,10064,10066],{"class":1052,"line":3447},[1050,10065,9400],{"class":1063},[1050,10067,9403],{"class":1067},[1050,10069,10070,10072,10074,10076,10078,10080,10082,10084],{"class":1052,"line":3462},[1050,10071,9408],{"class":1067},[1050,10073,1220],{"class":1071},[1050,10075,9413],{"class":1067},[1050,10077,1072],{"class":1071},[1050,10079,9418],{"class":1186},[1050,10081,1190],{"class":1071},[1050,10083,4037],{"class":4036},[1050,10085,1268],{"class":1071},[1050,10087,10088,10090,10092,10094,10096,10098,10101,10103,10105,10107,10109,10111,10113,10115,10117],{"class":1052,"line":3467},[1050,10089,9429],{"class":1067},[1050,10091,1072],{"class":1071},[1050,10093,9434],{"class":1186},[1050,10095,1190],{"class":1071},[1050,10097,1280],{"class":1141},[1050,10099,10100],{"class":1197},"\"API POST request failed: ",[1050,10102,1287],{"class":1286},[1050,10104,8643],{"class":1186},[1050,10106,1293],{"class":1286},[1050,10108,9450],{"class":1197},[1050,10110,1287],{"class":1286},[1050,10112,9455],{"class":1186},[1050,10114,1293],{"class":1286},[1050,10116,1296],{"class":1197},[1050,10118,1268],{"class":1071},[1050,10120,10121],{"class":1052,"line":3473},[1050,10122,5206],{"class":1063},[1050,10124,10125],{"class":1052,"line":3485},[1050,10126,1169],{"class":1067},[1050,10128,10129,10131,10134,10136,10138,10140,10143],{"class":1052,"line":3490},[1050,10130,2015],{"class":1141},[1050,10132,10133],{"class":1145}," invalidate_url_pattern",[1050,10135,1190],{"class":1071},[1050,10137,2024],{"class":2023},[1050,10139,1203],{"class":1071},[1050,10141,10142],{"class":2029}," url_pattern",[1050,10144,2053],{"class":1071},[1050,10146,10147,10149,10152],{"class":1052,"line":3496},[1050,10148,2058],{"class":1155},[1050,10150,10151],{"class":1159},"Invalidate all cached responses matching URL pattern.",[1050,10153,1163],{"class":1155},[1050,10155,10156],{"class":1052,"line":3523},[1050,10157,10158],{"class":1056},"        # This is a simplified implementation\n",[1050,10160,10161],{"class":1052,"line":3546},[1050,10162,10163],{"class":1056},"        # In production, you might want to use Redis SCAN or similar\n",[1050,10165,10166],{"class":1052,"line":3551},[1050,10167,10168],{"class":1063},"        pass\n",[1050,10170,10171],{"class":1052,"line":3557},[1050,10172,1129],{"emptyLinePlaceholder":1128},[1050,10174,10175],{"class":1052,"line":3567},[1050,10176,3470],{"class":1056},[1050,10178,10179,10182,10184,10186,10188,10190,10192,10194],{"class":1052,"line":3587},[1050,10180,10181],{"class":1067},"api_cache ",[1050,10183,1220],{"class":1071},[1050,10185,8532],{"class":1186},[1050,10187,1190],{"class":1071},[1050,10189,8577],{"class":1216},[1050,10191,1220],{"class":1071},[1050,10193,4868],{"class":1223},[1050,10195,1268],{"class":1071},[1050,10197,10198],{"class":1052,"line":3600},[1050,10199,1129],{"emptyLinePlaceholder":1128},[1050,10201,10202,10204,10207,10209,10212],{"class":1052,"line":3605},[1050,10203,1142],{"class":1141},[1050,10205,10206],{"class":1145}," get_weather_data",[1050,10208,1190],{"class":1071},[1050,10210,10211],{"class":2029},"city",[1050,10213,2053],{"class":1071},[1050,10215,10216,10218,10221],{"class":1052,"line":3622},[1050,10217,1156],{"class":1155},[1050,10219,10220],{"class":1159},"Get weather data with caching.",[1050,10222,1163],{"class":1155},[1050,10224,10225,10228,10230,10232,10235],{"class":1052,"line":3635},[1050,10226,10227],{"class":1067},"    url ",[1050,10229,1220],{"class":1071},[1050,10231,2468],{"class":1193},[1050,10233,10234],{"class":1197},"https://api.weather.com/v1/current",[1050,10236,2808],{"class":1193},[1050,10238,10239,10242,10244],{"class":1052,"line":3643},[1050,10240,10241],{"class":1067},"    params ",[1050,10243,1220],{"class":1071},[1050,10245,4534],{"class":1071},[1050,10247,10248,10250,10252,10254,10256,10259],{"class":1052,"line":3654},[1050,10249,1474],{"class":1193},[1050,10251,10211],{"class":1197},[1050,10253,1194],{"class":1193},[1050,10255,1482],{"class":1071},[1050,10257,10258],{"class":1067}," city",[1050,10260,1492],{"class":1071},[1050,10262,10263,10265,10268,10270,10272,10274,10277],{"class":1052,"line":3659},[1050,10264,1474],{"class":1193},[1050,10266,10267],{"class":1197},"units",[1050,10269,1194],{"class":1193},[1050,10271,1482],{"class":1071},[1050,10273,1206],{"class":1193},[1050,10275,10276],{"class":1197},"metric",[1050,10278,1533],{"class":1193},[1050,10280,10281],{"class":1052,"line":3664},[1050,10282,4695],{"class":1071},[1050,10284,10285,10288,10290],{"class":1052,"line":3670},[1050,10286,10287],{"class":1067},"    headers ",[1050,10289,1220],{"class":1071},[1050,10291,4534],{"class":1071},[1050,10293,10294,10296,10299,10301,10303,10305,10308],{"class":1052,"line":3683},[1050,10295,1474],{"class":1193},[1050,10297,10298],{"class":1197},"Authorization",[1050,10300,1194],{"class":1193},[1050,10302,1482],{"class":1071},[1050,10304,1206],{"class":1193},[1050,10306,10307],{"class":1197},"Bearer YOUR_API_KEY",[1050,10309,1533],{"class":1193},[1050,10311,10312],{"class":1052,"line":3695},[1050,10313,4695],{"class":1071},[1050,10315,10316],{"class":1052,"line":3736},[1050,10317,1169],{"class":1067},[1050,10319,10320,10323],{"class":1052,"line":3764},[1050,10321,10322],{"class":1063},"    try",[1050,10324,1396],{"class":1071},[1050,10326,10327,10330,10332,10335,10337,10340],{"class":1052,"line":3774},[1050,10328,10329],{"class":1067},"        response ",[1050,10331,1220],{"class":1071},[1050,10333,10334],{"class":1067}," api_cache",[1050,10336,1072],{"class":1071},[1050,10338,10339],{"class":1186},"cached_get",[1050,10341,3619],{"class":1071},[1050,10343,10344,10347,10349],{"class":1052,"line":3779},[1050,10345,10346],{"class":1186},"            url",[1050,10348,1203],{"class":1071},[1050,10350,8773],{"class":1186},[1050,10352,10353,10356,10358,10360,10362],{"class":1052,"line":3784},[1050,10354,10355],{"class":1216},"            params",[1050,10357,1220],{"class":1071},[1050,10359,8675],{"class":1186},[1050,10361,1203],{"class":1071},[1050,10363,8773],{"class":1186},[1050,10365,10366,10369,10371,10373,10375],{"class":1052,"line":3790},[1050,10367,10368],{"class":1216},"            headers",[1050,10370,1220],{"class":1071},[1050,10372,9110],{"class":1186},[1050,10374,1203],{"class":1071},[1050,10376,8773],{"class":1186},[1050,10378,10380,10383,10385,10387],{"class":1052,"line":10379},141,[1050,10381,10382],{"class":1216},"            timeout",[1050,10384,1220],{"class":1071},[1050,10386,4422],{"class":1223},[1050,10388,10389],{"class":1056},"  # Cache for 30 minutes\n",[1050,10391,10393],{"class":1052,"line":10392},142,[1050,10394,10395],{"class":1071},"        )\n",[1050,10397,10399],{"class":1052,"line":10398},143,[1050,10400,2412],{"class":1067},[1050,10402,10404,10406,10408,10410,10412,10414,10416,10418,10420,10422,10424,10426,10428,10430,10432,10434,10436,10438,10441,10443,10445,10447,10449,10451,10453],{"class":1052,"line":10403},144,[1050,10405,4291],{"class":1063},[1050,10407,9163],{"class":1067},[1050,10409,1766],{"class":1071},[1050,10411,1194],{"class":1193},[1050,10413,9220],{"class":1197},[1050,10415,1194],{"class":1193},[1050,10417,4682],{"class":1071},[1050,10419,7016],{"class":1063},[1050,10421,9163],{"class":1067},[1050,10423,1766],{"class":1071},[1050,10425,1194],{"class":1193},[1050,10427,9220],{"class":1197},[1050,10429,1194],{"class":1193},[1050,10431,4682],{"class":1071},[1050,10433,7041],{"class":1063},[1050,10435,6915],{"class":1067},[1050,10437,1072],{"class":1071},[1050,10439,10440],{"class":1186},"loads",[1050,10442,1190],{"class":1071},[1050,10444,9187],{"class":1186},[1050,10446,1766],{"class":1071},[1050,10448,1194],{"class":1193},[1050,10450,9200],{"class":1197},[1050,10452,1194],{"class":1193},[1050,10454,1602],{"class":1071},[1050,10456,10458],{"class":1052,"line":10457},145,[1050,10459,1169],{"class":1067},[1050,10461,10463,10466,10468,10470,10472],{"class":1052,"line":10462},146,[1050,10464,10465],{"class":1063},"    except",[1050,10467,9085],{"class":1067},[1050,10469,1072],{"class":1071},[1050,10471,9382],{"class":4233},[1050,10473,1396],{"class":1071},[1050,10475,10477],{"class":1052,"line":10476},147,[1050,10478,10479],{"class":1056},"        # Return cached data if available, even if expired\n",[1050,10481,10483,10485,10487,10489,10491,10493,10495,10497,10499,10501,10503,10505],{"class":1052,"line":10482},148,[1050,10484,5004],{"class":1067},[1050,10486,1220],{"class":1071},[1050,10488,10334],{"class":1067},[1050,10490,1072],{"class":1071},[1050,10492,8997],{"class":1186},[1050,10494,1190],{"class":1071},[1050,10496,8643],{"class":1186},[1050,10498,1203],{"class":1071},[1050,10500,8607],{"class":1186},[1050,10502,1203],{"class":1071},[1050,10504,8616],{"class":1186},[1050,10506,1268],{"class":1071},[1050,10508,10510,10513,10515,10517,10519,10521,10523,10525,10527,10529,10531,10533,10536],{"class":1052,"line":10509},149,[1050,10511,10512],{"class":1067},"        stale_data ",[1050,10514,1220],{"class":1071},[1050,10516,1252],{"class":1067},[1050,10518,1072],{"class":1071},[1050,10520,1257],{"class":1186},[1050,10522,1190],{"class":1071},[1050,10524,1280],{"class":1141},[1050,10526,1296],{"class":1197},[1050,10528,1287],{"class":1286},[1050,10530,4125],{"class":1186},[1050,10532,1293],{"class":1286},[1050,10534,10535],{"class":1197},":stale\"",[1050,10537,1268],{"class":1071},[1050,10539,10541,10543,10546],{"class":1052,"line":10540},150,[1050,10542,2386],{"class":1063},[1050,10544,10545],{"class":1067}," stale_data",[1050,10547,1396],{"class":1071},[1050,10549,10551,10553],{"class":1052,"line":10550},151,[1050,10552,2080],{"class":1063},[1050,10554,10555],{"class":1067}," stale_data\n",[1050,10557,10559],{"class":1052,"line":10558},152,[1050,10560,2412],{"class":1067},[1050,10562,10564],{"class":1052,"line":10563},153,[1050,10565,10566],{"class":1056},"        # No cached data available\n",[1050,10568,10570,10572],{"class":1052,"line":10569},154,[1050,10571,4291],{"class":1063},[1050,10573,5384],{"class":2146},[1050,10575,10577],{"class":1052,"line":10576},155,[1050,10578,1129],{"emptyLinePlaceholder":1128},[1050,10580,10582,10584,10587],{"class":1052,"line":10581},156,[1050,10583,1142],{"class":1141},[1050,10585,10586],{"class":1145}," get_exchange_rates",[1050,10588,1149],{"class":1071},[1050,10590,10592,10594,10597],{"class":1052,"line":10591},157,[1050,10593,1156],{"class":1155},[1050,10595,10596],{"class":1159},"Get exchange rates with caching and fallback.",[1050,10598,1163],{"class":1155},[1050,10600,10602,10604,10606,10608,10611],{"class":1052,"line":10601},158,[1050,10603,10227],{"class":1067},[1050,10605,1220],{"class":1071},[1050,10607,2468],{"class":1193},[1050,10609,10610],{"class":1197},"https://api.exchangerate.com/v4/latest/USD",[1050,10612,2808],{"class":1193},[1050,10614,10616],{"class":1052,"line":10615},159,[1050,10617,1169],{"class":1067},[1050,10619,10621,10623],{"class":1052,"line":10620},160,[1050,10622,10322],{"class":1063},[1050,10624,1396],{"class":1071},[1050,10626,10628,10630,10632,10634,10636,10638,10640,10642,10644,10646,10648,10650,10652],{"class":1052,"line":10627},161,[1050,10629,10329],{"class":1067},[1050,10631,1220],{"class":1071},[1050,10633,10334],{"class":1067},[1050,10635,1072],{"class":1071},[1050,10637,10339],{"class":1186},[1050,10639,1190],{"class":1071},[1050,10641,8643],{"class":1186},[1050,10643,1203],{"class":1071},[1050,10645,1217],{"class":1216},[1050,10647,1220],{"class":1071},[1050,10649,4868],{"class":1223},[1050,10651,1227],{"class":1071},[1050,10653,10654],{"class":1056},"  # Cache for 1 hour\n",[1050,10656,10658,10660,10662,10664,10666,10668,10670],{"class":1052,"line":10657},162,[1050,10659,4291],{"class":1063},[1050,10661,9163],{"class":1067},[1050,10663,1766],{"class":1071},[1050,10665,1194],{"class":1193},[1050,10667,9220],{"class":1197},[1050,10669,1194],{"class":1193},[1050,10671,1776],{"class":1071},[1050,10673,10675],{"class":1052,"line":10674},163,[1050,10676,1169],{"class":1067},[1050,10678,10680,10682,10684,10686,10688],{"class":1052,"line":10679},164,[1050,10681,10465],{"class":1063},[1050,10683,9085],{"class":1067},[1050,10685,1072],{"class":1071},[1050,10687,9382],{"class":4233},[1050,10689,1396],{"class":1071},[1050,10691,10693],{"class":1052,"line":10692},165,[1050,10694,10695],{"class":1056},"        # Use fallback rates if API is unavailable\n",[1050,10697,10699,10701],{"class":1052,"line":10698},166,[1050,10700,4291],{"class":1063},[1050,10702,4534],{"class":1071},[1050,10704,10706,10708,10711,10713,10715,10717,10720,10722],{"class":1052,"line":10705},167,[1050,10707,6878],{"class":1193},[1050,10709,10710],{"class":1197},"base",[1050,10712,1194],{"class":1193},[1050,10714,1482],{"class":1071},[1050,10716,1206],{"class":1193},[1050,10718,10719],{"class":1197},"USD",[1050,10721,1194],{"class":1193},[1050,10723,1492],{"class":1071},[1050,10725,10727,10729,10732,10734,10736],{"class":1052,"line":10726},168,[1050,10728,6878],{"class":1193},[1050,10730,10731],{"class":1197},"rates",[1050,10733,1194],{"class":1193},[1050,10735,1482],{"class":1071},[1050,10737,4534],{"class":1071},[1050,10739,10741,10743,10746,10748,10750,10753],{"class":1052,"line":10740},169,[1050,10742,9153],{"class":1193},[1050,10744,10745],{"class":1197},"EUR",[1050,10747,1194],{"class":1193},[1050,10749,1482],{"class":1071},[1050,10751,10752],{"class":1223}," 0.85",[1050,10754,1492],{"class":1071},[1050,10756,10758,10760,10763,10765,10767,10770],{"class":1052,"line":10757},170,[1050,10759,9153],{"class":1193},[1050,10761,10762],{"class":1197},"GBP",[1050,10764,1194],{"class":1193},[1050,10766,1482],{"class":1071},[1050,10768,10769],{"class":1223}," 0.73",[1050,10771,1492],{"class":1071},[1050,10773,10775,10777,10780,10782,10784],{"class":1052,"line":10774},171,[1050,10776,9153],{"class":1193},[1050,10778,10779],{"class":1197},"JPY",[1050,10781,1194],{"class":1193},[1050,10783,1482],{"class":1071},[1050,10785,10786],{"class":1223}," 110.0\n",[1050,10788,10790],{"class":1052,"line":10789},172,[1050,10791,9310],{"class":1071},[1050,10793,10795],{"class":1052,"line":10794},173,[1050,10796,9610],{"class":1071},[1030,10798,10800],{"id":10799},"cache-monitoring-and-debugging","Cache Monitoring and Debugging",[1035,10802,10804],{"id":10803},"cache-performance-monitoring","Cache Performance Monitoring",[1040,10806,10808],{"className":1042,"code":10807,"language":1044,"meta":1045,"style":1045},"# Cache performance monitoring\nfrom django.core.cache import cache\nimport time\nimport logging\nfrom functools import wraps\n\nlogger = logging.getLogger('cache_performance')\n\nclass CacheMonitor:\n    \"\"\"Monitor cache performance and operations.\"\"\"\n    \n    def __init__(self):\n        self.stats = {\n            'hits': 0,\n            'misses': 0,\n            'sets': 0,\n            'deletes': 0,\n            'total_time': 0,\n            'operations': 0\n        }\n    \n    def record_operation(self, operation, duration, hit=None):\n        \"\"\"Record cache operation statistics.\"\"\"\n        self.stats['operations'] += 1\n        self.stats['total_time'] += duration\n        \n        if operation == 'get':\n            if hit:\n                self.stats['hits'] += 1\n            else:\n                self.stats['misses'] += 1\n        elif operation in ['set', 'delete']:\n            self.stats[f\"{operation}s\"] += 1\n    \n    @property\n    def hit_rate(self):\n        \"\"\"Calculate cache hit rate.\"\"\"\n        total_gets = self.stats['hits'] + self.stats['misses']\n        if total_gets == 0:\n            return 0\n        return (self.stats['hits'] / total_gets) * 100\n    \n    @property\n    def average_time(self):\n        \"\"\"Calculate average operation time.\"\"\"\n        if self.stats['operations'] == 0:\n            return 0\n        return self.stats['total_time'] / self.stats['operations']\n    \n    def get_stats(self):\n        \"\"\"Get current statistics.\"\"\"\n        return {\n            **self.stats,\n            'hit_rate': self.hit_rate,\n            'average_time': self.average_time\n        }\n    \n    def reset_stats(self):\n        \"\"\"Reset statistics.\"\"\"\n        self.stats = {\n            'hits': 0,\n            'misses': 0,\n            'sets': 0,\n            'deletes': 0,\n            'total_time': 0,\n            'operations': 0\n        }\n\n# Global monitor instance\ncache_monitor = CacheMonitor()\n\ndef monitored_cache_operation(operation):\n    \"\"\"Decorator to monitor cache operations.\"\"\"\n    def decorator(func):\n        @wraps(func)\n        def wrapper(*args, **kwargs):\n            start_time = time.time()\n            \n            try:\n                result = func(*args, **kwargs)\n                duration = time.time() - start_time\n                \n                # Determine if it was a hit (for get operations)\n                hit = None\n                if operation == 'get' and len(args) > 0:\n                    hit = result is not None\n                \n                cache_monitor.record_operation(operation, duration, hit)\n                \n                # Log operation\n                logger.debug(\n                    f\"Cache {operation}: {args[0] if args else 'N/A'} \"\n                    f\"({duration:.4f}s) {'HIT' if hit else 'MISS' if hit is False else ''}\"\n                )\n                \n                return result\n            \n            except Exception as e:\n                duration = time.time() - start_time\n                cache_monitor.record_operation(operation, duration)\n                logger.error(f\"Cache {operation} error: {e}\")\n                raise\n        \n        return wrapper\n    return decorator\n\n# Monitored cache operations\n@monitored_cache_operation('get')\ndef monitored_get(key, default=None):\n    return cache.get(key, default)\n\n@monitored_cache_operation('set')\ndef monitored_set(key, value, timeout=None):\n    return cache.set(key, value, timeout)\n\n@monitored_cache_operation('delete')\ndef monitored_delete(key):\n    return cache.delete(key)\n\n# Cache debugging utilities\nclass CacheDebugger:\n    \"\"\"Utilities for debugging cache issues.\"\"\"\n    \n    @staticmethod\n    def inspect_cache_key(key):\n        \"\"\"Inspect cache key and its value.\"\"\"\n        value = cache.get(key)\n        \n        info = {\n            'key': key,\n            'exists': value is not None,\n            'value_type': type(value).__name__ if value is not None else None,\n            'value_size': len(str(value)) if value is not None else 0,\n        }\n        \n        # Try to get TTL (Redis-specific)\n        try:\n            from django_redis import get_redis_connection\n            redis_conn = get_redis_connection(\"default\")\n            ttl = redis_conn.ttl(key)\n            info['ttl'] = ttl if ttl > 0 else None\n        except:\n            info['ttl'] = 'unknown'\n        \n        return info\n    \n    @staticmethod\n    def list_cache_keys(pattern=\"*\"):\n        \"\"\"List cache keys matching pattern (Redis-specific).\"\"\"\n        try:\n            from django_redis import get_redis_connection\n            redis_conn = get_redis_connection(\"default\")\n            keys = redis_conn.keys(pattern)\n            return [key.decode() if isinstance(key, bytes) else key for key in keys]\n        except:\n            return []\n    \n    @staticmethod\n    def cache_memory_usage():\n        \"\"\"Get cache memory usage information (Redis-specific).\"\"\"\n        try:\n            from django_redis import get_redis_connection\n            redis_conn = get_redis_connection(\"default\")\n            info = redis_conn.info('memory')\n            return {\n                'used_memory': info.get('used_memory'),\n                'used_memory_human': info.get('used_memory_human'),\n                'used_memory_peak': info.get('used_memory_peak'),\n                'used_memory_peak_human': info.get('used_memory_peak_human'),\n            }\n        except:\n            return {}\n\n# Management command for cache monitoring\nfrom django.core.management.base import BaseCommand\n\nclass Command(BaseCommand):\n    help = 'Monitor cache performance'\n    \n    def add_arguments(self, parser):\n        parser.add_argument(\n            '--reset',\n            action='store_true',\n            help='Reset cache statistics'\n        )\n        parser.add_argument(\n            '--inspect',\n            type=str,\n            help='Inspect specific cache key'\n        )\n    \n    def handle(self, *args, **options):\n        if options['reset']:\n            cache_monitor.reset_stats()\n            self.stdout.write('Cache statistics reset')\n            return\n        \n        if options['inspect']:\n            key = options['inspect']\n            info = CacheDebugger.inspect_cache_key(key)\n            self.stdout.write(f\"Cache key inspection: {key}\")\n            for k, v in info.items():\n                self.stdout.write(f\"  {k}: {v}\")\n            return\n        \n        # Show current statistics\n        stats = cache_monitor.get_stats()\n        self.stdout.write('Cache Performance Statistics:')\n        self.stdout.write(f\"  Hit rate: {stats['hit_rate']:.2f}%\")\n        self.stdout.write(f\"  Total operations: {stats['operations']}\")\n        self.stdout.write(f\"  Hits: {stats['hits']}\")\n        self.stdout.write(f\"  Misses: {stats['misses']}\")\n        self.stdout.write(f\"  Sets: {stats['sets']}\")\n        self.stdout.write(f\"  Deletes: {stats['deletes']}\")\n        self.stdout.write(f\"  Average time: {stats['average_time']:.4f}s\")\n        \n        # Memory usage\n        memory_info = CacheDebugger.cache_memory_usage()\n        if memory_info:\n            self.stdout.write('\\nMemory Usage:')\n            for k, v in memory_info.items():\n                self.stdout.write(f\"  {k}: {v}\")\n",[1047,10809,10810,10815,10833,10839,10845,10855,10859,10883,10887,10896,10905,10909,10921,10934,10949,10964,10979,10994,11009,11022,11026,11030,11062,11071,11095,11118,11122,11140,11148,11171,11177,11199,11227,11258,11262,11270,11283,11292,11333,11346,11352,11388,11392,11398,11411,11420,11447,11453,11491,11495,11508,11517,11523,11536,11555,11573,11577,11581,11594,11603,11615,11629,11643,11657,11671,11685,11697,11701,11705,11710,11721,11725,11738,11747,11759,11771,11791,11808,11812,11818,11841,11862,11866,11871,11880,11913,11928,11932,11956,11960,11965,11977,12024,12084,12089,12093,12099,12103,12117,12135,12153,12186,12191,12195,12201,12207,12211,12216,12233,12254,12274,12278,12294,12319,12343,12347,12363,12376,12392,12396,12401,12410,12419,12423,12430,12443,12452,12470,12474,12483,12497,12518,12556,12595,12599,12603,12608,12614,12627,12648,12669,12702,12708,12731,12735,12742,12746,12752,12774,12783,12789,12799,12817,12837,12882,12888,12895,12899,12905,12914,12923,12929,12939,12957,12982,12988,13016,13043,13070,13097,13101,13107,13114,13118,13124,13150,13155,13171,13186,13191,13210,13223,13235,13252,13267,13272,13283,13295,13307,13321,13326,13331,13358,13377,13390,13416,13422,13427,13445,13465,13485,13515,13537,13576,13581,13586,13592,13610,13634,13678,13718,13758,13798,13838,13878,13920,13925,13931,13948,13958,13985,14006],{"__ignoreMap":1045},[1050,10811,10812],{"class":1052,"line":1053},[1050,10813,10814],{"class":1056},"# Cache performance monitoring\n",[1050,10816,10817,10819,10821,10823,10825,10827,10829,10831],{"class":1052,"line":1060},[1050,10818,1064],{"class":1063},[1050,10820,1068],{"class":1067},[1050,10822,1072],{"class":1071},[1050,10824,1075],{"class":1067},[1050,10826,1072],{"class":1071},[1050,10828,1080],{"class":1067},[1050,10830,1083],{"class":1063},[1050,10832,1086],{"class":1067},[1050,10834,10835,10837],{"class":1052,"line":1089},[1050,10836,1083],{"class":1063},[1050,10838,1975],{"class":1067},[1050,10840,10841,10843],{"class":1052,"line":1109},[1050,10842,1083],{"class":1063},[1050,10844,9403],{"class":1067},[1050,10846,10847,10849,10851,10853],{"class":1052,"line":1117},[1050,10848,1064],{"class":1063},[1050,10850,3832],{"class":1067},[1050,10852,1083],{"class":1063},[1050,10854,3837],{"class":1067},[1050,10856,10857],{"class":1052,"line":1125},[1050,10858,1129],{"emptyLinePlaceholder":1128},[1050,10860,10861,10864,10866,10868,10870,10872,10874,10876,10879,10881],{"class":1052,"line":1132},[1050,10862,10863],{"class":1067},"logger ",[1050,10865,1220],{"class":1071},[1050,10867,9413],{"class":1067},[1050,10869,1072],{"class":1071},[1050,10871,9418],{"class":1186},[1050,10873,1190],{"class":1071},[1050,10875,1194],{"class":1193},[1050,10877,10878],{"class":1197},"cache_performance",[1050,10880,1194],{"class":1193},[1050,10882,1268],{"class":1071},[1050,10884,10885],{"class":1052,"line":1138},[1050,10886,1129],{"emptyLinePlaceholder":1128},[1050,10888,10889,10891,10894],{"class":1052,"line":1152},[1050,10890,1991],{"class":1141},[1050,10892,10893],{"class":1994}," CacheMonitor",[1050,10895,1396],{"class":1071},[1050,10897,10898,10900,10903],{"class":1052,"line":1166},[1050,10899,1156],{"class":1155},[1050,10901,10902],{"class":1159},"Monitor cache performance and operations.",[1050,10904,1163],{"class":1155},[1050,10906,10907],{"class":1052,"line":1172},[1050,10908,1169],{"class":1067},[1050,10910,10911,10913,10915,10917,10919],{"class":1052,"line":1178},[1050,10912,2015],{"class":1141},[1050,10914,4849],{"class":1274},[1050,10916,1190],{"class":1071},[1050,10918,2024],{"class":2023},[1050,10920,2053],{"class":1071},[1050,10922,10923,10925,10927,10930,10932],{"class":1052,"line":1233},[1050,10924,4875],{"class":2656},[1050,10926,1072],{"class":1071},[1050,10928,10929],{"class":4233},"stats",[1050,10931,4237],{"class":1071},[1050,10933,4534],{"class":1071},[1050,10935,10936,10938,10941,10943,10945,10947],{"class":1052,"line":1238},[1050,10937,6878],{"class":1193},[1050,10939,10940],{"class":1197},"hits",[1050,10942,1194],{"class":1193},[1050,10944,1482],{"class":1071},[1050,10946,4688],{"class":1223},[1050,10948,1492],{"class":1071},[1050,10950,10951,10953,10956,10958,10960,10962],{"class":1052,"line":1244},[1050,10952,6878],{"class":1193},[1050,10954,10955],{"class":1197},"misses",[1050,10957,1194],{"class":1193},[1050,10959,1482],{"class":1071},[1050,10961,4688],{"class":1223},[1050,10963,1492],{"class":1071},[1050,10965,10966,10968,10971,10973,10975,10977],{"class":1052,"line":1271},[1050,10967,6878],{"class":1193},[1050,10969,10970],{"class":1197},"sets",[1050,10972,1194],{"class":1193},[1050,10974,1482],{"class":1071},[1050,10976,4688],{"class":1223},[1050,10978,1492],{"class":1071},[1050,10980,10981,10983,10986,10988,10990,10992],{"class":1052,"line":1301},[1050,10982,6878],{"class":1193},[1050,10984,10985],{"class":1197},"deletes",[1050,10987,1194],{"class":1193},[1050,10989,1482],{"class":1071},[1050,10991,4688],{"class":1223},[1050,10993,1492],{"class":1071},[1050,10995,10996,10998,11001,11003,11005,11007],{"class":1052,"line":1306},[1050,10997,6878],{"class":1193},[1050,10999,11000],{"class":1197},"total_time",[1050,11002,1194],{"class":1193},[1050,11004,1482],{"class":1071},[1050,11006,4688],{"class":1223},[1050,11008,1492],{"class":1071},[1050,11010,11011,11013,11016,11018,11020],{"class":1052,"line":1312},[1050,11012,6878],{"class":1193},[1050,11014,11015],{"class":1197},"operations",[1050,11017,1194],{"class":1193},[1050,11019,1482],{"class":1071},[1050,11021,5527],{"class":1223},[1050,11023,11024],{"class":1052,"line":1345},[1050,11025,9610],{"class":1071},[1050,11027,11028],{"class":1052,"line":1367},[1050,11029,1169],{"class":1067},[1050,11031,11032,11034,11037,11039,11041,11043,11046,11048,11051,11053,11056,11058,11060],{"class":1052,"line":1372},[1050,11033,2015],{"class":1141},[1050,11035,11036],{"class":1145}," record_operation",[1050,11038,1190],{"class":1071},[1050,11040,2024],{"class":2023},[1050,11042,1203],{"class":1071},[1050,11044,11045],{"class":2029}," operation",[1050,11047,1203],{"class":1071},[1050,11049,11050],{"class":2029}," duration",[1050,11052,1203],{"class":1071},[1050,11054,11055],{"class":2029}," hit",[1050,11057,1220],{"class":1390},[1050,11059,2147],{"class":2146},[1050,11061,2053],{"class":1071},[1050,11063,11064,11066,11069],{"class":1052,"line":1378},[1050,11065,2058],{"class":1155},[1050,11067,11068],{"class":1159},"Record cache operation statistics.",[1050,11070,1163],{"class":1155},[1050,11072,11073,11075,11077,11079,11081,11083,11085,11087,11089,11092],{"class":1052,"line":1399},[1050,11074,4875],{"class":2656},[1050,11076,1072],{"class":1071},[1050,11078,10929],{"class":4233},[1050,11080,1766],{"class":1071},[1050,11082,1194],{"class":1193},[1050,11084,11015],{"class":1197},[1050,11086,1194],{"class":1193},[1050,11088,4682],{"class":1071},[1050,11090,11091],{"class":1071}," +=",[1050,11093,11094],{"class":1223}," 1\n",[1050,11096,11097,11099,11101,11103,11105,11107,11109,11111,11113,11115],{"class":1052,"line":1416},[1050,11098,4875],{"class":2656},[1050,11100,1072],{"class":1071},[1050,11102,10929],{"class":4233},[1050,11104,1766],{"class":1071},[1050,11106,1194],{"class":1193},[1050,11108,11000],{"class":1197},[1050,11110,1194],{"class":1193},[1050,11112,4682],{"class":1071},[1050,11114,11091],{"class":1071},[1050,11116,11117],{"class":1067}," duration\n",[1050,11119,11120],{"class":1052,"line":1421},[1050,11121,2412],{"class":1067},[1050,11123,11124,11126,11129,11132,11134,11136,11138],{"class":1052,"line":1427},[1050,11125,2386],{"class":1063},[1050,11127,11128],{"class":1067}," operation ",[1050,11130,11131],{"class":1390},"==",[1050,11133,1206],{"class":1193},[1050,11135,1257],{"class":1197},[1050,11137,1194],{"class":1193},[1050,11139,1396],{"class":1071},[1050,11141,11142,11144,11146],{"class":1052,"line":1447},[1050,11143,3972],{"class":1063},[1050,11145,11055],{"class":1067},[1050,11147,1396],{"class":1071},[1050,11149,11150,11153,11155,11157,11159,11161,11163,11165,11167,11169],{"class":1052,"line":1452},[1050,11151,11152],{"class":2656},"                self",[1050,11154,1072],{"class":1071},[1050,11156,10929],{"class":4233},[1050,11158,1766],{"class":1071},[1050,11160,1194],{"class":1193},[1050,11162,10940],{"class":1197},[1050,11164,1194],{"class":1193},[1050,11166,4682],{"class":1071},[1050,11168,11091],{"class":1071},[1050,11170,11094],{"class":1223},[1050,11172,11173,11175],{"class":1052,"line":1458},[1050,11174,4004],{"class":1063},[1050,11176,1396],{"class":1071},[1050,11178,11179,11181,11183,11185,11187,11189,11191,11193,11195,11197],{"class":1052,"line":1471},[1050,11180,11152],{"class":2656},[1050,11182,1072],{"class":1071},[1050,11184,10929],{"class":4233},[1050,11186,1766],{"class":1071},[1050,11188,1194],{"class":1193},[1050,11190,10955],{"class":1197},[1050,11192,1194],{"class":1193},[1050,11194,4682],{"class":1071},[1050,11196,11091],{"class":1071},[1050,11198,11094],{"class":1223},[1050,11200,11201,11204,11206,11208,11210,11212,11214,11216,11218,11220,11222,11224],{"class":1052,"line":1495},[1050,11202,11203],{"class":1063},"        elif",[1050,11205,11128],{"class":1067},[1050,11207,2781],{"class":1390},[1050,11209,8640],{"class":1071},[1050,11211,1194],{"class":1193},[1050,11213,1187],{"class":1197},[1050,11215,1194],{"class":1193},[1050,11217,1203],{"class":1071},[1050,11219,1206],{"class":1193},[1050,11221,1434],{"class":1197},[1050,11223,1194],{"class":1193},[1050,11225,11226],{"class":1071},"]:\n",[1050,11228,11229,11232,11234,11236,11238,11240,11242,11244,11247,11249,11252,11254,11256],{"class":1052,"line":1516},[1050,11230,11231],{"class":2656},"            self",[1050,11233,1072],{"class":1071},[1050,11235,10929],{"class":4233},[1050,11237,1766],{"class":1071},[1050,11239,1280],{"class":1141},[1050,11241,1296],{"class":1197},[1050,11243,1287],{"class":1286},[1050,11245,11246],{"class":4233},"operation",[1050,11248,1293],{"class":1286},[1050,11250,11251],{"class":1197},"s\"",[1050,11253,4682],{"class":1071},[1050,11255,11091],{"class":1071},[1050,11257,11094],{"class":1223},[1050,11259,11260],{"class":1052,"line":1536},[1050,11261,1169],{"class":1067},[1050,11263,11264,11267],{"class":1052,"line":1551},[1050,11265,11266],{"class":1071},"    @",[1050,11268,11269],{"class":2106},"property\n",[1050,11271,11272,11274,11277,11279,11281],{"class":1052,"line":1556},[1050,11273,2015],{"class":1141},[1050,11275,11276],{"class":1145}," hit_rate",[1050,11278,1190],{"class":1071},[1050,11280,2024],{"class":2023},[1050,11282,2053],{"class":1071},[1050,11284,11285,11287,11290],{"class":1052,"line":1562},[1050,11286,2058],{"class":1155},[1050,11288,11289],{"class":1159},"Calculate cache hit rate.",[1050,11291,1163],{"class":1155},[1050,11293,11294,11297,11299,11301,11303,11305,11307,11309,11311,11313,11315,11317,11319,11321,11323,11325,11327,11329,11331],{"class":1052,"line":1605},[1050,11295,11296],{"class":1067},"        total_gets ",[1050,11298,1220],{"class":1071},[1050,11300,2657],{"class":2656},[1050,11302,1072],{"class":1071},[1050,11304,10929],{"class":4233},[1050,11306,1766],{"class":1071},[1050,11308,1194],{"class":1193},[1050,11310,10940],{"class":1197},[1050,11312,1194],{"class":1193},[1050,11314,4682],{"class":1071},[1050,11316,4391],{"class":1390},[1050,11318,2657],{"class":2656},[1050,11320,1072],{"class":1071},[1050,11322,10929],{"class":4233},[1050,11324,1766],{"class":1071},[1050,11326,1194],{"class":1193},[1050,11328,10955],{"class":1197},[1050,11330,1194],{"class":1193},[1050,11332,1776],{"class":1071},[1050,11334,11335,11337,11340,11342,11344],{"class":1052,"line":1628},[1050,11336,2386],{"class":1063},[1050,11338,11339],{"class":1067}," total_gets ",[1050,11341,11131],{"class":1390},[1050,11343,4688],{"class":1223},[1050,11345,1396],{"class":1071},[1050,11347,11348,11350],{"class":1052,"line":1633},[1050,11349,2080],{"class":1063},[1050,11351,5527],{"class":1223},[1050,11353,11354,11356,11358,11360,11362,11364,11366,11368,11370,11372,11374,11377,11380,11382,11385],{"class":1052,"line":1639},[1050,11355,4291],{"class":1063},[1050,11357,7028],{"class":1071},[1050,11359,2024],{"class":2656},[1050,11361,1072],{"class":1071},[1050,11363,10929],{"class":4233},[1050,11365,1766],{"class":1071},[1050,11367,1194],{"class":1193},[1050,11369,10940],{"class":1197},[1050,11371,1194],{"class":1193},[1050,11373,4682],{"class":1071},[1050,11375,11376],{"class":1390}," /",[1050,11378,11379],{"class":1067}," total_gets",[1050,11381,1227],{"class":1071},[1050,11383,11384],{"class":1390}," *",[1050,11386,11387],{"class":1223}," 100\n",[1050,11389,11390],{"class":1052,"line":1675},[1050,11391,1169],{"class":1067},[1050,11393,11394,11396],{"class":1052,"line":1680},[1050,11395,11266],{"class":1071},[1050,11397,11269],{"class":2106},[1050,11399,11400,11402,11405,11407,11409],{"class":1052,"line":1686},[1050,11401,2015],{"class":1141},[1050,11403,11404],{"class":1145}," average_time",[1050,11406,1190],{"class":1071},[1050,11408,2024],{"class":2023},[1050,11410,2053],{"class":1071},[1050,11412,11413,11415,11418],{"class":1052,"line":1692},[1050,11414,2058],{"class":1155},[1050,11416,11417],{"class":1159},"Calculate average operation time.",[1050,11419,1163],{"class":1155},[1050,11421,11422,11424,11426,11428,11430,11432,11434,11436,11438,11440,11443,11445],{"class":1052,"line":1697},[1050,11423,2386],{"class":1063},[1050,11425,2657],{"class":2656},[1050,11427,1072],{"class":1071},[1050,11429,10929],{"class":4233},[1050,11431,1766],{"class":1071},[1050,11433,1194],{"class":1193},[1050,11435,11015],{"class":1197},[1050,11437,1194],{"class":1193},[1050,11439,4682],{"class":1071},[1050,11441,11442],{"class":1390}," ==",[1050,11444,4688],{"class":1223},[1050,11446,1396],{"class":1071},[1050,11448,11449,11451],{"class":1052,"line":1703},[1050,11450,2080],{"class":1063},[1050,11452,5527],{"class":1223},[1050,11454,11455,11457,11459,11461,11463,11465,11467,11469,11471,11473,11475,11477,11479,11481,11483,11485,11487,11489],{"class":1052,"line":1713},[1050,11456,4291],{"class":1063},[1050,11458,2657],{"class":2656},[1050,11460,1072],{"class":1071},[1050,11462,10929],{"class":4233},[1050,11464,1766],{"class":1071},[1050,11466,1194],{"class":1193},[1050,11468,11000],{"class":1197},[1050,11470,1194],{"class":1193},[1050,11472,4682],{"class":1071},[1050,11474,11376],{"class":1390},[1050,11476,2657],{"class":2656},[1050,11478,1072],{"class":1071},[1050,11480,10929],{"class":4233},[1050,11482,1766],{"class":1071},[1050,11484,1194],{"class":1193},[1050,11486,11015],{"class":1197},[1050,11488,1194],{"class":1193},[1050,11490,1776],{"class":1071},[1050,11492,11493],{"class":1052,"line":1723},[1050,11494,1169],{"class":1067},[1050,11496,11497,11499,11502,11504,11506],{"class":1052,"line":1728},[1050,11498,2015],{"class":1141},[1050,11500,11501],{"class":1145}," get_stats",[1050,11503,1190],{"class":1071},[1050,11505,2024],{"class":2023},[1050,11507,2053],{"class":1071},[1050,11509,11510,11512,11515],{"class":1052,"line":1734},[1050,11511,2058],{"class":1155},[1050,11513,11514],{"class":1159},"Get current statistics.",[1050,11516,1163],{"class":1155},[1050,11518,11519,11521],{"class":1052,"line":1744},[1050,11520,4291],{"class":1063},[1050,11522,4534],{"class":1071},[1050,11524,11525,11528,11530,11532,11534],{"class":1052,"line":1749},[1050,11526,11527],{"class":1390},"            **",[1050,11529,2024],{"class":2656},[1050,11531,1072],{"class":1071},[1050,11533,10929],{"class":4233},[1050,11535,1492],{"class":1071},[1050,11537,11538,11540,11543,11545,11547,11549,11551,11553],{"class":1052,"line":1755},[1050,11539,6878],{"class":1193},[1050,11541,11542],{"class":1197},"hit_rate",[1050,11544,1194],{"class":1193},[1050,11546,1482],{"class":1071},[1050,11548,2657],{"class":2656},[1050,11550,1072],{"class":1071},[1050,11552,11542],{"class":4233},[1050,11554,1492],{"class":1071},[1050,11556,11557,11559,11562,11564,11566,11568,11570],{"class":1052,"line":1779},[1050,11558,6878],{"class":1193},[1050,11560,11561],{"class":1197},"average_time",[1050,11563,1194],{"class":1193},[1050,11565,1482],{"class":1071},[1050,11567,2657],{"class":2656},[1050,11569,1072],{"class":1071},[1050,11571,11572],{"class":4233},"average_time\n",[1050,11574,11575],{"class":1052,"line":1800},[1050,11576,9610],{"class":1071},[1050,11578,11579],{"class":1052,"line":1805},[1050,11580,1169],{"class":1067},[1050,11582,11583,11585,11588,11590,11592],{"class":1052,"line":1811},[1050,11584,2015],{"class":1141},[1050,11586,11587],{"class":1145}," reset_stats",[1050,11589,1190],{"class":1071},[1050,11591,2024],{"class":2023},[1050,11593,2053],{"class":1071},[1050,11595,11596,11598,11601],{"class":1052,"line":1868},[1050,11597,2058],{"class":1155},[1050,11599,11600],{"class":1159},"Reset statistics.",[1050,11602,1163],{"class":1155},[1050,11604,11605,11607,11609,11611,11613],{"class":1052,"line":1909},[1050,11606,4875],{"class":2656},[1050,11608,1072],{"class":1071},[1050,11610,10929],{"class":4233},[1050,11612,4237],{"class":1071},[1050,11614,4534],{"class":1071},[1050,11616,11617,11619,11621,11623,11625,11627],{"class":1052,"line":2721},[1050,11618,6878],{"class":1193},[1050,11620,10940],{"class":1197},[1050,11622,1194],{"class":1193},[1050,11624,1482],{"class":1071},[1050,11626,4688],{"class":1223},[1050,11628,1492],{"class":1071},[1050,11630,11631,11633,11635,11637,11639,11641],{"class":1052,"line":2731},[1050,11632,6878],{"class":1193},[1050,11634,10955],{"class":1197},[1050,11636,1194],{"class":1193},[1050,11638,1482],{"class":1071},[1050,11640,4688],{"class":1223},[1050,11642,1492],{"class":1071},[1050,11644,11645,11647,11649,11651,11653,11655],{"class":1052,"line":2737},[1050,11646,6878],{"class":1193},[1050,11648,10970],{"class":1197},[1050,11650,1194],{"class":1193},[1050,11652,1482],{"class":1071},[1050,11654,4688],{"class":1223},[1050,11656,1492],{"class":1071},[1050,11658,11659,11661,11663,11665,11667,11669],{"class":1052,"line":2761},[1050,11660,6878],{"class":1193},[1050,11662,10985],{"class":1197},[1050,11664,1194],{"class":1193},[1050,11666,1482],{"class":1071},[1050,11668,4688],{"class":1223},[1050,11670,1492],{"class":1071},[1050,11672,11673,11675,11677,11679,11681,11683],{"class":1052,"line":2766},[1050,11674,6878],{"class":1193},[1050,11676,11000],{"class":1197},[1050,11678,1194],{"class":1193},[1050,11680,1482],{"class":1071},[1050,11682,4688],{"class":1223},[1050,11684,1492],{"class":1071},[1050,11686,11687,11689,11691,11693,11695],{"class":1052,"line":2772},[1050,11688,6878],{"class":1193},[1050,11690,11015],{"class":1197},[1050,11692,1194],{"class":1193},[1050,11694,1482],{"class":1071},[1050,11696,5527],{"class":1223},[1050,11698,11699],{"class":1052,"line":2788},[1050,11700,9610],{"class":1071},[1050,11702,11703],{"class":1052,"line":2811},[1050,11704,1129],{"emptyLinePlaceholder":1128},[1050,11706,11707],{"class":1052,"line":2838},[1050,11708,11709],{"class":1056},"# Global monitor instance\n",[1050,11711,11712,11715,11717,11719],{"class":1052,"line":2854},[1050,11713,11714],{"class":1067},"cache_monitor ",[1050,11716,1220],{"class":1071},[1050,11718,10893],{"class":1186},[1050,11720,2558],{"class":1071},[1050,11722,11723],{"class":1052,"line":2878},[1050,11724,1129],{"emptyLinePlaceholder":1128},[1050,11726,11727,11729,11732,11734,11736],{"class":1052,"line":2883},[1050,11728,1142],{"class":1141},[1050,11730,11731],{"class":1145}," monitored_cache_operation",[1050,11733,1190],{"class":1071},[1050,11735,11246],{"class":2029},[1050,11737,2053],{"class":1071},[1050,11739,11740,11742,11745],{"class":1052,"line":2902},[1050,11741,1156],{"class":1155},[1050,11743,11744],{"class":1159},"Decorator to monitor cache operations.",[1050,11746,1163],{"class":1155},[1050,11748,11749,11751,11753,11755,11757],{"class":1052,"line":2912},[1050,11750,2015],{"class":1141},[1050,11752,3915],{"class":1145},[1050,11754,1190],{"class":1071},[1050,11756,3920],{"class":2029},[1050,11758,2053],{"class":1071},[1050,11760,11761,11763,11765,11767,11769],{"class":1052,"line":2932},[1050,11762,3927],{"class":1071},[1050,11764,3930],{"class":1145},[1050,11766,1190],{"class":1071},[1050,11768,3920],{"class":1186},[1050,11770,1268],{"class":1071},[1050,11772,11773,11775,11777,11779,11781,11783,11785,11787,11789],{"class":1052,"line":2956},[1050,11774,3941],{"class":1141},[1050,11776,3944],{"class":1145},[1050,11778,1190],{"class":1071},[1050,11780,3949],{"class":1390},[1050,11782,3952],{"class":2029},[1050,11784,1203],{"class":1071},[1050,11786,3957],{"class":1390},[1050,11788,3960],{"class":2029},[1050,11790,2053],{"class":1071},[1050,11792,11793,11796,11798,11801,11803,11806],{"class":1052,"line":2961},[1050,11794,11795],{"class":1067},"            start_time ",[1050,11797,1220],{"class":1071},[1050,11799,11800],{"class":1067}," time",[1050,11802,1072],{"class":1071},[1050,11804,11805],{"class":1186},"time",[1050,11807,2558],{"class":1071},[1050,11809,11810],{"class":1052,"line":2970},[1050,11811,2594],{"class":1067},[1050,11813,11814,11816],{"class":1052,"line":2976},[1050,11815,2489],{"class":1063},[1050,11817,1396],{"class":1071},[1050,11819,11820,11823,11825,11827,11829,11831,11833,11835,11837,11839],{"class":1052,"line":2998},[1050,11821,11822],{"class":1067},"                result ",[1050,11824,1220],{"class":1071},[1050,11826,4167],{"class":1186},[1050,11828,1190],{"class":1071},[1050,11830,3949],{"class":1390},[1050,11832,3952],{"class":1186},[1050,11834,1203],{"class":1071},[1050,11836,3957],{"class":1390},[1050,11838,3960],{"class":1186},[1050,11840,1268],{"class":1071},[1050,11842,11843,11846,11848,11850,11852,11854,11856,11859],{"class":1052,"line":3004},[1050,11844,11845],{"class":1067},"                duration ",[1050,11847,1220],{"class":1071},[1050,11849,11800],{"class":1067},[1050,11851,1072],{"class":1071},[1050,11853,11805],{"class":1186},[1050,11855,4094],{"class":1071},[1050,11857,11858],{"class":1390}," -",[1050,11860,11861],{"class":1067}," start_time\n",[1050,11863,11864],{"class":1052,"line":3019},[1050,11865,2542],{"class":1067},[1050,11867,11868],{"class":1052,"line":3024},[1050,11869,11870],{"class":1056},"                # Determine if it was a hit (for get operations)\n",[1050,11872,11873,11876,11878],{"class":1052,"line":3059},[1050,11874,11875],{"class":1067},"                hit ",[1050,11877,1220],{"class":1071},[1050,11879,5384],{"class":2146},[1050,11881,11882,11884,11886,11888,11890,11892,11894,11897,11900,11902,11904,11906,11909,11911],{"class":1052,"line":3069},[1050,11883,2520],{"class":1063},[1050,11885,11128],{"class":1067},[1050,11887,11131],{"class":1390},[1050,11889,1206],{"class":1193},[1050,11891,1257],{"class":1197},[1050,11893,1194],{"class":1193},[1050,11895,11896],{"class":1390}," and",[1050,11898,11899],{"class":1274}," len",[1050,11901,1190],{"class":1071},[1050,11903,3952],{"class":1186},[1050,11905,1227],{"class":1071},[1050,11907,11908],{"class":1390}," >",[1050,11910,4688],{"class":1223},[1050,11912,1396],{"class":1071},[1050,11914,11915,11918,11920,11922,11924,11926],{"class":1052,"line":3074},[1050,11916,11917],{"class":1067},"                    hit ",[1050,11919,1220],{"class":1071},[1050,11921,4134],{"class":1067},[1050,11923,2392],{"class":1390},[1050,11925,2395],{"class":1390},[1050,11927,5384],{"class":2146},[1050,11929,11930],{"class":1052,"line":3097},[1050,11931,2542],{"class":1067},[1050,11933,11934,11937,11939,11942,11944,11946,11948,11950,11952,11954],{"class":1052,"line":3102},[1050,11935,11936],{"class":1067},"                cache_monitor",[1050,11938,1072],{"class":1071},[1050,11940,11941],{"class":1186},"record_operation",[1050,11943,1190],{"class":1071},[1050,11945,11246],{"class":1186},[1050,11947,1203],{"class":1071},[1050,11949,11050],{"class":1186},[1050,11951,1203],{"class":1071},[1050,11953,11055],{"class":1186},[1050,11955,1268],{"class":1071},[1050,11957,11958],{"class":1052,"line":3108},[1050,11959,2542],{"class":1067},[1050,11961,11962],{"class":1052,"line":3129},[1050,11963,11964],{"class":1056},"                # Log operation\n",[1050,11966,11967,11970,11972,11975],{"class":1052,"line":3153},[1050,11968,11969],{"class":1067},"                logger",[1050,11971,1072],{"class":1071},[1050,11973,11974],{"class":1186},"debug",[1050,11976,3619],{"class":1071},[1050,11978,11979,11982,11985,11987,11989,11991,11994,11996,11998,12000,12002,12004,12006,12009,12012,12014,12017,12019,12021],{"class":1052,"line":3158},[1050,11980,11981],{"class":1141},"                    f",[1050,11983,11984],{"class":1197},"\"Cache ",[1050,11986,1287],{"class":1286},[1050,11988,11246],{"class":1186},[1050,11990,1293],{"class":1286},[1050,11992,11993],{"class":1197},": ",[1050,11995,1287],{"class":1286},[1050,11997,3952],{"class":1186},[1050,11999,1766],{"class":1071},[1050,12001,2050],{"class":1223},[1050,12003,4682],{"class":1071},[1050,12005,7016],{"class":1063},[1050,12007,12008],{"class":1186}," args ",[1050,12010,12011],{"class":1063},"else",[1050,12013,1206],{"class":1193},[1050,12015,12016],{"class":1197},"N/A",[1050,12018,1194],{"class":1193},[1050,12020,1293],{"class":1286},[1050,12022,12023],{"class":1197}," \"\n",[1050,12025,12026,12028,12031,12033,12036,12039,12041,12044,12046,12048,12051,12053,12055,12058,12060,12062,12065,12067,12069,12071,12073,12076,12078,12080,12082],{"class":1052,"line":3164},[1050,12027,11981],{"class":1141},[1050,12029,12030],{"class":1197},"\"(",[1050,12032,1287],{"class":1286},[1050,12034,12035],{"class":1186},"duration",[1050,12037,12038],{"class":1141},":.4f",[1050,12040,1293],{"class":1286},[1050,12042,12043],{"class":1197},"s) ",[1050,12045,1287],{"class":1286},[1050,12047,1194],{"class":1193},[1050,12049,12050],{"class":1197},"HIT",[1050,12052,1194],{"class":1193},[1050,12054,7016],{"class":1063},[1050,12056,12057],{"class":1186}," hit ",[1050,12059,12011],{"class":1063},[1050,12061,1206],{"class":1193},[1050,12063,12064],{"class":1197},"MISS",[1050,12066,1194],{"class":1193},[1050,12068,7016],{"class":1063},[1050,12070,12057],{"class":1186},[1050,12072,2392],{"class":1390},[1050,12074,12075],{"class":2146}," False",[1050,12077,7041],{"class":1063},[1050,12079,9257],{"class":1193},[1050,12081,1293],{"class":1286},[1050,12083,2808],{"class":1197},[1050,12085,12086],{"class":1052,"line":3178},[1050,12087,12088],{"class":1071},"                )\n",[1050,12090,12091],{"class":1052,"line":3200},[1050,12092,2542],{"class":1067},[1050,12094,12095,12097],{"class":1052,"line":3225},[1050,12096,2587],{"class":1063},[1050,12098,4149],{"class":1067},[1050,12100,12101],{"class":1052,"line":3241},[1050,12102,2594],{"class":1067},[1050,12104,12105,12108,12111,12113,12115],{"class":1052,"line":3265},[1050,12106,12107],{"class":1063},"            except",[1050,12109,12110],{"class":2106}," Exception",[1050,12112,9385],{"class":1063},[1050,12114,9388],{"class":1067},[1050,12116,1396],{"class":1071},[1050,12118,12119,12121,12123,12125,12127,12129,12131,12133],{"class":1052,"line":3270},[1050,12120,11845],{"class":1067},[1050,12122,1220],{"class":1071},[1050,12124,11800],{"class":1067},[1050,12126,1072],{"class":1071},[1050,12128,11805],{"class":1186},[1050,12130,4094],{"class":1071},[1050,12132,11858],{"class":1390},[1050,12134,11861],{"class":1067},[1050,12136,12137,12139,12141,12143,12145,12147,12149,12151],{"class":1052,"line":3289},[1050,12138,11936],{"class":1067},[1050,12140,1072],{"class":1071},[1050,12142,11941],{"class":1186},[1050,12144,1190],{"class":1071},[1050,12146,11246],{"class":1186},[1050,12148,1203],{"class":1071},[1050,12150,11050],{"class":1186},[1050,12152,1268],{"class":1071},[1050,12154,12155,12157,12159,12161,12163,12165,12167,12169,12171,12173,12176,12178,12180,12182,12184],{"class":1052,"line":3299},[1050,12156,11969],{"class":1067},[1050,12158,1072],{"class":1071},[1050,12160,9434],{"class":1186},[1050,12162,1190],{"class":1071},[1050,12164,1280],{"class":1141},[1050,12166,11984],{"class":1197},[1050,12168,1287],{"class":1286},[1050,12170,11246],{"class":1186},[1050,12172,1293],{"class":1286},[1050,12174,12175],{"class":1197}," error: ",[1050,12177,1287],{"class":1286},[1050,12179,9455],{"class":1186},[1050,12181,1293],{"class":1286},[1050,12183,1296],{"class":1197},[1050,12185,1268],{"class":1071},[1050,12187,12188],{"class":1052,"line":3320},[1050,12189,12190],{"class":1063},"                raise\n",[1050,12192,12193],{"class":1052,"line":3344},[1050,12194,2412],{"class":1067},[1050,12196,12197,12199],{"class":1052,"line":3349},[1050,12198,4291],{"class":1063},[1050,12200,4294],{"class":1067},[1050,12202,12203,12205],{"class":1052,"line":3358},[1050,12204,3590],{"class":1063},[1050,12206,4301],{"class":1067},[1050,12208,12209],{"class":1052,"line":3364},[1050,12210,1129],{"emptyLinePlaceholder":1128},[1050,12212,12213],{"class":1052,"line":3382},[1050,12214,12215],{"class":1056},"# Monitored cache operations\n",[1050,12217,12218,12220,12223,12225,12227,12229,12231],{"class":1052,"line":3420},[1050,12219,4314],{"class":1071},[1050,12221,12222],{"class":1145},"monitored_cache_operation",[1050,12224,1190],{"class":1071},[1050,12226,1194],{"class":1193},[1050,12228,1257],{"class":1197},[1050,12230,1194],{"class":1193},[1050,12232,1268],{"class":1071},[1050,12234,12235,12237,12240,12242,12244,12246,12248,12250,12252],{"class":1052,"line":3436},[1050,12236,1142],{"class":1141},[1050,12238,12239],{"class":1145}," monitored_get",[1050,12241,1190],{"class":1071},[1050,12243,2092],{"class":2029},[1050,12245,1203],{"class":1071},[1050,12247,2045],{"class":2029},[1050,12249,1220],{"class":1390},[1050,12251,2147],{"class":2146},[1050,12253,2053],{"class":1071},[1050,12255,12256,12258,12260,12262,12264,12266,12268,12270,12272],{"class":1052,"line":3441},[1050,12257,3590],{"class":1063},[1050,12259,1252],{"class":1067},[1050,12261,1072],{"class":1071},[1050,12263,1257],{"class":1186},[1050,12265,1190],{"class":1071},[1050,12267,2092],{"class":1186},[1050,12269,1203],{"class":1071},[1050,12271,2045],{"class":1186},[1050,12273,1268],{"class":1071},[1050,12275,12276],{"class":1052,"line":3447},[1050,12277,1129],{"emptyLinePlaceholder":1128},[1050,12279,12280,12282,12284,12286,12288,12290,12292],{"class":1052,"line":3462},[1050,12281,4314],{"class":1071},[1050,12283,12222],{"class":1145},[1050,12285,1190],{"class":1071},[1050,12287,1194],{"class":1193},[1050,12289,1187],{"class":1197},[1050,12291,1194],{"class":1193},[1050,12293,1268],{"class":1071},[1050,12295,12296,12298,12301,12303,12305,12307,12309,12311,12313,12315,12317],{"class":1052,"line":3467},[1050,12297,1142],{"class":1141},[1050,12299,12300],{"class":1145}," monitored_set",[1050,12302,1190],{"class":1071},[1050,12304,2092],{"class":2029},[1050,12306,1203],{"class":1071},[1050,12308,2576],{"class":2029},[1050,12310,1203],{"class":1071},[1050,12312,1217],{"class":2029},[1050,12314,1220],{"class":1390},[1050,12316,2147],{"class":2146},[1050,12318,2053],{"class":1071},[1050,12320,12321,12323,12325,12327,12329,12331,12333,12335,12337,12339,12341],{"class":1052,"line":3473},[1050,12322,3590],{"class":1063},[1050,12324,1252],{"class":1067},[1050,12326,1072],{"class":1071},[1050,12328,1187],{"class":1186},[1050,12330,1190],{"class":1071},[1050,12332,2092],{"class":1186},[1050,12334,1203],{"class":1071},[1050,12336,2576],{"class":1186},[1050,12338,1203],{"class":1071},[1050,12340,1217],{"class":1186},[1050,12342,1268],{"class":1071},[1050,12344,12345],{"class":1052,"line":3485},[1050,12346,1129],{"emptyLinePlaceholder":1128},[1050,12348,12349,12351,12353,12355,12357,12359,12361],{"class":1052,"line":3490},[1050,12350,4314],{"class":1071},[1050,12352,12222],{"class":1145},[1050,12354,1190],{"class":1071},[1050,12356,1194],{"class":1193},[1050,12358,1434],{"class":1197},[1050,12360,1194],{"class":1193},[1050,12362,1268],{"class":1071},[1050,12364,12365,12367,12370,12372,12374],{"class":1052,"line":3496},[1050,12366,1142],{"class":1141},[1050,12368,12369],{"class":1145}," monitored_delete",[1050,12371,1190],{"class":1071},[1050,12373,2092],{"class":2029},[1050,12375,2053],{"class":1071},[1050,12377,12378,12380,12382,12384,12386,12388,12390],{"class":1052,"line":3523},[1050,12379,3590],{"class":1063},[1050,12381,1252],{"class":1067},[1050,12383,1072],{"class":1071},[1050,12385,1434],{"class":1186},[1050,12387,1190],{"class":1071},[1050,12389,2092],{"class":1186},[1050,12391,1268],{"class":1071},[1050,12393,12394],{"class":1052,"line":3546},[1050,12395,1129],{"emptyLinePlaceholder":1128},[1050,12397,12398],{"class":1052,"line":3551},[1050,12399,12400],{"class":1056},"# Cache debugging utilities\n",[1050,12402,12403,12405,12408],{"class":1052,"line":3557},[1050,12404,1991],{"class":1141},[1050,12406,12407],{"class":1994}," CacheDebugger",[1050,12409,1396],{"class":1071},[1050,12411,12412,12414,12417],{"class":1052,"line":3567},[1050,12413,1156],{"class":1155},[1050,12415,12416],{"class":1159},"Utilities for debugging cache issues.",[1050,12418,1163],{"class":1155},[1050,12420,12421],{"class":1052,"line":3587},[1050,12422,1169],{"class":1067},[1050,12424,12425,12427],{"class":1052,"line":3600},[1050,12426,11266],{"class":1071},[1050,12428,12429],{"class":2106},"staticmethod\n",[1050,12431,12432,12434,12437,12439,12441],{"class":1052,"line":3605},[1050,12433,2015],{"class":1141},[1050,12435,12436],{"class":1145}," inspect_cache_key",[1050,12438,1190],{"class":1071},[1050,12440,2092],{"class":2029},[1050,12442,2053],{"class":1071},[1050,12444,12445,12447,12450],{"class":1052,"line":3622},[1050,12446,2058],{"class":1155},[1050,12448,12449],{"class":1159},"Inspect cache key and its value.",[1050,12451,1163],{"class":1155},[1050,12453,12454,12456,12458,12460,12462,12464,12466,12468],{"class":1052,"line":3635},[1050,12455,2367],{"class":1067},[1050,12457,1220],{"class":1071},[1050,12459,1252],{"class":1067},[1050,12461,1072],{"class":1071},[1050,12463,1257],{"class":1186},[1050,12465,1190],{"class":1071},[1050,12467,2092],{"class":1186},[1050,12469,1268],{"class":1071},[1050,12471,12472],{"class":1052,"line":3643},[1050,12473,2412],{"class":1067},[1050,12475,12476,12479,12481],{"class":1052,"line":3654},[1050,12477,12478],{"class":1067},"        info ",[1050,12480,1220],{"class":1071},[1050,12482,4534],{"class":1071},[1050,12484,12485,12487,12489,12491,12493,12495],{"class":1052,"line":3659},[1050,12486,6878],{"class":1193},[1050,12488,2092],{"class":1197},[1050,12490,1194],{"class":1193},[1050,12492,1482],{"class":1071},[1050,12494,2030],{"class":1067},[1050,12496,1492],{"class":1071},[1050,12498,12499,12501,12504,12506,12508,12510,12512,12514,12516],{"class":1052,"line":3664},[1050,12500,6878],{"class":1193},[1050,12502,12503],{"class":1197},"exists",[1050,12505,1194],{"class":1193},[1050,12507,1482],{"class":1071},[1050,12509,2389],{"class":1067},[1050,12511,2392],{"class":1390},[1050,12513,2395],{"class":1390},[1050,12515,2398],{"class":2146},[1050,12517,1492],{"class":1071},[1050,12519,12520,12522,12525,12527,12529,12532,12534,12536,12538,12540,12542,12544,12546,12548,12550,12552,12554],{"class":1052,"line":3670},[1050,12521,6878],{"class":1193},[1050,12523,12524],{"class":1197},"value_type",[1050,12526,1194],{"class":1193},[1050,12528,1482],{"class":1071},[1050,12530,12531],{"class":2106}," type",[1050,12533,1190],{"class":1071},[1050,12535,1290],{"class":1186},[1050,12537,4088],{"class":1071},[1050,12539,4037],{"class":4036},[1050,12541,7016],{"class":1063},[1050,12543,2389],{"class":1067},[1050,12545,2392],{"class":1390},[1050,12547,2395],{"class":1390},[1050,12549,2398],{"class":2146},[1050,12551,7041],{"class":1063},[1050,12553,2398],{"class":2146},[1050,12555,1492],{"class":1071},[1050,12557,12558,12560,12563,12565,12567,12569,12571,12573,12575,12577,12579,12581,12583,12585,12587,12589,12591,12593],{"class":1052,"line":3683},[1050,12559,6878],{"class":1193},[1050,12561,12562],{"class":1197},"value_size",[1050,12564,1194],{"class":1193},[1050,12566,1482],{"class":1071},[1050,12568,11899],{"class":1274},[1050,12570,1190],{"class":1071},[1050,12572,7288],{"class":2106},[1050,12574,1190],{"class":1071},[1050,12576,1290],{"class":1186},[1050,12578,7038],{"class":1071},[1050,12580,7016],{"class":1063},[1050,12582,2389],{"class":1067},[1050,12584,2392],{"class":1390},[1050,12586,2395],{"class":1390},[1050,12588,2398],{"class":2146},[1050,12590,7041],{"class":1063},[1050,12592,4688],{"class":1223},[1050,12594,1492],{"class":1071},[1050,12596,12597],{"class":1052,"line":3695},[1050,12598,9610],{"class":1071},[1050,12600,12601],{"class":1052,"line":3736},[1050,12602,2412],{"class":1067},[1050,12604,12605],{"class":1052,"line":3764},[1050,12606,12607],{"class":1056},"        # Try to get TTL (Redis-specific)\n",[1050,12609,12610,12612],{"class":1052,"line":3774},[1050,12611,2068],{"class":1063},[1050,12613,1396],{"class":1071},[1050,12615,12616,12619,12622,12624],{"class":1052,"line":3779},[1050,12617,12618],{"class":1063},"            from",[1050,12620,12621],{"class":1067}," django_redis ",[1050,12623,1083],{"class":1063},[1050,12625,12626],{"class":1067}," get_redis_connection\n",[1050,12628,12629,12632,12634,12637,12639,12641,12644,12646],{"class":1052,"line":3784},[1050,12630,12631],{"class":1067},"            redis_conn ",[1050,12633,1220],{"class":1071},[1050,12635,12636],{"class":1186}," get_redis_connection",[1050,12638,1190],{"class":1071},[1050,12640,1296],{"class":1193},[1050,12642,12643],{"class":1197},"default",[1050,12645,1296],{"class":1193},[1050,12647,1268],{"class":1071},[1050,12649,12650,12653,12655,12658,12660,12663,12665,12667],{"class":1052,"line":3790},[1050,12651,12652],{"class":1067},"            ttl ",[1050,12654,1220],{"class":1071},[1050,12656,12657],{"class":1067}," redis_conn",[1050,12659,1072],{"class":1071},[1050,12661,12662],{"class":1186},"ttl",[1050,12664,1190],{"class":1071},[1050,12666,2092],{"class":1186},[1050,12668,1268],{"class":1071},[1050,12670,12671,12674,12676,12678,12680,12682,12684,12686,12689,12692,12694,12696,12698,12700],{"class":1052,"line":10379},[1050,12672,12673],{"class":1067},"            info",[1050,12675,1766],{"class":1071},[1050,12677,1194],{"class":1193},[1050,12679,12662],{"class":1197},[1050,12681,1194],{"class":1193},[1050,12683,4682],{"class":1071},[1050,12685,4237],{"class":1071},[1050,12687,12688],{"class":1067}," ttl ",[1050,12690,12691],{"class":1063},"if",[1050,12693,12688],{"class":1067},[1050,12695,5305],{"class":1390},[1050,12697,4688],{"class":1223},[1050,12699,7041],{"class":1063},[1050,12701,5384],{"class":2146},[1050,12703,12704,12706],{"class":1052,"line":10392},[1050,12705,2103],{"class":1063},[1050,12707,1396],{"class":1071},[1050,12709,12710,12712,12714,12716,12718,12720,12722,12724,12726,12729],{"class":1052,"line":10398},[1050,12711,12673],{"class":1067},[1050,12713,1766],{"class":1071},[1050,12715,1194],{"class":1193},[1050,12717,12662],{"class":1197},[1050,12719,1194],{"class":1193},[1050,12721,4682],{"class":1071},[1050,12723,4237],{"class":1071},[1050,12725,1206],{"class":1193},[1050,12727,12728],{"class":1197},"unknown",[1050,12730,1533],{"class":1193},[1050,12732,12733],{"class":1052,"line":10403},[1050,12734,2412],{"class":1067},[1050,12736,12737,12739],{"class":1052,"line":10457},[1050,12738,4291],{"class":1063},[1050,12740,12741],{"class":1067}," info\n",[1050,12743,12744],{"class":1052,"line":10462},[1050,12745,1169],{"class":1067},[1050,12747,12748,12750],{"class":1052,"line":10476},[1050,12749,11266],{"class":1071},[1050,12751,12429],{"class":2106},[1050,12753,12754,12756,12759,12761,12764,12766,12768,12770,12772],{"class":1052,"line":10482},[1050,12755,2015],{"class":1141},[1050,12757,12758],{"class":1145}," list_cache_keys",[1050,12760,1190],{"class":1071},[1050,12762,12763],{"class":2029},"pattern",[1050,12765,1220],{"class":1390},[1050,12767,1296],{"class":1193},[1050,12769,3949],{"class":1197},[1050,12771,1296],{"class":1193},[1050,12773,2053],{"class":1071},[1050,12775,12776,12778,12781],{"class":1052,"line":10509},[1050,12777,2058],{"class":1155},[1050,12779,12780],{"class":1159},"List cache keys matching pattern (Redis-specific).",[1050,12782,1163],{"class":1155},[1050,12784,12785,12787],{"class":1052,"line":10540},[1050,12786,2068],{"class":1063},[1050,12788,1396],{"class":1071},[1050,12790,12791,12793,12795,12797],{"class":1052,"line":10550},[1050,12792,12618],{"class":1063},[1050,12794,12621],{"class":1067},[1050,12796,1083],{"class":1063},[1050,12798,12626],{"class":1067},[1050,12800,12801,12803,12805,12807,12809,12811,12813,12815],{"class":1052,"line":10558},[1050,12802,12631],{"class":1067},[1050,12804,1220],{"class":1071},[1050,12806,12636],{"class":1186},[1050,12808,1190],{"class":1071},[1050,12810,1296],{"class":1193},[1050,12812,12643],{"class":1197},[1050,12814,1296],{"class":1193},[1050,12816,1268],{"class":1071},[1050,12818,12819,12822,12824,12826,12828,12831,12833,12835],{"class":1052,"line":10563},[1050,12820,12821],{"class":1067},"            keys ",[1050,12823,1220],{"class":1071},[1050,12825,12657],{"class":1067},[1050,12827,1072],{"class":1071},[1050,12829,12830],{"class":1186},"keys",[1050,12832,1190],{"class":1071},[1050,12834,12763],{"class":1186},[1050,12836,1268],{"class":1071},[1050,12838,12839,12841,12843,12845,12847,12850,12852,12854,12856,12858,12860,12862,12865,12867,12869,12871,12873,12875,12877,12880],{"class":1052,"line":10569},[1050,12840,2080],{"class":1063},[1050,12842,8640],{"class":1071},[1050,12844,2092],{"class":1067},[1050,12846,1072],{"class":1071},[1050,12848,12849],{"class":1186},"decode",[1050,12851,4094],{"class":1071},[1050,12853,7016],{"class":1063},[1050,12855,7019],{"class":1274},[1050,12857,1190],{"class":1071},[1050,12859,2092],{"class":1186},[1050,12861,1203],{"class":1071},[1050,12863,12864],{"class":2106}," bytes",[1050,12866,1227],{"class":1071},[1050,12868,7041],{"class":1063},[1050,12870,3411],{"class":1067},[1050,12872,8753],{"class":1063},[1050,12874,3411],{"class":1067},[1050,12876,2781],{"class":1063},[1050,12878,12879],{"class":1067}," keys",[1050,12881,1776],{"class":1071},[1050,12883,12884,12886],{"class":1052,"line":10576},[1050,12885,2103],{"class":1063},[1050,12887,1396],{"class":1071},[1050,12889,12890,12892],{"class":1052,"line":10581},[1050,12891,2080],{"class":1063},[1050,12893,12894],{"class":1071}," []\n",[1050,12896,12897],{"class":1052,"line":10591},[1050,12898,1169],{"class":1067},[1050,12900,12901,12903],{"class":1052,"line":10601},[1050,12902,11266],{"class":1071},[1050,12904,12429],{"class":2106},[1050,12906,12907,12909,12912],{"class":1052,"line":10615},[1050,12908,2015],{"class":1141},[1050,12910,12911],{"class":1145}," cache_memory_usage",[1050,12913,1149],{"class":1071},[1050,12915,12916,12918,12921],{"class":1052,"line":10620},[1050,12917,2058],{"class":1155},[1050,12919,12920],{"class":1159},"Get cache memory usage information (Redis-specific).",[1050,12922,1163],{"class":1155},[1050,12924,12925,12927],{"class":1052,"line":10627},[1050,12926,2068],{"class":1063},[1050,12928,1396],{"class":1071},[1050,12930,12931,12933,12935,12937],{"class":1052,"line":10657},[1050,12932,12618],{"class":1063},[1050,12934,12621],{"class":1067},[1050,12936,1083],{"class":1063},[1050,12938,12626],{"class":1067},[1050,12940,12941,12943,12945,12947,12949,12951,12953,12955],{"class":1052,"line":10674},[1050,12942,12631],{"class":1067},[1050,12944,1220],{"class":1071},[1050,12946,12636],{"class":1186},[1050,12948,1190],{"class":1071},[1050,12950,1296],{"class":1193},[1050,12952,12643],{"class":1197},[1050,12954,1296],{"class":1193},[1050,12956,1268],{"class":1071},[1050,12958,12959,12962,12964,12966,12968,12971,12973,12975,12978,12980],{"class":1052,"line":10679},[1050,12960,12961],{"class":1067},"            info ",[1050,12963,1220],{"class":1071},[1050,12965,12657],{"class":1067},[1050,12967,1072],{"class":1071},[1050,12969,12970],{"class":1186},"info",[1050,12972,1190],{"class":1071},[1050,12974,1194],{"class":1193},[1050,12976,12977],{"class":1197},"memory",[1050,12979,1194],{"class":1193},[1050,12981,1268],{"class":1071},[1050,12983,12984,12986],{"class":1052,"line":10692},[1050,12985,2080],{"class":1063},[1050,12987,4534],{"class":1071},[1050,12989,12990,12992,12995,12997,12999,13002,13004,13006,13008,13010,13012,13014],{"class":1052,"line":10698},[1050,12991,9153],{"class":1193},[1050,12993,12994],{"class":1197},"used_memory",[1050,12996,1194],{"class":1193},[1050,12998,1482],{"class":1071},[1050,13000,13001],{"class":1067}," info",[1050,13003,1072],{"class":1071},[1050,13005,1257],{"class":1186},[1050,13007,1190],{"class":1071},[1050,13009,1194],{"class":1193},[1050,13011,12994],{"class":1197},[1050,13013,1194],{"class":1193},[1050,13015,8258],{"class":1071},[1050,13017,13018,13020,13023,13025,13027,13029,13031,13033,13035,13037,13039,13041],{"class":1052,"line":10705},[1050,13019,9153],{"class":1193},[1050,13021,13022],{"class":1197},"used_memory_human",[1050,13024,1194],{"class":1193},[1050,13026,1482],{"class":1071},[1050,13028,13001],{"class":1067},[1050,13030,1072],{"class":1071},[1050,13032,1257],{"class":1186},[1050,13034,1190],{"class":1071},[1050,13036,1194],{"class":1193},[1050,13038,13022],{"class":1197},[1050,13040,1194],{"class":1193},[1050,13042,8258],{"class":1071},[1050,13044,13045,13047,13050,13052,13054,13056,13058,13060,13062,13064,13066,13068],{"class":1052,"line":10726},[1050,13046,9153],{"class":1193},[1050,13048,13049],{"class":1197},"used_memory_peak",[1050,13051,1194],{"class":1193},[1050,13053,1482],{"class":1071},[1050,13055,13001],{"class":1067},[1050,13057,1072],{"class":1071},[1050,13059,1257],{"class":1186},[1050,13061,1190],{"class":1071},[1050,13063,1194],{"class":1193},[1050,13065,13049],{"class":1197},[1050,13067,1194],{"class":1193},[1050,13069,8258],{"class":1071},[1050,13071,13072,13074,13077,13079,13081,13083,13085,13087,13089,13091,13093,13095],{"class":1052,"line":10740},[1050,13073,9153],{"class":1193},[1050,13075,13076],{"class":1197},"used_memory_peak_human",[1050,13078,1194],{"class":1193},[1050,13080,1482],{"class":1071},[1050,13082,13001],{"class":1067},[1050,13084,1072],{"class":1071},[1050,13086,1257],{"class":1186},[1050,13088,1190],{"class":1071},[1050,13090,1194],{"class":1193},[1050,13092,13076],{"class":1197},[1050,13094,1194],{"class":1193},[1050,13096,8258],{"class":1071},[1050,13098,13099],{"class":1052,"line":10757},[1050,13100,9310],{"class":1071},[1050,13102,13103,13105],{"class":1052,"line":10774},[1050,13104,2103],{"class":1063},[1050,13106,1396],{"class":1071},[1050,13108,13109,13111],{"class":1052,"line":10789},[1050,13110,2080],{"class":1063},[1050,13112,13113],{"class":1071}," {}\n",[1050,13115,13116],{"class":1052,"line":10794},[1050,13117,1129],{"emptyLinePlaceholder":1128},[1050,13119,13121],{"class":1052,"line":13120},174,[1050,13122,13123],{"class":1056},"# Management command for cache monitoring\n",[1050,13125,13127,13129,13131,13133,13135,13137,13140,13142,13145,13147],{"class":1052,"line":13126},175,[1050,13128,1064],{"class":1063},[1050,13130,1068],{"class":1067},[1050,13132,1072],{"class":1071},[1050,13134,1075],{"class":1067},[1050,13136,1072],{"class":1071},[1050,13138,13139],{"class":1067},"management",[1050,13141,1072],{"class":1071},[1050,13143,13144],{"class":1067},"base ",[1050,13146,1083],{"class":1063},[1050,13148,13149],{"class":1067}," BaseCommand\n",[1050,13151,13153],{"class":1052,"line":13152},176,[1050,13154,1129],{"emptyLinePlaceholder":1128},[1050,13156,13158,13160,13163,13165,13169],{"class":1052,"line":13157},177,[1050,13159,1991],{"class":1141},[1050,13161,13162],{"class":1994}," Command",[1050,13164,1190],{"class":1071},[1050,13166,13168],{"class":13167},"sYn-s","BaseCommand",[1050,13170,2053],{"class":1071},[1050,13172,13174,13177,13179,13181,13184],{"class":1052,"line":13173},178,[1050,13175,13176],{"class":1274},"    help",[1050,13178,4237],{"class":1071},[1050,13180,1206],{"class":1193},[1050,13182,13183],{"class":1197},"Monitor cache performance",[1050,13185,1533],{"class":1193},[1050,13187,13189],{"class":1052,"line":13188},179,[1050,13190,1169],{"class":1067},[1050,13192,13194,13196,13199,13201,13203,13205,13208],{"class":1052,"line":13193},180,[1050,13195,2015],{"class":1141},[1050,13197,13198],{"class":1145}," add_arguments",[1050,13200,1190],{"class":1071},[1050,13202,2024],{"class":2023},[1050,13204,1203],{"class":1071},[1050,13206,13207],{"class":2029}," parser",[1050,13209,2053],{"class":1071},[1050,13211,13213,13216,13218,13221],{"class":1052,"line":13212},181,[1050,13214,13215],{"class":1067},"        parser",[1050,13217,1072],{"class":1071},[1050,13219,13220],{"class":1186},"add_argument",[1050,13222,3619],{"class":1071},[1050,13224,13226,13228,13231,13233],{"class":1052,"line":13225},182,[1050,13227,6878],{"class":1193},[1050,13229,13230],{"class":1197},"--reset",[1050,13232,1194],{"class":1193},[1050,13234,1492],{"class":1071},[1050,13236,13238,13241,13243,13245,13248,13250],{"class":1052,"line":13237},183,[1050,13239,13240],{"class":1216},"            action",[1050,13242,1220],{"class":1071},[1050,13244,1194],{"class":1193},[1050,13246,13247],{"class":1197},"store_true",[1050,13249,1194],{"class":1193},[1050,13251,1492],{"class":1071},[1050,13253,13255,13258,13260,13262,13265],{"class":1052,"line":13254},184,[1050,13256,13257],{"class":1216},"            help",[1050,13259,1220],{"class":1071},[1050,13261,1194],{"class":1193},[1050,13263,13264],{"class":1197},"Reset cache statistics",[1050,13266,1533],{"class":1193},[1050,13268,13270],{"class":1052,"line":13269},185,[1050,13271,10395],{"class":1071},[1050,13273,13275,13277,13279,13281],{"class":1052,"line":13274},186,[1050,13276,13215],{"class":1067},[1050,13278,1072],{"class":1071},[1050,13280,13220],{"class":1186},[1050,13282,3619],{"class":1071},[1050,13284,13286,13288,13291,13293],{"class":1052,"line":13285},187,[1050,13287,6878],{"class":1193},[1050,13289,13290],{"class":1197},"--inspect",[1050,13292,1194],{"class":1193},[1050,13294,1492],{"class":1071},[1050,13296,13298,13301,13303,13305],{"class":1052,"line":13297},188,[1050,13299,13300],{"class":1216},"            type",[1050,13302,1220],{"class":1071},[1050,13304,7288],{"class":2106},[1050,13306,1492],{"class":1071},[1050,13308,13310,13312,13314,13316,13319],{"class":1052,"line":13309},189,[1050,13311,13257],{"class":1216},[1050,13313,1220],{"class":1071},[1050,13315,1194],{"class":1193},[1050,13317,13318],{"class":1197},"Inspect specific cache key",[1050,13320,1533],{"class":1193},[1050,13322,13324],{"class":1052,"line":13323},190,[1050,13325,10395],{"class":1071},[1050,13327,13329],{"class":1052,"line":13328},191,[1050,13330,1169],{"class":1067},[1050,13332,13334,13336,13339,13341,13343,13345,13347,13349,13351,13353,13356],{"class":1052,"line":13333},192,[1050,13335,2015],{"class":1141},[1050,13337,13338],{"class":1145}," handle",[1050,13340,1190],{"class":1071},[1050,13342,2024],{"class":2023},[1050,13344,1203],{"class":1071},[1050,13346,11384],{"class":1390},[1050,13348,3952],{"class":2029},[1050,13350,1203],{"class":1071},[1050,13352,3957],{"class":1390},[1050,13354,13355],{"class":2029},"options",[1050,13357,2053],{"class":1071},[1050,13359,13361,13363,13366,13368,13370,13373,13375],{"class":1052,"line":13360},193,[1050,13362,2386],{"class":1063},[1050,13364,13365],{"class":1067}," options",[1050,13367,1766],{"class":1071},[1050,13369,1194],{"class":1193},[1050,13371,13372],{"class":1197},"reset",[1050,13374,1194],{"class":1193},[1050,13376,11226],{"class":1071},[1050,13378,13380,13383,13385,13388],{"class":1052,"line":13379},194,[1050,13381,13382],{"class":1067},"            cache_monitor",[1050,13384,1072],{"class":1071},[1050,13386,13387],{"class":1186},"reset_stats",[1050,13389,2558],{"class":1071},[1050,13391,13393,13395,13397,13400,13402,13405,13407,13409,13412,13414],{"class":1052,"line":13392},195,[1050,13394,11231],{"class":2656},[1050,13396,1072],{"class":1071},[1050,13398,13399],{"class":4233},"stdout",[1050,13401,1072],{"class":1071},[1050,13403,13404],{"class":1186},"write",[1050,13406,1190],{"class":1071},[1050,13408,1194],{"class":1193},[1050,13410,13411],{"class":1197},"Cache statistics reset",[1050,13413,1194],{"class":1193},[1050,13415,1268],{"class":1071},[1050,13417,13419],{"class":1052,"line":13418},196,[1050,13420,13421],{"class":1063},"            return\n",[1050,13423,13425],{"class":1052,"line":13424},197,[1050,13426,2412],{"class":1067},[1050,13428,13430,13432,13434,13436,13438,13441,13443],{"class":1052,"line":13429},198,[1050,13431,2386],{"class":1063},[1050,13433,13365],{"class":1067},[1050,13435,1766],{"class":1071},[1050,13437,1194],{"class":1193},[1050,13439,13440],{"class":1197},"inspect",[1050,13442,1194],{"class":1193},[1050,13444,11226],{"class":1071},[1050,13446,13448,13451,13453,13455,13457,13459,13461,13463],{"class":1052,"line":13447},199,[1050,13449,13450],{"class":1067},"            key ",[1050,13452,1220],{"class":1071},[1050,13454,13365],{"class":1067},[1050,13456,1766],{"class":1071},[1050,13458,1194],{"class":1193},[1050,13460,13440],{"class":1197},[1050,13462,1194],{"class":1193},[1050,13464,1776],{"class":1071},[1050,13466,13468,13470,13472,13474,13476,13479,13481,13483],{"class":1052,"line":13467},200,[1050,13469,12961],{"class":1067},[1050,13471,1220],{"class":1071},[1050,13473,12407],{"class":1067},[1050,13475,1072],{"class":1071},[1050,13477,13478],{"class":1186},"inspect_cache_key",[1050,13480,1190],{"class":1071},[1050,13482,2092],{"class":1186},[1050,13484,1268],{"class":1071},[1050,13486,13488,13490,13492,13494,13496,13498,13500,13502,13505,13507,13509,13511,13513],{"class":1052,"line":13487},201,[1050,13489,11231],{"class":2656},[1050,13491,1072],{"class":1071},[1050,13493,13399],{"class":4233},[1050,13495,1072],{"class":1071},[1050,13497,13404],{"class":1186},[1050,13499,1190],{"class":1071},[1050,13501,1280],{"class":1141},[1050,13503,13504],{"class":1197},"\"Cache key inspection: ",[1050,13506,1287],{"class":1286},[1050,13508,2092],{"class":1186},[1050,13510,1293],{"class":1286},[1050,13512,1296],{"class":1197},[1050,13514,1268],{"class":1071},[1050,13516,13518,13521,13523,13525,13527,13529,13531,13533,13535],{"class":1052,"line":13517},202,[1050,13519,13520],{"class":1063},"            for",[1050,13522,8756],{"class":1067},[1050,13524,1203],{"class":1071},[1050,13526,8750],{"class":1067},[1050,13528,2781],{"class":1063},[1050,13530,13001],{"class":1067},[1050,13532,1072],{"class":1071},[1050,13534,4056],{"class":1186},[1050,13536,1149],{"class":1071},[1050,13538,13540,13542,13544,13546,13548,13550,13552,13554,13557,13559,13561,13563,13565,13567,13570,13572,13574],{"class":1052,"line":13539},203,[1050,13541,11152],{"class":2656},[1050,13543,1072],{"class":1071},[1050,13545,13399],{"class":4233},[1050,13547,1072],{"class":1071},[1050,13549,13404],{"class":1186},[1050,13551,1190],{"class":1071},[1050,13553,1280],{"class":1141},[1050,13555,13556],{"class":1197},"\"  ",[1050,13558,1287],{"class":1286},[1050,13560,8745],{"class":1186},[1050,13562,1293],{"class":1286},[1050,13564,11993],{"class":1197},[1050,13566,1287],{"class":1286},[1050,13568,13569],{"class":1186},"v",[1050,13571,1293],{"class":1286},[1050,13573,1296],{"class":1197},[1050,13575,1268],{"class":1071},[1050,13577,13579],{"class":1052,"line":13578},204,[1050,13580,13421],{"class":1063},[1050,13582,13584],{"class":1052,"line":13583},205,[1050,13585,2412],{"class":1067},[1050,13587,13589],{"class":1052,"line":13588},206,[1050,13590,13591],{"class":1056},"        # Show current statistics\n",[1050,13593,13595,13598,13600,13603,13605,13608],{"class":1052,"line":13594},207,[1050,13596,13597],{"class":1067},"        stats ",[1050,13599,1220],{"class":1071},[1050,13601,13602],{"class":1067}," cache_monitor",[1050,13604,1072],{"class":1071},[1050,13606,13607],{"class":1186},"get_stats",[1050,13609,2558],{"class":1071},[1050,13611,13613,13615,13617,13619,13621,13623,13625,13627,13630,13632],{"class":1052,"line":13612},208,[1050,13614,4875],{"class":2656},[1050,13616,1072],{"class":1071},[1050,13618,13399],{"class":4233},[1050,13620,1072],{"class":1071},[1050,13622,13404],{"class":1186},[1050,13624,1190],{"class":1071},[1050,13626,1194],{"class":1193},[1050,13628,13629],{"class":1197},"Cache Performance Statistics:",[1050,13631,1194],{"class":1193},[1050,13633,1268],{"class":1071},[1050,13635,13637,13639,13641,13643,13645,13647,13649,13651,13654,13656,13658,13660,13662,13664,13666,13668,13671,13673,13676],{"class":1052,"line":13636},209,[1050,13638,4875],{"class":2656},[1050,13640,1072],{"class":1071},[1050,13642,13399],{"class":4233},[1050,13644,1072],{"class":1071},[1050,13646,13404],{"class":1186},[1050,13648,1190],{"class":1071},[1050,13650,1280],{"class":1141},[1050,13652,13653],{"class":1197},"\"  Hit rate: ",[1050,13655,1287],{"class":1286},[1050,13657,10929],{"class":1186},[1050,13659,1766],{"class":1071},[1050,13661,1194],{"class":1193},[1050,13663,11542],{"class":1197},[1050,13665,1194],{"class":1193},[1050,13667,4682],{"class":1071},[1050,13669,13670],{"class":1141},":.2f",[1050,13672,1293],{"class":1286},[1050,13674,13675],{"class":1197},"%\"",[1050,13677,1268],{"class":1071},[1050,13679,13681,13683,13685,13687,13689,13691,13693,13695,13698,13700,13702,13704,13706,13708,13710,13712,13714,13716],{"class":1052,"line":13680},210,[1050,13682,4875],{"class":2656},[1050,13684,1072],{"class":1071},[1050,13686,13399],{"class":4233},[1050,13688,1072],{"class":1071},[1050,13690,13404],{"class":1186},[1050,13692,1190],{"class":1071},[1050,13694,1280],{"class":1141},[1050,13696,13697],{"class":1197},"\"  Total operations: ",[1050,13699,1287],{"class":1286},[1050,13701,10929],{"class":1186},[1050,13703,1766],{"class":1071},[1050,13705,1194],{"class":1193},[1050,13707,11015],{"class":1197},[1050,13709,1194],{"class":1193},[1050,13711,4682],{"class":1071},[1050,13713,1293],{"class":1286},[1050,13715,1296],{"class":1197},[1050,13717,1268],{"class":1071},[1050,13719,13721,13723,13725,13727,13729,13731,13733,13735,13738,13740,13742,13744,13746,13748,13750,13752,13754,13756],{"class":1052,"line":13720},211,[1050,13722,4875],{"class":2656},[1050,13724,1072],{"class":1071},[1050,13726,13399],{"class":4233},[1050,13728,1072],{"class":1071},[1050,13730,13404],{"class":1186},[1050,13732,1190],{"class":1071},[1050,13734,1280],{"class":1141},[1050,13736,13737],{"class":1197},"\"  Hits: ",[1050,13739,1287],{"class":1286},[1050,13741,10929],{"class":1186},[1050,13743,1766],{"class":1071},[1050,13745,1194],{"class":1193},[1050,13747,10940],{"class":1197},[1050,13749,1194],{"class":1193},[1050,13751,4682],{"class":1071},[1050,13753,1293],{"class":1286},[1050,13755,1296],{"class":1197},[1050,13757,1268],{"class":1071},[1050,13759,13761,13763,13765,13767,13769,13771,13773,13775,13778,13780,13782,13784,13786,13788,13790,13792,13794,13796],{"class":1052,"line":13760},212,[1050,13762,4875],{"class":2656},[1050,13764,1072],{"class":1071},[1050,13766,13399],{"class":4233},[1050,13768,1072],{"class":1071},[1050,13770,13404],{"class":1186},[1050,13772,1190],{"class":1071},[1050,13774,1280],{"class":1141},[1050,13776,13777],{"class":1197},"\"  Misses: ",[1050,13779,1287],{"class":1286},[1050,13781,10929],{"class":1186},[1050,13783,1766],{"class":1071},[1050,13785,1194],{"class":1193},[1050,13787,10955],{"class":1197},[1050,13789,1194],{"class":1193},[1050,13791,4682],{"class":1071},[1050,13793,1293],{"class":1286},[1050,13795,1296],{"class":1197},[1050,13797,1268],{"class":1071},[1050,13799,13801,13803,13805,13807,13809,13811,13813,13815,13818,13820,13822,13824,13826,13828,13830,13832,13834,13836],{"class":1052,"line":13800},213,[1050,13802,4875],{"class":2656},[1050,13804,1072],{"class":1071},[1050,13806,13399],{"class":4233},[1050,13808,1072],{"class":1071},[1050,13810,13404],{"class":1186},[1050,13812,1190],{"class":1071},[1050,13814,1280],{"class":1141},[1050,13816,13817],{"class":1197},"\"  Sets: ",[1050,13819,1287],{"class":1286},[1050,13821,10929],{"class":1186},[1050,13823,1766],{"class":1071},[1050,13825,1194],{"class":1193},[1050,13827,10970],{"class":1197},[1050,13829,1194],{"class":1193},[1050,13831,4682],{"class":1071},[1050,13833,1293],{"class":1286},[1050,13835,1296],{"class":1197},[1050,13837,1268],{"class":1071},[1050,13839,13841,13843,13845,13847,13849,13851,13853,13855,13858,13860,13862,13864,13866,13868,13870,13872,13874,13876],{"class":1052,"line":13840},214,[1050,13842,4875],{"class":2656},[1050,13844,1072],{"class":1071},[1050,13846,13399],{"class":4233},[1050,13848,1072],{"class":1071},[1050,13850,13404],{"class":1186},[1050,13852,1190],{"class":1071},[1050,13854,1280],{"class":1141},[1050,13856,13857],{"class":1197},"\"  Deletes: ",[1050,13859,1287],{"class":1286},[1050,13861,10929],{"class":1186},[1050,13863,1766],{"class":1071},[1050,13865,1194],{"class":1193},[1050,13867,10985],{"class":1197},[1050,13869,1194],{"class":1193},[1050,13871,4682],{"class":1071},[1050,13873,1293],{"class":1286},[1050,13875,1296],{"class":1197},[1050,13877,1268],{"class":1071},[1050,13879,13881,13883,13885,13887,13889,13891,13893,13895,13898,13900,13902,13904,13906,13908,13910,13912,13914,13916,13918],{"class":1052,"line":13880},215,[1050,13882,4875],{"class":2656},[1050,13884,1072],{"class":1071},[1050,13886,13399],{"class":4233},[1050,13888,1072],{"class":1071},[1050,13890,13404],{"class":1186},[1050,13892,1190],{"class":1071},[1050,13894,1280],{"class":1141},[1050,13896,13897],{"class":1197},"\"  Average time: ",[1050,13899,1287],{"class":1286},[1050,13901,10929],{"class":1186},[1050,13903,1766],{"class":1071},[1050,13905,1194],{"class":1193},[1050,13907,11561],{"class":1197},[1050,13909,1194],{"class":1193},[1050,13911,4682],{"class":1071},[1050,13913,12038],{"class":1141},[1050,13915,1293],{"class":1286},[1050,13917,11251],{"class":1197},[1050,13919,1268],{"class":1071},[1050,13921,13923],{"class":1052,"line":13922},216,[1050,13924,2412],{"class":1067},[1050,13926,13928],{"class":1052,"line":13927},217,[1050,13929,13930],{"class":1056},"        # Memory usage\n",[1050,13932,13934,13937,13939,13941,13943,13946],{"class":1052,"line":13933},218,[1050,13935,13936],{"class":1067},"        memory_info ",[1050,13938,1220],{"class":1071},[1050,13940,12407],{"class":1067},[1050,13942,1072],{"class":1071},[1050,13944,13945],{"class":1186},"cache_memory_usage",[1050,13947,2558],{"class":1071},[1050,13949,13951,13953,13956],{"class":1052,"line":13950},219,[1050,13952,2386],{"class":1063},[1050,13954,13955],{"class":1067}," memory_info",[1050,13957,1396],{"class":1071},[1050,13959,13961,13963,13965,13967,13969,13971,13973,13975,13978,13981,13983],{"class":1052,"line":13960},220,[1050,13962,11231],{"class":2656},[1050,13964,1072],{"class":1071},[1050,13966,13399],{"class":4233},[1050,13968,1072],{"class":1071},[1050,13970,13404],{"class":1186},[1050,13972,1190],{"class":1071},[1050,13974,1194],{"class":1193},[1050,13976,13977],{"class":2656},"\\n",[1050,13979,13980],{"class":1197},"Memory Usage:",[1050,13982,1194],{"class":1193},[1050,13984,1268],{"class":1071},[1050,13986,13988,13990,13992,13994,13996,13998,14000,14002,14004],{"class":1052,"line":13987},221,[1050,13989,13520],{"class":1063},[1050,13991,8756],{"class":1067},[1050,13993,1203],{"class":1071},[1050,13995,8750],{"class":1067},[1050,13997,2781],{"class":1063},[1050,13999,13955],{"class":1067},[1050,14001,1072],{"class":1071},[1050,14003,4056],{"class":1186},[1050,14005,1149],{"class":1071},[1050,14007,14009,14011,14013,14015,14017,14019,14021,14023,14025,14027,14029,14031,14033,14035,14037,14039,14041],{"class":1052,"line":14008},222,[1050,14010,11152],{"class":2656},[1050,14012,1072],{"class":1071},[1050,14014,13399],{"class":4233},[1050,14016,1072],{"class":1071},[1050,14018,13404],{"class":1186},[1050,14020,1190],{"class":1071},[1050,14022,1280],{"class":1141},[1050,14024,13556],{"class":1197},[1050,14026,1287],{"class":1286},[1050,14028,8745],{"class":1186},[1050,14030,1293],{"class":1286},[1050,14032,11993],{"class":1197},[1050,14034,1287],{"class":1286},[1050,14036,13569],{"class":1186},[1050,14038,1293],{"class":1286},[1050,14040,1296],{"class":1197},[1050,14042,1268],{"class":1071},[1026,14044,14045],{},"Django's low-level cache API provides powerful tools for implementing sophisticated caching strategies. The key is understanding when to use each pattern and implementing proper monitoring to ensure cache effectiveness. Start with simple get/set operations and gradually implement more advanced patterns like memoization, cache-aside, and write-through as your application's caching needs become more complex.",[14047,14048,14049],"style",{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s131V, html code.shiki .s131V{--shiki-light:#90A4AE;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}",{"title":1045,"searchDepth":1053,"depth":1060,"links":14051},[14052,14056,14061,14065],{"id":1032,"depth":1060,"text":1033,"children":14053},[14054,14055],{"id":1037,"depth":1089,"text":1038},{"id":1939,"depth":1089,"text":1940},{"id":3810,"depth":1060,"text":3811,"children":14057},[14058,14059,14060],{"id":3814,"depth":1089,"text":3815},{"id":4754,"depth":1089,"text":4755},{"id":5683,"depth":1089,"text":5684},{"id":6647,"depth":1060,"text":6648,"children":14062},[14063,14064],{"id":6651,"depth":1089,"text":6652},{"id":8456,"depth":1089,"text":8457},{"id":10799,"depth":1060,"text":10800,"children":14066},[14067],{"id":10803,"depth":1089,"text":10804},"md",null,{},{"title":691,"description":1028},"rZZdm2_7mo2yPM9ZulgCwAoM0gYaFPU-fdpQoprpVrs",[14074,14076],{"title":687,"path":688,"stem":689,"description":14075,"children":-1},"View-level caching is one of the most effective ways to improve Django application performance by caching entire HTTP responses. This approach eliminates the need to execute view logic, database queries, and template rendering for cached responses, providing dramatic performance improvements for content that doesn't change frequently.",{"title":695,"path":696,"stem":697,"description":14077,"children":-1},"Template fragment caching allows you to cache specific portions of templates rather than entire pages, providing fine-grained control over what gets cached and when. This approach is particularly effective for templates with mixed dynamic and static content, enabling you to cache expensive template fragments while keeping other parts dynamic and personalized.",1772474947790]