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.
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
muslpy 3.10–3.990 runs
installs and imports cleanly · install 0.0s · import 0.515s · 22.8MB
glibcpy 3.10–3.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)
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.