Question: What are the differences in scaling between Redis and Memcached?


Redis and Memcached are both in-memory data storage systems, but they differ significantly in their approach to scaling.

Vertical Scaling

When it comes to vertical scaling (adding more resources such as CPU or memory to a single node), both Redis and Memcached perform well. However, Redis has the edge due to its support for more complex data structures and operations, which can lead to more efficient use of resources.

# For example, in Redis, you can store and manipulate lists, sets, hashmaps directly in the database. import redis r = redis.Redis(host='localhost', port=6379, db=0) r.set('foo', 'bar') value = r.get('foo')

Horizontal Scaling

Horizontal scaling (adding more nodes to the system) is where the main differences lie:

  1. Redis: Prior to its 3.0 release, Redis did not natively support distributed caching, making horizontal scaling a challenge. After 3.0, Redis introduced cluster mode to address this. It implements automatic partitioning across multiple nodes, thus allowing for horizontal scaling.

    # Starting a Redis cluster node redis-server --port 7000 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
  2. Memcached: Memcached was designed with horizontal scaling in mind from the beginning. Its architecture does not involve any clustering or understanding of other nodes. Each client distributes keys across available nodes using consistent hashing, handling horizontal scaling very efficiently.

    # Example of setting up Memcached clients to distribute data from pymemcache.client.base import Client client = Client(('localhost', 11211)) client.set('some_key', 'some_value') result = client.get('some_key')

However, note that Memcached's simplicity could also be a limitation. In a Redis cluster, data can survive the failure of some nodes without losing consistency, thanks to its replication feature. In contrast, Memcached does not support native data replication or persistence - if a Memcached node fails, any data it held is lost.

In conclusion, while both Redis and Memcached have their strengths when it comes to scaling, the right choice depends on your specific use case and requirements.

Was this content helpful?

White Paper

Free System Design on AWS E-Book

Download this early release of O'Reilly's latest cloud infrastructure e-book: System Design on AWS.

Free System Design on AWS E-Book
Start building today

Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.