Using Redis or Memcached for Caching in Flask
Introduction
Caching improves application performance by reducing redundant computations and database queries. Flask can integrate with caching systems like Redis or Memcached to store and retrieve data efficiently.
This article demonstrates step-by-step how to implement caching using Redis or Memcached in a Flask application.
Step 1: Setting Up Flask and Installing Dependencies
Install Flask and a caching library like Flask-Caching
and either Redis or Memcached:
pip install flask flask-caching redis
If using Memcached, install the pymemcache
library:
pip install pymemcache
Step 2: Setting Up Redis or Memcached
Install and start the caching service on your system:
For Redis:
sudo apt update sudo apt install redis sudo systemctl start redis
For Memcached:
sudo apt update sudo apt install memcached sudo systemctl start memcached
Step 3: Configuring Flask-Caching
Update your Flask application to include caching:
from flask import Flask from flask_caching import Cache app = Flask(__name__) # Configure caching app.config['CACHE_TYPE'] = 'RedisCache' # Use 'MemcachedCache' for Memcached app.config['CACHE_REDIS_HOST'] = 'localhost' app.config['CACHE_REDIS_PORT'] = 6379 cache = Cache(app)
Step 4: Adding Cache to Your Routes
Use the @cache.cached
decorator to cache specific routes:
@app.route('/') @cache.cached(timeout=60) def home(): import time time.sleep(2) # Simulate a slow computation return "Welcome to the cached Flask app!"
This caches the response for 60 seconds, reducing the computation time for repeated requests.
Step 5: Using Low-Level Cache Functions
Manually store and retrieve data using the cache
object:
@app.route('/store') def store_data(): cache.set('key', 'value', timeout=300) # Cache for 5 minutes return "Data cached successfully!" @app.route('/retrieve') def retrieve_data(): value = cache.get('key') return f"Cached value: {value}"
Step 6: Verifying the Cache
Test your application to ensure caching works as expected. Use Redis or Memcached monitoring tools to confirm data storage.
For Redis:
redis-cli KEYS *
For Memcached:
telnet localhost 11211 stats items
Step 7: Clearing the Cache
Clear the entire cache when needed:
cache.clear()
Conclusion
By integrating Redis or Memcached with Flask, you can significantly enhance the performance of your application by caching frequently accessed data. This reduces the load on your database and speeds up responses.