30 <h1><a name=
"Features (DRAFT)">Features (DRAFT)
</a></h1>Checking Redis for the first time? Here your will find the most important features, and pointers to a lot more information.
<h2><a name=
"Speed">Speed
</a></h2>Redis is written in ANSI C, and loads the whole dataset in memory, so it is wicked
<i><b>fast
</b>!
</i> Up to
110,
000 <a href=
"SETs.html">SETs
</a>/second,
81,
000 GETs/second can be achieved in an entry level Linux box. Read more about Redis
<a href=
"Speed.html">Speed
</a>.
<br/><br/>Also Redis supports
<a href=
"Pipelining.html">Pipelining
</a> of commands and
<a href=
"MultiBulkCommands.html">getting and setting m
últiple values in a single command
</a> to speed up communication with the client libraries.
<h2><a name=
"Persistence">Persistence
</a></h2>While all the data lives in memory, changes are
<i>asynchronously
</i> saved on disk using flexible policies based on elapsed time and/or number of updates since last save.
<br/><br/>If you can't afford losing some data, starting on version
1.1 (currently in beta but you can download it from the Git repository) Redis supports an append-only file persistence mode. Check more on
<a href=
"Persistence.html">Persistence
</a>, or read the
<a href=
"AppendOnlyFileHowto.html">AppendOnlyFileHowto
</a> for more information.
<h2><a name=
"Support for Data Structures">Support for Data Structures
</a></h2>Values in Redis can be
<a href=
"Strings.html">Strings
</a> as in a conventional key-value store, but also
<a href=
"Lists.html">Lists
</a>,
<a href=
"Sets.html">Sets
</a>, and
<a href=
"SortedSets.html">SortedSets
</a> (to be support in
<a href=
"RoadMap.html">version
1.1</a>). This data types allow pushing/poping elements, or adding/removing them, also perform server side union, intersection, difference between sets, and so forth depending on the types. Redis supports different kind of sorting abilities for
<a href=
"Sets.html">Sets
</a> and
<a href=
"Lists.html">Lists
</a>.
<br/><br/>You can think in Redis as a
<b>Data Structures Server
</b>, that allows you to model non trivial problems. Read
<a href=
"DataTypes.html">Data Types
</a> to learn more about the way Redis handle
<a href=
"Strings.html">Strings
</a>, and the
<a href=
"Commands.html">Commands
</a> supported by
<a href=
"Lists.html">Lists
</a>,
<a href=
"Sets.html">Sets
</a> and
<a href=
"SortedSets.html">SortedSets
</a><h2><a name=
"Atomic Operations">Atomic Operations
</a></h2>Redis operations working on the different Data Types are
<b>atomic
</b>, so setting or increasing a key, adding and removing elements from a set, increasing a counter will all be accomplished safely.
<h2><a name=
"Variety of Supported Languages">Variety of Supported Languages
</a></h2>Ruby, Python, Twisted Python, PHP, Erlang, Tcl, Perl, Lua, Java, Scala, Clojure, choose your poison. Check the list of
<a href=
"SupportedLanguages.html">Supported Languages
</a> for all the details.
<br/><br/>If your favorite language is not supported yet, you can write your own client library, as the
<a href=
"ProtocolSpecification.html">Protocol
</a> is pretty simple.
<h2><a name=
"Master/Slave Replication">Master/Slave Replication
</a></h2>Redis supports a very simple and fast Master/Slave replication. Is so simple it takes only one line in the
<a href=
"Configuration.html">configuration file
</a> to set it up, and
21 seconds for a Slave to complete the initial sync of
10 MM key set in a Amazon EC2 instance.
<br/><br/>Read more about Master/Slave
<a href=
"Replication.html">Replication
</a>.
<h2><a name=
"Sharding">Sharding
</a></h2>Distributing the dataset across multiple Redis instances is easy in Redis, as in any other key-value store. And this depends basically on the
<a href=
"Supported.html">Languages
</a> client libraries being able to do so.
<br/><br/>Read more about
<a href=
"Sharding.html">Sharding
</a> if you want to know more abour distributing data and workload in Redis.
<h2><a name=
"Hot Backups">Hot Backups
</a></h2>TODO
<h2><a name=
"Simple to Install, Setup and Manage">Simple to Install, Setup and Manage
</a></h2>Installing Redis requires little more than downloading it, uncompressing it and running make. Management is near zero, so you can start using Redis in a matter of minutes.
<br/><br/>Go on and read about Redis
<a href=
"Installation.html">installation
</a>, its
<a href=
"Setup.html">Setup
</a> and
<a href=
"Management.html">Management
</a>.
<h2><a name=
"Portable">Portable
</a></h2>Redis is written in ANSI C and works in most POSIX systems like Linux, BSD, Mac OS X, Solaris, and so on. Redis is reported to compile and work under WIN32 if compiled with Cygwin, but there is no official support for Windows currently.
<h2><a name=
"Liberal Licensing">Liberal Licensing
</a></h2>Redis is free software released under the very liberal BSD license.
<h2><a name=
"What's next?">What's next?
</a></h2>Want to get started with Redis? Try the
<a href=
"QuickStart.html">Quick Start
</a> you will be up and running in just a matter of minutes.
<br/><br/>Check the
<a href=
"CodeSamples.html">Code Samples
</a> and find how you can use Redis with your favorite programming language.
<br/><br/><a href=
"Comparisons.html">Compare
</a> Redis with other key-value stores, like Tokyo Cabinet or Memcached.