Using Redis and MySQL Together: Caching and Read-Write Optimization

Raccoon
4 min readFeb 12, 2025

--

Photo by Kevin Ku on Unsplash

Introduction

Redis and MySQL are two widely used technologies in modern application development. While MySQL is a powerful relational database, Redis is an in-memory data store known for its speed. Combining them can improve performance, scalability, and efficiency. In this article, we’ll explore two primary approaches:

  1. Using Redis as a caching system to reduce MySQL query load.
  2. Using Redis as a read-only database and MySQL as a write-only database.

What is Redis?

Redis (Remote Dictionary Server) is an open-source, in-memory key-value data store. It is designed for ultra-fast read and write operations, making it suitable for caching, session storage, pub/sub messaging, and real-time analytics.

Key Features of Redis:

  • Lightning-fast performance — As an in-memory store, Redis operates at microsecond latency.
  • Persistence options — Supports snapshotting and append-only file (AOF) persistence.
  • Data structures — Offers strings, hashes, lists, sets, and more.
  • Replication and clustering — Enables high availability and scalability.

What is MySQL?

MySQL is a widely used open-source relational database management system (RDBMS). It stores structured data in tables and uses SQL for querying and managing data.

Key Features of MySQL:

  • ACID compliance — Ensures reliable transactions with Atomicity, Consistency, Isolation, and Durability.
  • Indexing and Query Optimization — Supports indexing, joins, and optimized queries.
  • Replication and Sharding — Enables horizontal scaling.
  • Security — Provides user authentication and access control.

Approach 1: Using Redis as a Caching Layer for MySQL

Why Use Caching?

Databases like MySQL can become a bottleneck when dealing with high read requests. By caching frequently accessed data in Redis, applications can:

  • Reduce MySQL load.
  • Improve response times.
  • Handle increased traffic efficiently.

How It Works

  1. The application checks Redis for data.
  2. If data is found (cache hit), it is returned instantly.
  3. If data is not found (cache miss), MySQL is queried.
  4. The retrieved data is stored in Redis for future access.

Code Example (Python)

import redis
import mysql.connector

# Connect to Redis
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)
# Connect to MySQL
mysql_conn = mysql.connector.connect(user='user', password='password', host='localhost', database='test_db')
cursor = mysql_conn.cursor()
def get_user(user_id):
cache_key = f'user:{user_id}'
cached_data = redis_client.get(cache_key)

if cached_data:
print("Cache hit!")
return cached_data.decode('utf-8')

print("Cache miss! Fetching from MySQL.")
cursor.execute("SELECT name FROM users WHERE id = %s", (user_id,))
result = cursor.fetchone()

if result:
redis_client.setex(cache_key, 300, result[0]) # Cache for 5 minutes
return result[0]

return None

Cache Invalidation Strategies

  • Time-to-Live (TTL): Expire cache after a set time.
  • Write-through caching: Update Redis every time MySQL is updated.
  • Lazy loading: Only update cache when data is requested.

Pros and Cons Based on CAP Theorem

  • Consistency: Redis caching introduces eventual consistency since updates may not be immediately reflected.
  • Availability: High availability due to Redis’s fast in-memory access.
  • Partition Tolerance: Redis can be partitioned but may lead to stale data if partitions prevent MySQL updates from propagating.

Approach 2: Redis as a Read-Only Database, MySQL as a Write-Only Database

When to Use This Approach

This strategy is useful for read-heavy applications where:

  • Real-time responses are critical.
  • The database is under heavy read load.
  • Write operations are less frequent than reads.

How It Works

  1. All write operations go directly to MySQL.
  2. A background job syncs MySQL data to Redis.
  3. All read operations are served from Redis.

Code Example (Node.js)

const redis = require('redis');
const mysql = require('mysql2/promise');
const redisClient = redis.createClient();
const mysqlPool = mysql.createPool({ host: 'localhost', user: 'user', password: 'password', database: 'test_db' });

async function writeUser(userId, name) {
const conn = await mysqlPool.getConnection();
await conn.execute("INSERT INTO users (id, name) VALUES (?, ?)", [userId, name]);
conn.release();
}
async function syncToRedis() {
const conn = await mysqlPool.getConnection();
const [rows] = await conn.execute("SELECT * FROM users");
rows.forEach(user => redisClient.set(`user:${user.id}`, JSON.stringify(user)));
conn.release();
}
async function readUser(userId) {
return new Promise((resolve, reject) => {
redisClient.get(`user:${userId}`, (err, data) => {
if (err) reject(err);
if (data) resolve(JSON.parse(data));
else resolve(null);
});
});
}
setInterval(syncToRedis, 60000); // Sync every 60 seconds

Pros and Cons Based on CAP Theorem

  • Consistency: Data consistency depends on the synchronization frequency between MySQL and Redis.
  • Availability: Redis ensures high availability for read-heavy operations.
  • Partition Tolerance: If Redis and MySQL lose connectivity, reads may serve stale data until re-synchronization.

Conclusion

Using Redis and MySQL together can significantly improve performance and scalability. Whether you choose to use Redis as a caching layer or as a read-only database depends on your application’s needs.

  • For high read performance, caching frequently accessed data in Redis reduces MySQL query load.
  • For scalable read-heavy applications, treating Redis as the primary read database while using MySQL for writes ensures fast data retrieval.

By leveraging the strengths of both technologies and considering trade-offs based on CAP theorem, you can build high-performing applications that efficiently manage data access and storage.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Raccoon
Raccoon

Written by Raccoon

I'm a software engineer, not a trash panda

No responses yet

Write a response