Registry / web-framework / flask-caching

flask-caching

JSON →
library2.3.1pypypi✓ verified 35d ago

Flask-Caching adds comprehensive caching support to Flask applications, providing various backend options such as SimpleCache, RedisCache, MemcachedCache, FileSystemCache, and others. It integrates seamlessly with Flask applications to cache view functions or parts of templates. The current version is 2.3.1, and the library maintains an active release cadence with regular updates and patches.

web-frameworkdatabaseobservability
Install & Compatibility
Where this runs
tested against v2.4.0 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
py 3.103.990 runs
installs and imports cleanly · install 0.0s · import 0.515s · 22.8MB
glibc
py 3.103.990 runs
installs and imports cleanly · install 2.3s · import 0.467s · 23MB
21MB installed
● package 21MB
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

from flask_caching import Cache

This quickstart demonstrates setting up Flask-Caching with a `SimpleCache` backend, caching a simple view function (`/`), and using a custom `make_cache_key` for a dynamic route (`/user/<username>`). It also includes an endpoint to clear the cache. For external backends like Redis or Memcached, ensure the respective `CACHE_TYPE` and configuration variables are set in `app.config` and the necessary dependencies are installed (e.g., `pip install Flask-Caching[redis]` and `pip install redis`).

from flask import Flask, request from flask_caching import Cache import datetime app = Flask(__name__) # Example Configuration (using SimpleCache, good for development) # For production, consider 'RedisCache', 'MemcachedCache', etc. app.config.from_mapping({ "CACHE_TYPE": "SimpleCache", # Type of cache to use (e.g., SimpleCache, RedisCache, MemcachedCache) "CACHE_DEFAULT_TIMEOUT": 300 # Default timeout in seconds for cached items # For RedisCache: "CACHE_REDIS_HOST": "localhost", "CACHE_REDIS_PORT": 6379 }) cache = Cache(app) @app.route("/") @cache.cached(timeout=60) # Cache this view for 60 seconds def index(): # This part will only execute once every 60 seconds current_time = datetime.datetime.now().strftime("%H:%M:%S") return f"<h1>Hello, Flask-Caching!</h1><p>The time is: {current_time}</p><p>This page is cached.</p>" @app.route("/reset_cache") def reset_cache(): cache.clear() return "Cache cleared!" # Example with dynamic URL and custom cache key @app.route("/user/<username>") @cache.cached(timeout=30, make_cache_key=lambda: request.path) def user_profile(username): # Simulate a database lookup import time time.sleep(2) return f"<h2>Profile for {username}</h2><p>Data fetched at {datetime.datetime.now().strftime("%H:%M:%S")}</p>" if __name__ == '__main__': app.run(debug=True)
Debug
Known footguns
breakingFlask-Caching v2.0.0 and newer versions require Flask 2.0 or higher. Applications running older Flask versions (e.g., Flask 1.x) must either upgrade Flask or stick to Flask-Caching v1.x to maintain compatibility.
breakingStarting with v2.0.0, the import paths for many cache backends have changed. Previously, backends like `RedisCache` were often imported from `flask_caching.ext.redis`. The `ext` module has been removed, and all backends are now located under `flask_caching.backends.<backend_name_module>`. This is a significant change requiring update of import statements.
breakingThe `uwsgicache` backend was deprecated in Flask-Caching v1.10.0 and completely removed in v2.0.0. If your application relies on this backend, it will break when upgrading to v2.0.0 or later.
gotchaWhen caching dynamic routes (e.g., `/user/<int:user_id>`), the default cache key generation might not always produce unique keys for different parameters, potentially leading to stale or incorrect data being served. It's crucial to explicitly define a custom `make_cache_key`.
gotchaIncorrectly configuring the `CACHE_TYPE` or its associated parameters (e.g., `CACHE_REDIS_HOST`, `CACHE_MEMCACHED_SERVERS`) is a common source of errors. Ensure the chosen backend library is installed and its configuration matches the chosen `CACHE_TYPE`.
gotchaThe test script itself contains a Python SyntaxError related to incorrect f-string usage, preventing the application from starting. This is not a Flask-Caching library issue, but a defect in the test environment or script.
Upgrade
Version history

Breaking-change detection hasn't run for this library yet.

Audit
Security & dependencies

CVE tracking and dependency tree are planned for a later release.

Agent activity
13 hits · last 30 days
gptbot
4
ahrefsbot
4
claudebot
1
Resources