123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- v0.6.6 (2011-04-01)
- * Switched to Redis 2.2 as the default server profile (there are no changes
- that would break compatibility with previous releases). Long command names
- are no more supported by default but if you need them you can still require
- Predis_Compatibility.php to avoid breaking compatibility.
- * Added a VERSION constant to Predis\Client.
- * Some performance improvements for multibulk replies (parsing them is about
- 16% faster than the previous version). A few core classes have been heavily
- optimized to reduce overhead when creating new instances.
- * Predis now uses by default a new protocol reader, more lightweight and
- faster than the default handler-based one. Users can revert to the old
- protocol reader with the 'reader' client option set to 'composable'.
- This client option can also accept custom reader classes implementing the
- new Predis\IResponseReader interface.
- * Added support for connecting to Redis using UNIX domain sockets (ISSUE #25).
- * The "read_write_timeout" connection parameter can now be set to 0 or false
- to disable read and write timeouts on connections. The old behaviour of -1
- is still intact.
- * ZUNIONSTORE and ZINTERSTORE can accept an array to specify a list of the
- source keys to be used to populate the destination key.
- * MGET, SINTER, SUNION and SDIFF can accept an array to specify the list of
- keys. SINTERSTORE, SUNIONSTORE and SDIFFSTORE can also accept an array to
- specify the list of source keys.
- * SUBSCRIBE and PSUBSCRIBE can accept a list of channels for subscription.
- * FIX: some client-side clean-ups for MULTI/EXEC were handled incorrectly in
- a couple of corner cases. See also ISSUE #27.
- v0.6.5 (2011-02-12)
- * FIX: due to an untested internal change introduced in v0.6.4, a wrong
- handling of bulk reads of zero-length values was producing protocol
- desynchronization errors (ISSUE #20).
- v0.6.4 (2011-02-12)
- * Various performance improvements (15% ~ 25%) especially when dealing with
- long multibulk replies or when using clustered connections.
- * Added the "on_retry" option to Predis\MultiExecBlock that can be used to
- specify an external callback (or any callable object) that gets invoked
- whenever a transaction is aborted by the server.
- * Added inline (p)subscribtion via options when initializing an instance of
- Predis\PubSubContext.
- v0.6.3 (2011-01-01)
- * New commands available in the Redis v2.2 profile (dev):
- - Strings: SETRANGE, GETRANGE, SETBIT, GETBIT
- - Lists : BRPOPLPUSH
- * The abstraction for MULTI/EXEC transactions has been dramatically improved
- by providing support for check-and-set (CAS) operations when using Redis >=
- 2.2. Aborted transactions can also be optionally replayed in automatic up
- to a user-defined number of times, after which a Predis\AbortedMultiExec
- exception is thrown.
- v0.6.2 (2010-11-28)
- * Minor internal improvements and clean ups.
- * New commands available in the Redis v2.2 profile (dev):
- - Strings: STRLEN
- - Lists : LINSERT, RPUSHX, LPUSHX
- - ZSets : ZREVRANGEBYSCORE
- - Misc. : PERSIST
- * WATCH also accepts a single array parameter with the keys that should be
- monitored during a transaction.
- * Improved the behaviour of Predis\MultiExecBlock in certain corner cases.
- * Improved parameters checking for the SORT command.
- * FIX: the STORE parameter for the SORT command didn't work correctly when
- using '0' as the target key (ISSUE #13).
- * FIX: the methods for UNWATCH and DISCARD do not break anymore method
- chaining with Predis\MultiExecBlock.
- v0.6.1 (2010-07-11)
- * Minor internal improvements and clean ups.
- * New commands available in the Redis v2.2 profile (dev):
- - Misc. : WATCH, UNWATCH
- * Optional modifiers for ZRANGE, ZREVRANGE and ZRANGEBYSCORE queries are
- supported using an associative array passed as the last argument of their
- respective methods.
- * The LIMIT modifier for ZRANGEBYSCORE can be specified using either:
- - an indexed array: array($offset, $count)
- - an associative array: array('offset' => $offset, 'count' => $count)
- * The method Predis\Client::__construct() now accepts also instances of
- Predis\ConnectionParameters.
- * Predis\MultiExecBlock and Predis\PubSubContext now throw an exception
- when trying to create their instances using a profile that does not
- support the required Redis commands or when the client is connected to
- a cluster of connections.
- * Various improvements to Predis\MultiExecBlock:
- - fixes and more consistent behaviour across various usage cases.
- - support for WATCH and UNWATCH when using the current development
- profile (Redis v2.2) and aborted transactions.
- * New signature for Predis\Client::multiExec() which is now able to accept
- an array of options for the underlying instance of Predis\MultiExecBlock.
- Backwards compatibility with previous releases of Predis is ensured.
- * New signature for Predis\Client::pipeline() which is now able to accept
- an array of options for the underlying instance of Predis\CommandPipeline.
- Backwards compatibility with previous releases of Predis is ensured.
- The method Predis\Client::pipelineSafe() is to be considered deprecated.
- * FIX: The WEIGHT modifier for ZUNIONSTORE and ZINTERSTORE was handled
- incorrectly with more than two weights specified.
- v0.6.0 (2010-05-24)
- * 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.
- * 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 Predis\Client::__construct in its second argument
- as an array or an instance of Predis\ClientOptions. For brevity's sake and
- compatibility with older versions, the constructor of Predis\Client 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 target 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. Optionally, the new
- Predis\Distribution\KetamaPureRing class also provides 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 certain connection when connected to a cluster of Redis servers.
- - weight [default: not set]
- allows the client to balance the keys asymmetrically across multiple
- servers. This might be useful when you have servers with different
- amounts of memory and you want 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 underlying resource performs the actual
- connection.
- - connection_persistent [default: FALSE]
- the underlying connection 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 "throw_on_error"). 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, instead they are returned in the response array as instances of
- ResponseError or CommunicationException.
- - Predis\Pipeline\SafeClusterExecutor
- This executor shares the same behaviour of Predis\Pipeline\SafeExecutor
- but it is geared towards clustered connections.
- * Support for PUBSUB is handled by the new Predis\PubSubContext class, which
- could also be used to build a callback dispatcher for PUBSUB 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.
- * CommandPipeline and MultiExecBlock return their instances when invoking
- commands, thus allowing method chaining in pipelines and multi-exec blocks.
- * MultiExecBlock instances 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).
- v0.5.1 (2010-01-23)
- * RPOPLPUSH has been changed from bulk command to inline command in Redis
- 1.2.1, so ListPopLastPushHead now extends InlineCommand. The old RPOPLPUSH
- behavior is still available via the ListPopLastPushHeadBulk class so that
- you can override the server profile if you need the old (and uncorrect)
- behaviour when connecting to a Redis 1.2.0 instance.
- * Added missing support for BGREWRITEAOF for Redis >= 1.2.0
- * Implemented a factory method for the RedisServerProfile class to ease the
- creation of new server profile instances based on a version string.
- v0.5.0 (2010-01-09)
- * First versioned release of Predis
|