On Redis, Memcached, Speed, Benchmarks and The Toilet
antirez.com
antirez.com
Also, one should not expect to see parity in get/set ratios or you're doing it wrong. Cache get with a good hit ratio/high effectiveness is the point of memcached. While memcached gets effectively plateaued in his low concurrency example, redis get performance degraded as you added more clients/concurrency. In an unoptimized use of memcached, high transaction rate environment, I see sets at 10% of gets.
Redis may very well be faster, but an effective benchmark should be closer to real world use case and shouldn't hold one party back for parity in protocol complexity.
About the binary protocol: I think this is currently not the widely deployed one, but the point here is that if the difference is about the protocol, even Redis could switch to a faster protocol using a binary one. Using almost the same protocol in both servers we are actually measuring the internals.
Anyway your reasoning can be applied the other way around. Many memcached systems are currently using CAS extensively while you can perform just one query with Redis atomic operations in many of the same real world scenarios. So should I double the Redis numbers by two because there is a faster way to do something in a Redis specific way?
About SET/GET ratio, I measured both SET and GET performances in an independent way, so I don't get it.
When asking for a performance benchmark, specifically about systems that are very dependent on communication protocol for performance, I think that it's more valuable to know how the best performing protocol of either side would perform.
As far as atomic vs CAS, I'd be more interested in the "right way" than the same way, so for my own interest, yes.
Re: Ratio, from your graph it appeared they were co-mingled. If each was done on their own then my point is moot.
- session management
- message queue (previously using 0mq pub sub)
- memory cache (LRU argument = weak)
That's previously 3 technologies I had to manage, now only having to install 1. That means only having to worry about 1 driver, and only dealing with 1 API.
Less technologies in the stack is a good thing, esp if you get a performance boost as well.
The current bottleneck is of course an easy way to scale, and 2.2 comes with Redis Cluster.
The other problem some have indicated is the LRU implementation, which imo is a non-issue in almost all use cases.
The implementation according to antirez is that they sample 3 random keys, and expire the soonest one, so put your high priority data with a longer expire and you'll be fine.
With Redis we will shortly start working full time at "Redis cluster" so it's not that we don't care :) Just I think the first goal should be to have a very efficient "single" node, and then going the step forward trying to retain the same speed if possible.
"Stressing scalability so much put somewhat in shadow what in the 80's was one of the most interesting meters of software coolness [...]"
"Unfortunately I also think that our dude is part of the problem, since running crappy benchmarks is not going to help our pop culture."
"Apple to Apple, with the same mouth"
Well also the fact that I try to write this blog posts in very little time (it took me two hours at max, probably even a mother tongue should alloc more time to end with an high quality blog post) does not help either.
That said, please don't make excuses about how little time you spent on it. It might be true, but it shows lack of respect for your audience. Like code, if it's worth writing at all, it's probably worth writing well.
Keep writing, keep coding!
I should try to resist some more hours in order to obtain a post that is more consistent and easy to follow... instead I tend to push the "publish" button and even when the post is already live I continue fixing it... Thanks for the comment!
antirez's readership probably overlaps significantly with his userbase.
For purely selfish reasons, I wholeheartedly commend and encourage his goal of spending less time writing blog posts. :)
This parses correctly, just with difficulty. It's not exactly a garden path sentence, but it has several small key words which, if missed, lead to a failed parse.
Anyway, my point is not to send the guy to study English instead of doing whatever it is he prefers doing. But if you write in public, just get some help proofreading. Despite what the other defensive people on this thread are saying, good, clear communication matters and helps.
A "meter" is, among other things, "a measure, gauge, or criterion"; and in this way it can take the place of "metric". Idiomatic it certainly is not; but it is correct.
http://www.merriam-webster.com/dictionary/meter
which while not exhaustive is quite indicative of standard usage.
"Stressing scalability so much put somewhat in shadow what in the 80's was one of the most interesting meters of software coolness [...]"
This parses perfectly fine with this meaning:
"The stress people put on scalability now has shadowed one of the most interesting measurements of software coolness in the 80's."
I'm not saying that the sentence can't be improved, but that you're wrong when you say that it's nonsensical.
So, a few turns of phrase, or whatever, who cares? I understood it, and I was able to understand it because HE is not as LAZY as I AM! (and went out and learned english.)