- config parameter to change the name of the DB file
- replication automated tests
- replication non stopping master<->slave syncronization
- an external tool able to perform the 'difference' between two Redis servers. It's like 'diff', but against Redis servers, and the output is the set of commands needed to turn the first server into the second, suitable to be sent via netcat.
$ ./redis-diff 192.168.1.1 192.168.1.2 > diff.txt
$ cat diff.txt | nc 192.168.1.1 6379
...
...
@@ -24,7 +23,7 @@ This command should be smart and don't use too much memory, that is, take two co
- Add missing commands in documentation
- Document replication
- Objects sharing configuration, add the directive "objectsharingpool <size>"
- Make sure to confert all the fstat() calls to 64bit versions.
- Make sure to convert all the fstat() calls to 64bit versions.
<h1><aname="AUTH _password_">AUTH _password_</a></h1><blockquote>Request for authentication in a password protected Redis server.A Redis server can be instructed to require a password before to allow clientsto issue commands. This is done using the <i>requirepass</i> directive in theRedis configuration file.</blockquote>
<blockquote>If the password given by the client is correct the server replies withan OK status code reply and starts accepting commands from the client.Otherwise an error is returned and the clients needs to try a new password.Note that for the high performance nature of Redis it is possible to trya lot of passwords in parallel in very short time, so make sure to generatea strong and very long password so that this attack is infeasible.</blockquote>
<h1><aname="Redis Command Reference">Redis Command Reference</a></h1>Every command name links to a specific wiki page describing the behavior of the command.<h2><aname="Connection handling">Connection handling</a></h2><ul><li><ahref="QuitCommand.html">QUIT</a><codename="code"class="python">close the connection</code></li></ul>
<h1><aname="Redis Command Reference">Redis Command Reference</a></h1>Every command name links to a specific wiki page describing the behavior of the command.<h2><aname="Connection handling">Connection handling</a></h2><ul><li><ahref="QuitCommand.html">QUIT</a><codename="code"class="python">close the connection</code></li><li><ahref="AuthCommand.html">AUTH</a><codename="code"class="python">simple password authentication if enabled</code></li></ul>
<h2><aname="Commands operating on string values">Commands operating on string values</a></h2><ul><li><ahref="SetCommand.html">SET</a><i>key</i><i>value</i><codename="code"class="python">set a key to a string value</code></li><li><ahref="GetCommand.html">GET</a><i>key</i><codename="code"class="python">return the string value of the key</code></li><li><ahref="MgetCommand.html">MGET</a><i>key1</i><i>key2</i> ... <i>keyN</i><codename="code"class="python">multi-get, return the strings values of the keys</code></li><li><ahref="SetnxCommand.html">SETNX</a><i>key</i><i>value</i><codename="code"class="python">set a key to a string value if the key does not exist</code></li><li><ahref="IncrCommand.html">INCR</a><i>key</i><codename="code"class="python">increment the integer value of key</code></li><li><ahref="IncrCommand.html">INCRBY</a><i>key</i><i>integer</i><codename="code"class="python"> increment the integer value of key by integer</code></li><li><ahref="IncrCommand.html">INCR</a><i>key</i><codename="code"class="python">decrement the integer value of key</code></li><li><ahref="IncrCommand.html">DECRBY</a><i>key</i><i>integer</i><codename="code"class="python">decrement the integer value of key by integer</code></li><li><ahref="ExistsCommand.html">EXISTS</a><i>key</i><codename="code"class="python">test if a key exists</code></li><li><ahref="DelCommand.html">DEL</a><i>key</i><codename="code"class="python">delete a key</code></li><li><ahref="TypeCommand.html">TYPE</a><i>key</i><codename="code"class="python">return the type of the value stored at key</code></li></ul>
<h2><aname="Commands operating on the key space">Commands operating on the key space</a></h2><ul><li><ahref="KeysCommand.html">KEYS</a><i>pattern</i><codename="code"class="python">return all the keys matching a given pattern</code></li><li><ahref="RandomkeyCommand.html">RANDOMKEY</a><codename="code"class="python">return a random key from the key space</code></li><li><ahref="RenameCommand.html">RENAME</a><i>oldname</i><i>newname</i><codename="code"class="python">rename the old key in the new one, destroing the newname key if it already exists</code></li><li><ahref="RenamenxCommand.html">RENAMENX</a><i>oldname</i><i>newname</i><codename="code"class="python">rename the old key in the new one, if the newname key does not already exist</code></li><li><ahref="DbsizeCommand.html">DBSIZE</a><codename="code"class="python">return the number of keys in the current db</code></li><li><ahref="ExpireCommand.html">EXPIRE</a><codename="code"class="python">set a time to live in seconds on a key</code></li></ul>
<h2><aname="Commands operating on lists">Commands operating on lists</a></h2><ul><li><ahref="RpushCommand.html">RPUSH</a><i>key</i><i>value</i><codename="code"class="python">Append an element to the tail of the List value at key</code></li><li><ahref="RpushCommand.html">LPUSH</a><i>key</i><i>value</i><codename="code"class="python">Append an element to the head of the List value at key</code></li><li><ahref="LlenCommand.html">LLEN</a><i>key</i><codename="code"class="python">Return the length of the List value at key</code></li><li><ahref="LrangeCommand.html">LRANGE</a><i>key</i><i>start</i><i>end</i><codename="code"class="python">Return a range of elements from the List at key</code></li><li><ahref="LtrimCommand.html">LTRIM</a><i>key</i><i>start</i><i>end</i><codename="code"class="python">Trim the list at key to the specified range of elements</code></li><li><ahref="LindexCommand.html">LINDEX</a><i>key</i><i>index</i><codename="code"class="python">Return the element at index position from the List at key</code></li><li><ahref="LsetCommand.html">LSET</a><i>key</i><i>index</i><i>value</i><codename="code"class="python">Set a new value as the element at index position of the List at key</code></li><li><ahref="LremCommand.html">LREM</a><i>key</i><i>count</i><i>value</i><codename="code"class="python">Remove the first-N, last-N, or all the elements matching value from the List at key</code></li><li><ahref="LpopCommand.html">LPOP</a><i>key</i><codename="code"class="python">Return and remove (atomically) the first element of the List at key</code></li><li><ahref="LpopCommand.html">RPOP</a><i>key</i><codename="code"class="python">Return and remove (atomically) the last element of the List at key</code></li></ul>
<h2><aname="Commands operating on sets">Commands operating on sets</a></h2><ul><li><ahref="SaddCommand.html">SADD</a><i>key</i><i>member</i><codename="code"class="python">Add the specified member to the Set value at key</code></li><li><ahref="SremCommand.html">SREM</a><i>key</i><i>member</i><codename="code"class="python">Remove the specified member from the Set value at key</code></li><li><ahref="ScardCommand.html">SCARD</a><i>key</i><codename="code"class="python">Return the number of elements (the cardinality) of the Set at key</code></li><li><ahref="SismemberCommand.html">SISMEMBER</a><i>key</i><i>member</i><codename="code"class="python">Test if the specified value is a member of the Set at key</code></li><li><ahref="SinterCommand.html">SINTER</a><i>key1</i><i>key2</i> ... <i>keyN</i><codename="code"class="python">Return the intersection between the Sets stored at key1, key2, ..., keyN</code></li><li><ahref="SinterCommand.html">SINTERSTORE</a><i>dstkey</i><i>key1</i><i>key2</i> ... <i>keyN</i><codename="code"class="python">Compute the intersection between the Sets stored at key1, key2, ..., keyN, and store the resulting Set at dstkey</code></li><li><ahref="SmembersCommand.html">SMEMBERS</a><i>key</i><codename="code"class="python">Return all the members of the Set value at key</code></li></ul>
<h2><aname="Commands operating on sets">Commands operating on sets</a></h2><ul><li><ahref="SaddCommand.html">SADD</a><i>key</i><i>member</i><codename="code"class="python">Add the specified member to the Set value at key</code></li><li><ahref="SremCommand.html">SREM</a><i>key</i><i>member</i><codename="code"class="python">Remove the specified member from the Set value at key</code></li><li><ahref="ScardCommand.html">SCARD</a><i>key</i><codename="code"class="python">Return the number of elements (the cardinality) of the Set at key</code></li><li><ahref="SismemberCommand.html">SISMEMBER</a><i>key</i><i>member</i><codename="code"class="python">Test if the specified value is a member of the Set at key</code></li><li><ahref="SinterCommand.html">SINTER</a><i>key1</i><i>key2</i> ... <i>keyN</i><codename="code"class="python">Return the intersection between the Sets stored at key1, key2, ..., keyN</code></li><li><ahref="SinterstoreCommand.html">SINTERSTORE</a><i>dstkey</i><i>key1</i><i>key2</i> ... <i>keyN</i><codename="code"class="python">Compute the intersection between the Sets stored at key1, key2, ..., keyN, and store the resulting Set at dstkey</code></li><li><ahref="SunionCommand.html">SUNION</a><i>key1</i><i>key2</i> ... <i>keyN</i><codename="code"class="python">Return the union between the Sets stored at key1, key2, ..., keyN</code></li><li><ahref="SunionstoreCommand.html">SUNIONSTORE</a><i>dstkey</i><i>key1</i><i>key2</i> ... <i>keyN</i><codename="code"class="python">Compute the union between the Sets stored at key1, key2, ..., keyN, and store the resulting Set at dstkey</code></li><li><ahref="SmembersCommand.html">SMEMBERS</a><i>key</i><codename="code"class="python">Return all the members of the Set value at key</code></li></ul>
<h2><aname="Multiple databases handling commands">Multiple databases handling commands</a></h2><ul><li><ahref="SelectCommand.html">SELECT</a><i>index</i><codename="code"class="python">Select the DB having the specified index</code></li><li><ahref="MoveCommand.html">MOVE</a><i>key</i><i>dbindex</i><codename="code"class="python">Move the key from the currently selected DB to the DB having as index dbindex</code></li><li><ahref="FlushdbCommand.html">FLUSHDB</a><codename="code"class="python">Remove all the keys of the currently selected DB</code></li><li><ahref="FlushallCommand.html">FLUSHALL</a><codename="code"class="python">Remove all the keys from all the databases</code></li></ul>
<h2><aname="Sorting">Sorting</a></h2><ul><li><ahref="SortCommand.html">SORT</a><i>key</i> BY <i>pattern</i> LIMIT <i>start</i><i>end</i> GET <i>pattern</i> ASC|DESC ALPHA <codename="code"class="python">Sort a Set or a List accordingly to the specified parameters</code></li></ul>
<h2><aname="Persistence control commands">Persistence control commands</a></h2><ul><li><ahref="SaveCommand.html">SAVE</a><codename="code"class="python">Synchronously save the DB on disk</code></li><li><ahref="BgsaveCommand.html">BGSAVE</a><codename="code"class="python">Asynchronously save the DB on disk</code></li><li><ahref="LastsaveCommand.html">LASTSAVE</a><codename="code"class="python">Return the UNIX time stamp of the last successfully saving of the dataset on disk</code></li><li><ahref="ShutdownCommand.html">SHUTDOWN</a><codename="code"class="python">Synchronously save the DB on disk, then shutdown the server</code></li></ul>
<i>Time complexity O(N<b>M) worst case where N is the cardinality of the smallest set and M the number of sets_<br/><br/><blockquote>Return the members of a set resulting from the intersection of all thesets hold at the specified keys. Like in LRANGE the result is sent tothe client as a multi-bulk reply (see the protocol specification formore information). If just a single key is specified, then this commandproduces the same result as SELEMENTS. Actually SELEMENTS is just syntaxsugar for SINTERSECT.</blockquote>
<blockquote>If at least one of the specified keys does not exist or does not holda set value an error is returned.</blockquote>
<blockquote>Non existing keys are considered like empty sets, so if one of the keys ismissing an empty set is returned (since the intersection with an emptyset always is an empty set).</blockquote>
<h2><aname="Return value">Return value</a></h2><ahref="ReplyTypes.html">Multi bulk reply</a>, specifically the list of common elements.<h2><aname="See also">See also</a></h2>
<i>Time complexity O(N) where N is the total number of elements in all the provided sets</i><blockquote>Return the members of a set resulting from the union of all thesets hold at the specified keys. Like in LRANGE the result is sent tothe client as a multi-bulk reply (see the protocol specification formore information). If just a single key is specified, then this commandproduces the same result as SELEMENTS.</blockquote>
<blockquote>Non existing keys are considered like empty sets.</blockquote>
<h2><aname="Return value">Return value</a></h2><ahref="ReplyTypes.html">Multi bulk reply</a>, specifically the list of common elements.<h2><aname="See also">See also</a></h2>
<i>Time complexity O(N) where N is the total number of elements in all the provided sets</i><blockquote>This commnad works exactly like SUNION but instead of being returned the resulting set is sotred as <i>dstkey</i>.</blockquote>