All Projects → noripyt → Django Cachalot

noripyt / Django Cachalot

Licence: bsd-3-clause
No effort, no worry, maximum performance.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Django Cachalot

Laravel Responsecache
Speed up a Laravel app by caching the entire response
Stars: ✭ 1,874 (+137.22%)
Mutual labels:  cache, performance
Ristretto
A high performance memory-bound Go cache
Stars: ✭ 3,584 (+353.67%)
Mutual labels:  cache, performance
Fragment Cache
WordPress plugin for partial and async caching.
Stars: ✭ 135 (-82.91%)
Mutual labels:  cache, performance
Quitnow Cache
A collection to store data for a given time
Stars: ✭ 109 (-86.2%)
Mutual labels:  cache, performance
Ring
Python cache interface with clean API and built-in memcache & redis + asyncio support.
Stars: ✭ 404 (-48.86%)
Mutual labels:  cache, django
Laravel Blink
Cache that expires in the blink of an eye
Stars: ✭ 114 (-85.57%)
Mutual labels:  cache, performance
Laravel Partialcache
Blade directive to cache rendered partials in laravel
Stars: ✭ 205 (-74.05%)
Mutual labels:  cache, performance
Ansible Role Memcached
Ansible Role - Memcached
Stars: ✭ 54 (-93.16%)
Mutual labels:  cache, performance
Django Watchman
django-watchman exposes a status endpoint for your backing services like databases, caches, etc.
Stars: ✭ 357 (-54.81%)
Mutual labels:  cache, django
Collectfast
A faster collectstatic command.
Stars: ✭ 352 (-55.44%)
Mutual labels:  django, performance
Fast React Render
[DEPRECATED] Use last versions of React and Node.js for better performance
Stars: ✭ 102 (-87.09%)
Mutual labels:  cache, performance
React Esi
React ESI: Blazing-fast Server-Side Rendering for React and Next.js
Stars: ✭ 537 (-32.03%)
Mutual labels:  cache, performance
Django Qsessions
Extended session backends for Django (Sessions store IP, User Agent, and foreign key to User)
Stars: ✭ 64 (-91.9%)
Mutual labels:  cache, django
Craft Blitz
Intelligent static page caching for creating lightning-fast sites with Craft CMS.
Stars: ✭ 118 (-85.06%)
Mutual labels:  cache, performance
Kirby3 Autoid
Automatic unique ID for Pages, Files and Structures including performant helpers to retrieve them. Bonus: Tiny-URL.
Stars: ✭ 58 (-92.66%)
Mutual labels:  cache, performance
Scaffeine
Thin Scala wrapper for Caffeine (https://github.com/ben-manes/caffeine)
Stars: ✭ 195 (-75.32%)
Mutual labels:  cache, performance
Wordpress Rest Cache
WordPress Plugin to lazy cache HTTP requests in database and update via cron.
Stars: ✭ 8 (-98.99%)
Mutual labels:  cache, performance
Pomodoro
A simple WordPress translation cache
Stars: ✭ 47 (-94.05%)
Mutual labels:  cache, performance
Guzzle Cache Middleware
A HTTP Cache for Guzzle 6. It's a simple Middleware to be added in the HandlerStack.
Stars: ✭ 325 (-58.86%)
Mutual labels:  cache, performance
Bigcache
Efficient cache for gigabytes of data written in Go.
Stars: ✭ 5,304 (+571.39%)
Mutual labels:  cache, performance

Django Cachalot

Caches your Django ORM queries and automatically invalidates them.

Documentation: http://django-cachalot.readthedocs.io


.. image:: http://img.shields.io/pypi/v/django-cachalot.svg?style=flat-square&maxAge=3600 :target: https://pypi.python.org/pypi/django-cachalot

.. image:: https://img.shields.io/pypi/pyversions/django-cachalot :target: https://django-cachalot.readthedocs.io/en/latest/

.. image:: https://travis-ci.com/noripyt/django-cachalot.svg?branch=master :target: https://travis-ci.com/noripyt/django-cachalot

.. image:: http://img.shields.io/coveralls/noripyt/django-cachalot/master.svg?style=flat-square&maxAge=3600 :target: https://coveralls.io/r/noripyt/django-cachalot?branch=master

.. image:: http://img.shields.io/scrutinizer/g/noripyt/django-cachalot/master.svg?style=flat-square&maxAge=3600 :target: https://scrutinizer-ci.com/g/noripyt/django-cachalot/

.. image:: https://img.shields.io/discord/773656139207802881 :target: https://discord.gg/WFGFBk8rSU


Table of Contents:

  • Quickstart
  • Usage
  • Hacking
  • Benchmark
  • Third-Party Cache Comparison
  • Discussion

Quickstart

Cachalot officially supports Python 3.5-3.9 and Django 2.0-2.2, 3.0-3.1 with the databases PostgreSQL, SQLite, and MySQL.

Usage

#. pip install django-cachalot #. Add 'cachalot', to your INSTALLED_APPS #. If you use multiple servers with a common cache server, double check their clock synchronisation <https://django-cachalot.readthedocs.io/en/latest/limits.html#multiple-servers>_ #. If you modify data outside Django – typically after restoring a SQL database –, use the manage.py command <https://django-cachalot.readthedocs.io/en/latest/quickstart.html#command>_ #. Be aware of the few other limits <https://django-cachalot.readthedocs.io/en/latest/limits.html#limits>_ #. If you use django-debug-toolbar <https://github.com/jazzband/django-debug-toolbar>_, you can add 'cachalot.panels.CachalotPanel', to your DEBUG_TOOLBAR_PANELS #. Enjoy!

Hacking

To start developing, install the requirements and run the tests via tox.

Make sure you have the following services:

  • Memcached
  • Redis
  • PostgreSQL
  • MySQL

For setup:

#. Install: pip install -r requirements/hacking.txt #. For PostgreSQL: CREATE ROLE cachalot LOGIN SUPERUSER; #. Run: tox --current-env to run the test suite on your current Python version. #. You can also run specific databases and Django versions: tox -e py38-django3.1-postgresql-redis

Benchmark

Currently, benchmarks are supported on Linux and Mac/Darwin. You will need a database called "cachalot" on MySQL and PostgreSQL. Additionally, on PostgreSQL, you will need to create a role called "cachalot." You can also run the benchmark, and it'll raise errors with specific instructions for how to fix it.

#. Install: pip install -r requirements/benchmark.txt #. Run: python benchmark.py

The output will be in benchmark/TODAY'S_DATE/

TODO Create Docker-compose file to allow for easier running of data.

Third-Party Cache Comparison

There are three main third party caches: cachalot, cache-machine, and cache-ops. Which do you use? We suggest a mix:

TL;DR Use cachalot for cold or modified <50 times per minutes (Most people should stick with only cachalot since you most likely won't need to scale to the point of needing cache-machine added to the bowl). If you're an enterprise that already has huge statistics, then mixing cold caches for cachalot and your hot caches with cache-machine is the best mix. However, when performing joins with select_related and prefetch_related, you can get a nearly 100x speed up for your initial deployment.

Recall, cachalot caches THE ENTIRE TABLE. That's where its inefficiency stems from: if you keep updating the records, then the cachalot constantly invalidates the table and re-caches. Luckily caching is very efficient, it's just the cache invalidation part that kills all our systems. Look at Note 1 below to see how Reddit deals with it.

Cachalot is more-or-less intended for cold caches or "just-right" conditions. If you find a partition library for Django (also authored but work-in-progress by Andrew Chen Wang_), then the caching will work better since sharding the cold/accessed-the-least records aren't invalidated as much.

Cachalot is good when there are <50 modifications per minute on a hot cached table. This is mostly due to cache invalidation. It's the same with any cache, which is why we suggest you use cache-machine for hot caches. Cache-machine caches individual objects, taking up more in the memory store but invalidates those individual objects instead of the entire table like cachalot.

Yes, the bane of our entire existence lies in cache invalidation and naming variables. Why does cachalot suck when stuck with a huge table that's modified rapidly? Since you've mixed your cold (90% of) with your hot (10% of) records, you're caching and invalidating an entire table. It's like trying to boil 1 ton of noodles inside ONE pot instead of 100 pots boiling 1 ton of noodles. Which is more efficient? The splitting up of them.

Note 1: My personal experience with caches stems from Reddit's: https://redditblog.com/2017/01/17/caching-at-reddit/

Note 2: Technical comparison: https://django-cachalot.readthedocs.io/en/latest/introduction.html#comparison-with-similar-tools

Discussion

Help? Technical chat? It's here on Discord <https://discord.gg/WFGFBk8rSU>_.

Legacy chats:

.. _Andrew Chen Wang: https://github.com/Andrew-Chen-Wang

.. image:: https://raw.github.com/noripyt/django-cachalot/master/django-cachalot.jpg

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].