CHANGELOG 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. v0.6.6 (2011-xx-xx)
  2. * Switched to Redis 2.2 as the default server profile (there are no changes
  3. that would break compatibility with previous releases).
  4. * Added a VERSION constant to Predis\Client.
  5. * Some performance improvements for multibulk replies (parsing them is about
  6. 16% faster than the previous version).
  7. * Predis now uses by default a new protocol reader, more lightweight and
  8. faster than the default handler-based one. Users can revert to the old
  9. protocol reader with the 'reader' client option set to 'composable'.
  10. This client option can also accept custom reader classes implementing the
  11. new Predis\IResponseReader interface.
  12. * Added support for connecting to Redis using UNIX domain sockets (ISSUE #25).
  13. * The "read_write_timeout" connection parameter can now be set to 0 or false
  14. to disable read and write timeouts on connections. The old behaviour of -1
  15. is still intact.
  16. * ZUNIONSTORE and ZINTERSTORE can accept an array to specify a list of the
  17. source keys to be used to populate the destination key.
  18. * MGET, SINTER, SUNION and SDIFF can accept an array to specify the list of
  19. keys. SINTERSTORE, SUNIONSTORE and SDIFFSTORE can also accept an array to
  20. specify the list of source keys.
  21. * SUBSCRIBE and PSUBSCRIBE can accept a list of channels for subscription.
  22. * FIX: some client-side clean-ups for MULTI/EXEC were handled incorrectly in
  23. a couple of corner cases. See also ISSUE #27.
  24. v0.6.5 (2011-02-12)
  25. * FIX: due to an untested internal change introduced in v0.6.4, a wrong
  26. handling of bulk reads of zero-length values was producing protocol
  27. desynchronization errors (ISSUE #20).
  28. v0.6.4 (2011-02-12)
  29. * Various performance improvements (15% ~ 25%) especially when dealing with
  30. long multibulk replies or when using clustered connections.
  31. * Added the "on_retry" option to Predis\MultiExecBlock that can be used to
  32. specify an external callback (or any callable object) that gets invoked
  33. whenever a transaction is aborted by the server.
  34. * Added inline (p)subscribtion via options when initializing an instance of
  35. Predis\PubSubContext.
  36. v0.6.3 (2011-01-01)
  37. * New commands available in the Redis v2.2 profile (dev):
  38. - Strings: SETRANGE, GETRANGE, SETBIT, GETBIT
  39. - Lists : BRPOPLPUSH
  40. * The abstraction for MULTI/EXEC transactions has been dramatically improved
  41. by providing support for check-and-set (CAS) operations when using Redis >=
  42. 2.2. Aborted transactions can also be optionally replayed in automatic up
  43. to a user-defined number of times, after which a Predis\AbortedMultiExec
  44. exception is thrown.
  45. v0.6.2 (2010-11-28)
  46. * Minor internal improvements and clean ups.
  47. * New commands available in the Redis v2.2 profile (dev):
  48. - Strings: STRLEN
  49. - Lists : LINSERT, RPUSHX, LPUSHX
  50. - ZSets : ZREVRANGEBYSCORE
  51. - Misc. : PERSIST
  52. * WATCH also accepts a single array parameter with the keys that should be
  53. monitored during a transaction.
  54. * Improved the behaviour of Predis\MultiExecBlock in certain corner cases.
  55. * Improved parameters checking for the SORT command.
  56. * FIX: the STORE parameter for the SORT command didn't work correctly when
  57. using '0' as the target key (ISSUE #13).
  58. * FIX: the methods for UNWATCH and DISCARD do not break anymore method
  59. chaining with Predis\MultiExecBlock.
  60. v0.6.1 (2010-07-11)
  61. * Minor internal improvements and clean ups.
  62. * New commands available in the Redis v2.2 profile (dev):
  63. - Misc. : WATCH, UNWATCH
  64. * Optional modifiers for ZRANGE, ZREVRANGE and ZRANGEBYSCORE queries are
  65. supported using an associative array passed as the last argument of their
  66. respective methods.
  67. * The LIMIT modifier for ZRANGEBYSCORE can be specified using either:
  68. - an indexed array: array($offset, $count)
  69. - an associative array: array('offset' => $offset, 'count' => $count)
  70. * The method Predis\Client::__construct() now accepts also instances of
  71. Predis\ConnectionParameters.
  72. * Predis\MultiExecBlock and Predis\PubSubContext now throw an exception
  73. when trying to create their instances using a profile that does not
  74. support the required Redis commands or when the client is connected to
  75. a cluster of connections.
  76. * Various improvements to Predis\MultiExecBlock:
  77. - fixes and more consistent behaviour across various usage cases.
  78. - support for WATCH and UNWATCH when using the current development
  79. profile (Redis v2.2) and aborted transactions.
  80. * New signature for Predis\Client::multiExec() which is now able to accept
  81. an array of options for the underlying instance of Predis\MultiExecBlock.
  82. Backwards compatibility with previous releases of Predis is ensured.
  83. * New signature for Predis\Client::pipeline() which is now able to accept
  84. an array of options for the underlying instance of Predis\CommandPipeline.
  85. Backwards compatibility with previous releases of Predis is ensured.
  86. The method Predis\Client::pipelineSafe() is to be considered deprecated.
  87. * FIX: The WEIGHT modifier for ZUNIONSTORE and ZINTERSTORE was handled
  88. incorrectly with more than two weights specified.
  89. v0.6.0 (2010-05-24)
  90. * Switched to the new multi-bulk request protocol for all of the commands
  91. in the Redis 1.2 and Redis 2.0 profiles. Inline and bulk requests are now
  92. deprecated as they will be removed in future releases of Redis.
  93. * The default server profile is "2.0" (targeting Redis 2.0.x). If you are
  94. using older versions of Redis, it is highly recommended that you specify
  95. which server profile the client should use (e.g. "1.2" when connecting
  96. to instances of Redis 1.2.x).
  97. * Support for Redis 1.0 is now optional and it is provided by requiring
  98. 'Predis_Compatibility.php' before creating an instance of Predis\Client.
  99. * New commands added to the Redis 2.0 profile since Predis 0.5.1:
  100. - Strings: SETEX, APPEND, SUBSTR
  101. - ZSets : ZCOUNT, ZRANK, ZUNIONSTORE, ZINTERSTORE, ZREMBYRANK, ZREVRANK
  102. - Hashes : HSET, HSETNX, HMSET, HINCRBY, HGET, HMGET, HDEL, HEXISTS,
  103. HLEN, HKEYS, HVALS, HGETALL
  104. - PubSub : PUBLISH, SUBSCRIBE, UNSUBSCRIBE
  105. - Misc. : DISCARD, CONFIG
  106. * Introduced client-level options with the new Predis\ClientOptions class.
  107. Options can be passed to Predis\Client::__construct in its second argument
  108. as an array or an instance of Predis\ClientOptions. For brevity's sake and
  109. compatibility with older versions, the constructor of Predis\Client still
  110. accepts an instance of Predis\RedisServerProfile in its second argument.
  111. The currently supported client options are:
  112. - profile [default: "2.0" as of Predis 0.6.0]
  113. specifies which server profile to use when connecting to Redis. This
  114. option accepts an instance of Predis\RedisServerProfile or a string
  115. that indicates the target version.
  116. - key_distribution [default: Predis\Distribution\HashRing]
  117. specifies which key distribution strategy to use to distribute keys
  118. among the servers that compose a cluster. This option accepts an
  119. instance of Predis\Distribution\IDistributionStrategy so that users
  120. can implement their own key distribution strategy. Optionally, the new
  121. Predis\Distribution\KetamaPureRing class also provides a pure-PHP
  122. implementation of the same algorithm used by libketama.
  123. - throw_on_error [default: TRUE]
  124. server errors can optionally be handled "silently": instead of throwing
  125. an exception, the client returns an error response type.
  126. - iterable_multibulk [EXPERIMENTAL - default: FALSE]
  127. in addition to the classic way of fetching a whole multibulk reply
  128. into an array, the client can now optionally stream a multibulk reply
  129. down to the user code by using PHP iterators. It is just a little bit
  130. slower, but it can save a lot of memory in certain scenarios.
  131. * New parameters for connections:
  132. - alias [default: not set]
  133. every connection can now be identified by an alias that is useful to
  134. get a certain connection when connected to a cluster of Redis servers.
  135. - weight [default: not set]
  136. allows the client to balance the keys asymmetrically across multiple
  137. servers. This might be useful when you have servers with different
  138. amounts of memory and you want to distribute the load of your keys
  139. accordingly.
  140. - connection_async [default: FALSE]
  141. estabilish connections to servers in a non-blocking way, so that the
  142. client is not blocked while the underlying resource performs the actual
  143. connection.
  144. - connection_persistent [default: FALSE]
  145. the underlying connection resource is left open when a script ends its
  146. lifecycle. Persistent connections can lead to unpredictable or strange
  147. behaviours, so they should be used with extreme care.
  148. * Introduced the Predis\Pipeline\IPipelineExecutor interface. Classes that
  149. implements this interface are used internally by the Predis\CommandPipeline
  150. class to change the behaviour of the pipeline when writing/reading commands
  151. from one or multiple servers. Here is the list of the default executors:
  152. - Predis\Pipeline\StandardExecutor
  153. Exceptions generated by server errors might be thrown depending on the
  154. options passed to the client (see "throw_on_error"). Instead, protocol
  155. or network errors always throw exceptions. This is the default executor
  156. for single and clustered connections and shares the same behaviour of
  157. Predis 0.5.x.
  158. - Predis\Pipeline\SafeExecutor
  159. Exceptions generated by server, protocol or network errors are not
  160. thrown, instead they are returned in the response array as instances of
  161. ResponseError or CommunicationException.
  162. - Predis\Pipeline\SafeClusterExecutor
  163. This executor shares the same behaviour of Predis\Pipeline\SafeExecutor
  164. but it is geared towards clustered connections.
  165. * Support for PUBSUB is handled by the new Predis\PubSubContext class, which
  166. could also be used to build a callback dispatcher for PUBSUB scenarios.
  167. * When connected to a cluster of connections, it is now possible to get a
  168. new Predis\Client instance for a single connection of the cluster by
  169. passing its alias/index to the new Predis\Client::getClientFor() method.
  170. * CommandPipeline and MultiExecBlock return their instances when invoking
  171. commands, thus allowing method chaining in pipelines and multi-exec blocks.
  172. * MultiExecBlock instances can handle the new DISCARD command.
  173. * Connections now support float values for the connection_timeout parameter
  174. to express timeouts with a microsecond resolution.
  175. * FIX: TCP connections now respect the read/write timeout parameter when
  176. reading the payload of server responses. Previously, stream_get_contents()
  177. was being used internally to read data from a connection but it looks like
  178. PHP does not honour the specified timeout for socket streams when inside
  179. this function.
  180. * FIX: The GET parameter for the SORT command now accepts also multiple key
  181. patterns by passing an array of strings. (ISSUE #1).
  182. * FIX: Replies to the DEL command return the number of elements deleted by
  183. the server and not 0 or 1 interpreted as a boolean response. (ISSUE #4).
  184. v0.5.1 (2010-01-23)
  185. * RPOPLPUSH has been changed from bulk command to inline command in Redis
  186. 1.2.1, so ListPopLastPushHead now extends InlineCommand. The old RPOPLPUSH
  187. behavior is still available via the ListPopLastPushHeadBulk class so that
  188. you can override the server profile if you need the old (and uncorrect)
  189. behaviour when connecting to a Redis 1.2.0 instance.
  190. * Added missing support for BGREWRITEAOF for Redis >= 1.2.0
  191. * Implemented a factory method for the RedisServerProfile class to ease the
  192. creation of new server profile instances based on a version string.
  193. v0.5.0 (2010-01-09)
  194. * First versioned release of Predis