Redis 2.6 is near
antirez.com
antirez.com
That's all fine, but there is incredible resistance in many enterprises to adopting new technology. I recently faced a similar problem trying to get people to move to Redis, and the feeling is that there isn't enough "enterprise social proof".
So my questions to anyone who has deployed a large enough Redis cluster (and by cluster, I mean replication, since sharding isn't apparently supported yet):
-- What is the largest instance you have run? -- How reliable has that instance been? -- How easy is it to maintain and administer? -- What are some issues you would warn other enterprise users about?
Ok seriously now... Groupon did an event a few days ago about how they use Redis with success, Twitter uses Redis for caching timelines, Github does a good use of Redis, and similarly do many other non trivial companies, like Craigslist, Stack Overflow, Digg, ...
Those are not "enterprise" companies, but the problems they solve are not different, so IMHO the real problem is a cultural barrier. I think that this is just a matter of time.
Also, you don't need proof. You're up against complacency, not suspicion.
I knew it!
All kidding aside: Redis is an amazing tool. I'm looking forward to the new version.
redis 127.0.0.1:6379> set foo '{"b":20,"a":10}'
OK
The user wants to increment the value of "b" with a single query to Redis in an atomic way: $ cat /tmp/script.lua
obj = cjson.decode(redis.call("GET",KEYS[1]))
obj.b = obj.b + 1
redis.call("SET",KEYS[1],cjson.encode(obj))
return obj.b
$ redis-cli --eval /tmp/script.lua foo
(integer) 21
$ redis-cli --eval /tmp/script.lua foo
(integer) 22
$ redis-cli GET foo
"{\"a\":10,\"b\":22}"
No back and forth from client to server, no locking needed. Basically you can implement your specialized, atomic commands, in Lua.Given that we'll implement new commands only when they are "fundamental" operatons. For instance there is some plan to implement list splicing. When this happens it's worth to write it in C for max performances, so I think we'll unlikely write parts of Redis in Lua itself. Scripting systems is something I love (see Emacs for instance) but IMHO Redis is the instance of system where this does not work: space and time are too important for Redis.
I've seen quite a few blog posts that highlight some amazing way to use Redis and it would be very helpful to have them all in one place.
But I would also like to add that Redis's documentation is one of the best I've seen anywhere. Incredibly easy to find information about any command.
There was also http://evalsha.com/ which looked cool but went nowhere...
2) Very fast for a such a small implementation.
3) C - Lua API makes sense.
4) Any algol-like language is easily picked by a programmer. So Lisp or Tcl could not be idea, but Lua is fine syntax wise.
What I don't like about Lua (but was not enough to stop me from using it for Redis):
1) 1-based indexes.
2) ~=, why not != that everybody knows?
3) A unique "float" type for all the numbers is not ideal.
4) A unique "table" type for maps and arrays is not ideal.
5) You want to be small, but C bit operations as native operators inside the core are a good idea.
Not being a Lua user, it took me a little while to parse that. You're right, implementing these as library functions is silly, and having a dozen implementations to pick from is ludicrous!
http://lua-users.org/wiki/BitwiseOperators
EDIT: Ok, less ludicrous now that they're shipping the "bit32" implementation.
Say if I add a new hash, and also increment a counter, and update a set to track a relation. I currently do this within a multi/exec to ensure it's atomic. It would be nice to roll back the commands, if say there was an internal error between the exec/multi or if there was an external event like losing a disk / bouncing the server by possibly writing to the AOF log.
Out of interest, how do people deal with this now?
From what I've read, it's going to blow my mind and open so many new possibilities. I can't wait for the clustering in 3.0 to come out!
However, another thing I'm not going to get to use whilst working in a Microsoft monoculture :(
I hope to see some good stuff in the next weeks.
https://github.com/ServiceStack/ServiceStack.Redis
Edit: for the first time in my life I may be less than correct.
But Redis's authentication is very simple in any case. There's a password. A password, one. That's it. There are no accounts, no usernames, there's no "infrastructure" or any way to hook it into LDAP or other insanity. There's no accounting.
It's not for the kind of authentication ActiveDirectory does. In practice, it's more of an "Oops, did you really mean to connect to that server?" thing.
But I think the guy I was responding to is at least partly wrong, a quick grep through the repo he linked to shows they have everything necessary for authentication, even if it's not as blindingly obvious as in, say, redis-py and redis-rb.
http://stackoverflow.com/questions/8862552/authenticated-ser...