CHANGELOG 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. v0.7.0 (2010-xx-xx)
  2. * Support for long aliases (method names) for Redis commands has been dropped.
  3. * List of the methods removed in this release:
  4. - Predis\Client::create()
  5. This method has been removed because it was considered redundant
  6. with Predis\Client::__construct() since Predis 0.6.0.
  7. - Predis\Client::pipelineSafe()
  8. This method was deprecated in Predis 0.6.1 and now it has been finally
  9. removed. Use Predis\Client::pipeline(array('safe' => true)).
  10. - Predis\Client::rawCommand()
  11. This method was removed due to interface inconsistencies with the
  12. underlying connection class used internally by the client instance.
  13. * The Predis\MultiBulkCommand class has been merged into Predis\Command and
  14. thus removed. If you have code that extends Predis\MultiBulkCommand but
  15. you can not afford to update your code, you can always implement it again
  16. as an abstract class simply by extending Predis\Command.
  17. * The Predis\IConnection interface has been splitted in two different new
  18. interfaces: Predis\IConnectionSingle and Predis\IConnectionCluster.
  19. * Developers can now register their own classes that implements the
  20. Predis\IConnectionSingle interface to handle different URI schemes such as
  21. 'tcp', 'unix', 'udp' or anything else. Everything is handled by the new
  22. Predis\ConnectionFactory class.
  23. * Added support for UNIX domain sockets (supported by Redis 2.2) with the new
  24. Predis\UnixDomainSocketConnection class and the 'unix' scheme.
  25. * Added the new Predis\ICommand interface. The Predis\Command class now
  26. implements this interface that is used in the core bits of Predis.
  27. * Implicit extraction of arguments when the only argument passed to a
  28. multibulk command is an array is not supported anymore and must be done
  29. explicitly inside Predis\Command::filterArguments().
  30. * It is now possible to pass instances of Predis\ConnectionParameters and
  31. Predis\IConnection as parameters of Predis\Client::__construct().
  32. v0.6.1 (2010-07-11)
  33. * Minor internal improvements and clean ups.
  34. * New commands available in the Redis v2.2 profile (dev):
  35. - Misc. : WATCH, UNWATCH
  36. * Optional modifiers for ZRANGE, ZREVRANGE and ZRANGEBYSCORE queries are
  37. supported using an associative array passed as the last argument of their
  38. respective methods.
  39. * The LIMIT modifier for ZRANGEBYSCORE can be specified using either:
  40. - an indexed array: array($offset, $count)
  41. - an associative array: array('offset' => $offset, 'count' => $count)
  42. * The method Predis\Client::__construct() now accepts also instances of
  43. Predis\ConnectionParameters.
  44. * Predis\MultiExecBlock and Predis\PubSubContext now throw an exception
  45. when trying to create their instances using a profile that does not
  46. support the required Redis commands or when the client is connected to
  47. a cluster of connections.
  48. * Various improvements to Predis\MultiExecBlock:
  49. - fixes and more consistent behaviour across various usage cases.
  50. - support for WATCH and UNWATCH when using the current development
  51. profile (Redis v2.2) and aborted transactions.
  52. * New signature for Predis\Client::multiExec() which is now able to accept
  53. an array of options for the underlying instance of Predis\MultiExecBlock.
  54. Backwards compatibility with previous releases of Predis is ensured.
  55. * New signature for Predis\Client::pipeline() which is now able to accept
  56. an array of options for the underlying instance of Predis\CommandPipeline.
  57. Backwards compatibility with previous releases of Predis is ensured.
  58. The method Predis\Client::pipelineSafe() is to be considered deprecated.
  59. * FIX: The WEIGHT modifier for ZUNIONSTORE and ZINTERSTORE was handled
  60. incorrectly with more than two weights specified.
  61. v0.6.0 (2010-05-24)
  62. * Switched to the new multi-bulk request protocol for all of the commands
  63. in the Redis 1.2 and Redis 2.0 profiles. Inline and bulk requests are now
  64. deprecated as they will be removed in future releases of Redis.
  65. * The default server profile is "2.0" (targeting Redis 2.0.x). If you are
  66. using older versions of Redis, it is highly recommended that you specify
  67. which server profile the client should use (e.g. "1.2" when connecting
  68. to instances of Redis 1.2.x).
  69. * Support for Redis 1.0 is now optional and it is provided by requiring
  70. 'Predis_Compatibility.php' before creating an instance of Predis\Client.
  71. * New commands added to the Redis 2.0 profile since Predis 0.5.1:
  72. - Strings: SETEX, APPEND, SUBSTR
  73. - ZSets : ZCOUNT, ZRANK, ZUNIONSTORE, ZINTERSTORE, ZREMBYRANK, ZREVRANK
  74. - Hashes : HSET, HSETNX, HMSET, HINCRBY, HGET, HMGET, HDEL, HEXISTS,
  75. HLEN, HKEYS, HVALS, HGETALL
  76. - PubSub : PUBLISH, SUBSCRIBE, UNSUBSCRIBE
  77. - Misc. : DISCARD, CONFIG
  78. * Introduced client-level options with the new Predis\ClientOptions class.
  79. Options can be passed to Predis\Client::__construct in its second argument
  80. as an array or an instance of Predis\ClientOptions. For brevity's sake and
  81. compatibility with older versions, the constructor of Predis\Client still
  82. accepts an instance of Predis\RedisServerProfile in its second argument.
  83. The currently supported client options are:
  84. - profile [default: "2.0" as of Predis 0.6.0]
  85. specifies which server profile to use when connecting to Redis. This
  86. option accepts an instance of Predis\RedisServerProfile or a string
  87. that indicates the target version.
  88. - key_distribution [default: Predis\Distribution\HashRing]
  89. specifies which key distribution strategy to use to distribute keys
  90. among the servers that compose a cluster. This option accepts an
  91. instance of Predis\Distribution\IDistributionStrategy so that users
  92. can implement their own key distribution strategy. Optionally, the new
  93. Predis\Distribution\KetamaPureRing class also provides a pure-PHP
  94. implementation of the same algorithm used by libketama.
  95. - throw_on_error [default: TRUE]
  96. server errors can optionally be handled "silently": instead of throwing
  97. an exception, the client returns an error response type.
  98. - iterable_multibulk [EXPERIMENTAL - default: FALSE]
  99. in addition to the classic way of fetching a whole multibulk reply
  100. into an array, the client can now optionally stream a multibulk reply
  101. down to the user code by using PHP iterators. It is just a little bit
  102. slower, but it can save a lot of memory in certain scenarios.
  103. * New parameters for connections:
  104. - alias [default: not set]
  105. every connection can now be identified by an alias that is useful to
  106. get a certain connection when connected to a cluster of Redis servers.
  107. - weight [default: not set]
  108. allows the client to balance the keys asymmetrically across multiple
  109. servers. This might be useful when you have servers with different
  110. amounts of memory and you want to distribute the load of your keys
  111. accordingly.
  112. - connection_async [default: FALSE]
  113. estabilish connections to servers in a non-blocking way, so that the
  114. client is not blocked while the underlying resource performs the actual
  115. connection.
  116. - connection_persistent [default: FALSE]
  117. the underlying connection resource is left open when a script ends its
  118. lifecycle. Persistent connections can lead to unpredictable or strange
  119. behaviours, so they should be used with extreme care.
  120. * Introduced the Predis\Pipeline\IPipelineExecutor interface. Classes that
  121. implements this interface are used internally by the Predis\CommandPipeline
  122. class to change the behaviour of the pipeline when writing/reading commands
  123. from one or multiple servers. Here is the list of the default executors:
  124. - Predis\Pipeline\StandardExecutor
  125. Exceptions generated by server errors might be thrown depending on the
  126. options passed to the client (see "throw_on_error"). Instead, protocol
  127. or network errors always throw exceptions. This is the default executor
  128. for single and clustered connections and shares the same behaviour of
  129. Predis 0.5.x.
  130. - Predis\Pipeline\SafeExecutor
  131. Exceptions generated by server, protocol or network errors are not
  132. thrown, instead they are returned in the response array as instances of
  133. ResponseError or CommunicationException.
  134. - Predis\Pipeline\SafeClusterExecutor
  135. This executor shares the same behaviour of Predis\Pipeline\SafeExecutor
  136. but it is geared towards clustered connections.
  137. * Support for PUBSUB is handled by the new Predis\PubSubContext class, which
  138. could also be used to build a callback dispatcher for PUBSUB scenarios.
  139. * When connected to a cluster of connections, it is now possible to get a
  140. new Predis\Client instance for a single connection of the cluster by
  141. passing its alias/index to the new Predis\Client::getClientFor() method.
  142. * CommandPipeline and MultiExecBlock return their instances when invoking
  143. commands, thus allowing method chaining in pipelines and multi-exec blocks.
  144. * MultiExecBlock instances can handle the new DISCARD command.
  145. * Connections now support float values for the connection_timeout parameter
  146. to express timeouts with a microsecond resolution.
  147. * FIX: TCP connections now respect the read/write timeout parameter when
  148. reading the payload of server responses. Previously, stream_get_contents()
  149. was being used internally to read data from a connection but it looks like
  150. PHP does not honour the specified timeout for socket streams when inside
  151. this function.
  152. * FIX: The GET parameter for the SORT command now accepts also multiple key
  153. patterns by passing an array of strings. (ISSUE #1).
  154. * FIX: Replies to the DEL command return the number of elements deleted by
  155. the server and not 0 or 1 interpreted as a boolean response. (ISSUE #4).
  156. v0.5.1 (2010-01-23)
  157. * RPOPLPUSH has been changed from bulk command to inline command in Redis
  158. 1.2.1, so ListPopLastPushHead now extends InlineCommand. The old RPOPLPUSH
  159. behavior is still available via the ListPopLastPushHeadBulk class so that
  160. you can override the server profile if you need the old (and uncorrect)
  161. behaviour when connecting to a Redis 1.2.0 instance.
  162. * Added missing support for BGREWRITEAOF for Redis >= 1.2.0
  163. * Implemented a factory method for the RedisServerProfile class to ease the
  164. creation of new server profile instances based on a version string.
  165. v0.5.0 (2010-01-09)
  166. * First versioned release of Predis