Update README.

This commit is contained in:
Daniele Alessandri
2011-03-05 18:42:52 +01:00
parent f668560a5a
commit 3b4ef4f33e
+36 -23
View File
@@ -11,10 +11,10 @@ Please refer to the TODO file to see which issues are still pending and what is
## Main features ##
- Full support for Redis 1.2, 2.0 and 2.2. Different versions of Redis are supported via server profiles.
- Client-side sharding (support for consistent hashing and custom distribution strategies).
- Command pipelining on single and multiple connections.
- Abstraction for Redis transactions (>= 2.0) with support for CAS operations (>= 2.2).
- Lazy connections (connections to Redis instances are only established just in time).
- Client-side sharding with support for consistent hashing and custom distribution strategies.
- Command pipelining on single and aggregated connections.
- Abstraction for Redis transactions (Redis >= 2.0) with support for CAS operations (Redis >= 2.2).
- Lazy connections to Redis instances are automatically estabilished upon the first call to a command.
- Ability to connect to Redis using TCP/IP or UNIX domain sockets by default.
- Flexible system to define and register your own set of commands to a client instance.
@@ -47,34 +47,30 @@ you can load Predis in your scripts simply by using functions such as _require_
### Connecting to a local instance of Redis ###
You don't have to specify a tcp host and port when connecting to Redis instances
running on the localhost on the default port:
You don't have to specify a tcp host and port when connecting to Redis instances running on the
localhost on the default port:
$redis = new Predis\Client();
$redis->set('library', 'predis');
$value = $redis->get('library');
You can also use an URI string or an array-based dictionary to specify the connection parameters:
### Pipelining multiple commands to a remote instance of Redis ##
Pipelining helps with performances when there is the need to issue many commands
to a server in one go:
$redis = new Predis\Client('redis://10.0.0.1:6379/');
$replies = $redis->pipeline(function($pipe) {
$pipe->ping();
$pipe->incrby('counter', 10);
$pipe->incrby('counter', 30);
$pipe->get('counter');
});
$redis = new Predis\Client('tcp://10.0.0.1:6379');
// is equivalent to:
$redis = new Predis\Client(array(
'scheme' => 'tcp',
'host' => '10.0.0.1',
'port' => 6379,
));
### Pipelining multiple commands to multiple instances of Redis (sharding) ##
### Pipelining multiple commands to multiple instances of Redis with client-side sharding ###
Predis supports data sharding using consistent-hashing on keys on the client side.
Furthermore, a pipeline can be initialized on a cluster of redis instances in the
same exact way they are created on single connection. Sharding is still transparent
to the user:
Pipelining helps with performances when there is the need to issue many commands to a server
in one go. Furthermore, pipelining works transparently even on aggregated connections. Predis,
in fact, supports client-side sharding of data using consistent-hashing on keys and clustered
connections are supported natively by the client class.
$redis = new Predis\Client(array(
array('host' => '10.0.0.1', 'port' => 6379),
@@ -89,6 +85,23 @@ to the user:
});
### Overriding standard connection classes with custom ones ###
Predis allows developers to create new connection classes to add support for new protocols
or override the existing ones to provide a different implementation compared to the default
classes. This can be obtained by subclassing the Predis\Network\IConnectionSingle interface.
class MyConnectionClass implements Predis\Network\IConnectionSingle {
// implementation goes here
}
// Let Predis automatically use your own class to handle the default TCP connection
Predis\Client::defineConnection('tcp', 'MyConnectionClass');
You can have a look at the Predis\Network namespace for working examples.
### Definition and runtime registration of new commands on the client ###
Let's suppose Redis just added the support for a brand new feature associated