Memcached 1.6
github.com
github.com
Memcache is for caching only, it's very good at it, there is basically no administrative overhead and people (i.e. other developers) know that if you stuff data into memcache, you should be prepared to lose it.
Redis is, to me at least, much more akin to "shared data structures as a service". Sure it's also a key value store, where I could cache data, but I could do that with MySQL as well. I look to Redis when I need to have data shared between components, and sometimes a key value store happens to be the best solution, other times it may be pub/sub.
This article makes some claims:
https://medium.com/@Alibaba_Cloud/redis-vs-memcached-in-memo...
A relevant SO post: https://stackoverflow.com/questions/10558465/memcached-vs-re...
Personally as a dev I would start with redis and only consider swapping if I ran into a perf bottleneck I could prove was better in memcached.
I think it really depends if and how you're going to use the Redis features. If you plan to make Redis a big part of your overall design, then maybe separating caching out into Memcache servers still makes sense.
One issue I've run into is shutdown and start up time for Redis, when you're storing large amounts of data. You risk being without a caching layer for a large period of time if you need to restart Redis, where Memcache, due to the lack of persistance is ready right away. Honestly I'm not sure it that still an issue, but I believe it is. Of cause this is only an issue if you're using Redis to store other data than just your cache, but the temptation to do so is pretty high once Redis is available to you.
You could of cause have two instances of Redis, but if you're not using the features in one of the Redis installation, then maybe you could just as easily use Memcache.
As with so much else, it's a question of your use case, how much data you have, what type of data and how you expect to be able to access it.
The bigger issue here is starting an empty (cold) caching instance and overloading backends because all the requests are MISSes and go to the backends. Persistence allows you to avoid this problem. Even if you run caching servers in some geo distributed setup, persistence will still help by reducing unnecessary geo bandwidth.
It's pretty hard to find even a single use case where in-memory caching server without persistence is better than the one with.
One option is KeyDB which has multithreading and persistence beyond RAM capacity: https://github.com/JohnSully/KeyDB
At the highest level, I'd say Redis is a swiss army knife and Memcached is a simple pocket knife. Sometimes you really want the swiss army knife, sometimes all of that stuff is just in the way. Memcached is super simple and basic, and that's what I want to lean towards in the building blocks of my software.
Looking closer, Redis isn't multithreaded while Memcached is. This means Memcached can scale vertically by scaling compute power in a single instance. Redis isn't well-suited to that. If you're just using a key-value store with zero frills and you run a monolithic app on a single instance, Memcached is going to take you a lot further. A ton of people still run their web applications this way.
Having said that, Redis scales horizontally very easily and nicely. You can create replicas of a primary Redis instance to create super high performance/availability clusters. I'd say the lack of multithreading is a non-issue if you know how to manage Redis this way and your infrastructure allows for it.
Beyond that, if you do need the features Redis offers (scripting, geospatial support, pub/sub, etc) then Memcached is pretty much off the table.
I'm sure there are things I'm missing, but these are the key items that come to mind. They're definitely different! I wouldn't say Redis is the de-facto solution, although I love it and use it a lot.
Boring Tech is Good. Memcached should be added to that list.
Edit: Release Note Mentioned Netflix, I wonder what they use it for.
It's fine if all you are doing is boring things.
But often there are use cases where a simple key/value store just isn't going to cut it.
And I for one am glad to have Redis as a solid, well-engineered alternative.
https://netflixtechblog.com/evolution-of-application-data-ca...
It's not re-written every other year in the latest hot language. It chugs along, without embarrassment, doing one thing amazingly well over 17 years...
I smiled when I read the title, thinking "How cool! Something I was using at a job I left ~16 years ago has _finally_ made it to version 1.6!" :-)
(I suspect the old LiveJournal Perl code probably didn't have it's version numbers carry over into this somewhat more modern version...)
What is with all of the weird sniping in this thread ?
There are legitimate reasons why people move to Rust and similar languages e.g. security, maintainability.
What project does this?
I think this is pretty unfair to Redis. Redis has a lot more features (tell me which ones you think are pandering, and to whom?), is free for the vast majority of what people want to use it for, and the attempt to make some money through Redis Labs is pretty recent in the scheme of things. If that helps with the continued development of Redis I have no problem with it.
Memcache OTOH is a fairly simple KV cache. It seems to be pretty decent. Neither of these supplants the other however. Hence my puzzlement. It just seems out of place, unnecessary and doesn't really add anything.
I wonder if memcached would give me performance benefits and lower my CPU costs.
It's simple, but I have like 400 updates per second.
Memcache blows redis out of the water in terms of raw throughput and latency, like it's not even remotely close on modern lots of cores and big memory machines.
Redis has a more feature rich api, but has fundamentally hobbled itself on a root hash table and concurrency implementation that is circa 1990.
Give memcached a try, even if it means you implement some stuff you currently defer to redis ops. Measure it. Look at the code bases. Make up your own mind about performance and which actually makes your code simpler.
TL;DR: Redis is just doing different things, and the slab allocator is pretty efficient in regards to performance but not memory usage.