top | item 6780240

Redis 2.8.0 stable is out

180 points| antirez | 12 years ago |groups.google.com

58 comments

order
[+] mythz|12 years ago|reply
Redis is one of the few examples we have of truly beautiful software: A simple and elegant rock-solid performer that just works like water.

The updates over the years have been useful and has tastefully kept with the true spirit of Redis - thanks for all your hard work Salvatore!

[+] a-priori|12 years ago|reply
I agree. There are a few other pieces of software I'd put in the same class... here's two examples I can think of now:

* Varnish (the "Notes from the architect" are a great read: https://www.varnish-cache.org/trac/wiki/ArchitectNotes)

* QEMU (actually, pretty much anything Fabrice Bellard has touched)

[+] antirez|12 years ago|reply
Thanks for the kind words mythz! And for your important role in the Redis community.
[+] xfax|12 years ago|reply
Couldn't agree more.

Redis code base is like a best-practice document.

[+] NatW|12 years ago|reply
[+] antirez|12 years ago|reply
The details on the Sentinel rewrite are very little as it is not strictly part of the 2.8 release, however here is a small summary of changes:

* Gossip is used as previously to detect if an instance is down.

* The Raft algorithm leader election step is performed to get elected to perform the failover.

* The Raft epoch of the election is used as a version of the new configuration.

* New configs are always broadcasted via Pub/Sub in the master and all the known slaves. So every Sentinel is listening for configs with an epoch that is greater than the current config, to update its view of the cluster.

* Now Sentinels try to force the cluster to have the setup of the latest config in memory (but with some delay to try to receive updates). So for instance slaves replicating with a wrong ip/port are reconfigured and so forth.

* Finally Sentinels persist their state on disk at every configuration update, or every time a new slave or sentinel is added to a master, so the system model is much more reasonable. Redis instances when reconfigured are sent a "CONFIG REWRITE" as well. TLDR: process restart friendly.

In general the code is now much simpler. The state, as you understand from the above description, is eventually consistent with a last-config-win semantics (where last means the configuration with the greater epoch).

[+] resca79|12 years ago|reply
I'm from ruby community where people, that made a gem, often feel like rockstar. I have known Antirez few months ago, he's a top hacker and great person
[+] zerop|12 years ago|reply
Most of the new updates in recent Redis releases are related to cluster and replication, I would like to see new commands and structure types.. I like the SCAN and MATCH...thanks for all hard work..love Redis..
[+] antirez|12 years ago|reply
Hello zerop, it is possible that eventually the API will get more open to improvements again. The idea at this stage is that we need more "maturity" features before to raise the complexity of the API.

However built in support for bloom filters and range queries in sorted sets are two random examples of things that could get implemented in the future.

[+] ksec|12 years ago|reply
Still Waiting for Cluster.
[+] antirez|12 years ago|reply
End of year for a beta. It is already working in all its parts, there is just to improve the details, and to document it, for a better user experience. Then we release the first RC and in the first Q of 2014 make sure the RC reaches production readiness.
[+] untothebreach|12 years ago|reply
Just waiting? It is an open source project, you could always get in there and help it get done faster. In the meantime, why post a comment like this, ignoring all the amazing work that @antirez and the rest of the Redis team has done, just to whine about the one feature you want that they haven't finished yet?
[+] chris_wot|12 years ago|reply
I'm terribly sorry in advance if this sounds dense, but what exactly do you use Redis for? I've been trying to work it out for some time... pointers to documentation would be fine :-)
[+] mythz|12 years ago|reply
A Cache, Session Store, Message Queue (RedisMQ), Distributed Pub/Sub Messaging, Locking (i.e. between AppServers), Rate Limiting, Analytics, Timings, etc.

Basically a swiss-army knife that you don't want to be without when developing high performance systems.

[+] mmahemoff|12 years ago|reply
Mostly for the sweet spot between fast and pure-memory (e.g. Memcached) versus slower and high-integrity (e.g. MySQL). It works great for something like a page counter, where you want to write a lot, but don't care too much if you lost a few writes.

I know other people use it as their primary database or, on the other end of the spectrum, as an in-memory replacement...it can be configured optimally for those settings too.

[+] nknighthb|12 years ago|reply
You can pretty well use it for anything you want to use it for. It's persistent, networked shared memory.

It's powerful and flexible enough that I've used it as a primary datastore for the back-end to a web/multi-platform app/service. I don't necessarily recommend that, but it does work and is blazing fast and extremely reliable.

It's definitely some-assembly-required, though -- transactions aren't free, you have to do a little work yourself[1] (on the upside, you always know what it's doing).

Also, it is intended to be used with the entire dataset in RAM. You can let it swap to some extent, but... don't. If your dataset is huge, you need something else.

[1] Actually, this is less true post-2.6 with lua scripts. I should play with those more, the bulk of the code I wrote that uses Redis was built in the 2.0-2.2 timeframe.

[+] dcope|12 years ago|reply
Pretty much for anything that I want to store to a database but is too costly do to write every time I update. For example, I use Redis store counters for things and then batch process them storing to Postgres.
[+] rbolkey|12 years ago|reply
As a corollary, for what should I avoid using Redis?

I've heard wonderful things, but I've also heard that you can easily abuse Redis for things that aren't appropriate.

[+] bbwharris|12 years ago|reply
Dashboards and aggregate data are a great use case for redis. Usually you have expensive calculations in these interfaces. Caching in redis is easy and really fast.
[+] inkel|12 years ago|reply
I use it as the only database in most of the projects I've work at my company, using Ohm [1] as our ORM. Usually we don't have use cases with ad hoc queries like `name LIKE '%Smith'`, so it serves our purposes very well. When we need something like that, we integrate with something like Elasticsearch.

[1] https://ohm.keyvalue.org/

[+] elithrar|12 years ago|reply
I use it for server-side sessions. Fits that use case well, especially on the performance side.
[+] robertfw|12 years ago|reply
we used it to replace rabbitmq for our django->celery communication. rabbitmq had given us some configuration challenges, while redis just dropped in and worked out of the box.
[+] modoc|12 years ago|reply
Use it for handling high volume voting.
[+] meritt|12 years ago|reply
We use it for the job queue that our distributed workers interface with.
[+] munimkazia|12 years ago|reply
Keyspace change Notifications will be super useful. Sounds like a very promising feature. Also glad that they are working on Sentinel, I hope they release a stable version of that soon.
[+] untothebreach|12 years ago|reply
Indeed, I have been waiting for notifications upon key expiration for a while now, this looks awesome.
[+] plasma|12 years ago|reply
Thank you! Is there documentation related to using sentinel?