Predis v0.6.0 Release Notes

Release Date: 2010-05-24 // almost 14 years ago
    • Switched to the new multi-bulk request protocol for all of the commands in the Redis 1.2 and Redis 2.0 profiles. Inline and bulk requests are now deprecated as they will be removed in future releases of Redis.

    • 0๏ธโƒฃ The default server profile is 2.0 (targeting Redis 2.0.x). If you are using older versions of Redis, it is highly recommended that you specify which server profile the client should use (e.g. 1.2 when connecting to instances of Redis 1.2.x).

    • ๐Ÿ‘Œ Support for Redis 1.0 is now optional and it is provided by requiring 'Predis_Compatibility.php' before creating an instance of Predis\Client.

    • ๐Ÿ†• New commands added to the Redis 2.0 profile since Predis 0.5.1:

      • Strings: SETEX, APPEND, SUBSTR
      • ZSets : ZCOUNT, ZRANK, ZUNIONSTORE, ZINTERSTORE, ZREMBYRANK, ZREVRANK
      • Hashes : HSET, HSETNX, HMSET, HINCRBY, HGET, HMGET, HDEL, HEXISTS, HLEN, HKEYS, HVALS, HGETALL
      • PubSub : PUBLISH, SUBSCRIBE, UNSUBSCRIBE
      • Misc. : DISCARD, CONFIG
    • Introduced client-level options with the new Predis\ClientOptions class. Options can be passed to the constructor of Predis\Client in its second argument as an array or an instance of Predis\ClientOptions. For brevity's sake and compatibility with older versions, the constructor still accepts an instance of Predis\RedisServerProfile in its second argument. The currently supported client options are:

      • profile [default: 2.0 as of Predis 0.6.0]: specifies which server profile to use when connecting to Redis. This option accepts an instance of Predis\RedisServerProfile or a string that indicates the version.
      • key_distribution [default: Predis\Distribution\HashRing]: specifies which key distribution strategy to use to distribute keys among the servers that compose a cluster. This option accepts an instance of Predis\Distribution\IDistributionStrategy so that users can implement their own key distribution strategy. Predis\Distribution\KetamaPureRing is an alternative distribution strategy providing a pure-PHP implementation of the same algorithm used by libketama.
      • throw_on_error [default: TRUE]: server errors can optionally be handled "silently": instead of throwing an exception, the client returns an error response type.
      • iterable_multibulk [EXPERIMENTAL - default: FALSE]: in addition to the classic way of fetching a whole multibulk reply into an array, the client can now optionally stream a multibulk reply down to the user code by using PHP iterators. It is just a little bit slower, but it can save a lot of memory in certain scenarios.
    • ๐Ÿ†• New parameters for connections:

      • alias [default: not set]: every connection can now be identified by an alias that is useful to get a specific connections when connected to a cluster of Redis servers.
      • weight [default: not set]: allows to balance keys asymmetrically across multiple servers. This is useful when you have servers with different amounts of memory to distribute the load of your keys accordingly.
      • connection_async [default: FALSE]: estabilish connections to servers in a non-blocking way, so that the client is not blocked while the socket resource performs the actual connection.
      • connection_persistent [default: FALSE]: the underlying socket resource is left open when a script ends its lifecycle. Persistent connections can lead to unpredictable or strange behaviours, so they should be used with extreme care.
    • Introduced the Predis\Pipeline\IPipelineExecutor interface. Classes that implements this interface are used internally by the Predis\CommandPipeline class to change the behaviour of the pipeline when writing/reading commands from one or multiple servers. Here is the list of the default executors:

      • Predis\Pipeline\StandardExecutor: exceptions generated by server errors might be thrown depending on the options passed to the client (see the throw_on_error client option). Instead, protocol or network errors always throw exceptions. This is the default executor for single and clustered connections and shares the same behaviour of Predis 0.5.x.
      • Predis\Pipeline\SafeExecutor: exceptions generated by server, protocol or network errors are not thrown but returned in the response array as instances of Predis\ResponseError or Predis\CommunicationException.
      • Predis\Pipeline\SafeClusterExecutor: this executor shares the same behaviour of Predis\Pipeline\SafeExecutor but it is geared towards clustered connections.
    • ๐Ÿ‘Œ Support for PUB/SUB is handled by the new Predis\PubSubContext class, which could also be used to build a callback dispatcher for PUB/SUB scenarios.

    • When connected to a cluster of connections, it is now possible to get a new Predis\Client instance for a single connection of the cluster by passing its alias/index to the new Predis\Client::getClientFor() method.

    • Predis\CommandPipeline and Predis\MultiExecBlock return their instances when invokink commands, thus allowing method chaining in pipelines and multi-exec blocks.

    • Predis\MultiExecBlock can handle the new DISCARD command.

    • ๐Ÿ‘ Connections now support float values for the connection_timeout parameter to express timeouts with a microsecond resolution.

    • ๐Ÿ›  FIX: TCP connections now respect the read/write timeout parameter when reading the payload of server responses. Previously, stream_get_contents() was being used internally to read data from a connection but it looks like PHP does not honour the specified timeout for socket streams when inside this function.

    • ๐Ÿ›  FIX: The GET parameter for the SORT command now accepts also multiple key patterns by passing an array of strings. (ISSUE #1).

    • ๐Ÿ›  FIX: Replies to the DEL command return the number of elements deleted by the server and not 0 or 1 interpreted as a boolean response. (ISSUE #4).