CHANGELOG 9.3 KB

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