Changelog for hedis-0.16.2
# Changelog for Hedis
## 0.16.2
- Add support for Redis 8.8 commands: `arcount`, `ardel`, `argetrange`, `argrep`, `argrepOpts`, `argrepWithValues`, `argrepWithValuesOpts`, `arinfo`, `arinfoFull`, `arinsert`, `arlastitems`, `arlastitemsOpts`, `arlen`, `armget`, `arnext`, `aropValue`, `aropCount`, `arring`, `arscan`, `arscanOpts`, `arseek`, `arset`, `increx`, `xidmprecord`, `xcfgset`, `xnack`.
- Add support for Redis 8.6 commands: `commandList`, `hotkeysStart`, `hotkeysGet`, `hotkeysStartOpts`, `hotkeysStop`, `hotkeysReset`.
- Add support for Redis 8.4 commands: `DELEX`, `DIGEST`, `MSETEX`, `VRANGE`, and `CLUSTER MIGRATION`.
- Add support for Redis 8.2 stream and cluster commands: `XACKDEL`, `XDELEX`, and `CLUSTER SLOT-STATS`.
- Add support for additional Redis 6.2, 7.0, 8.0 commands (COPY, GETDEL/GETEX, HRANDFIELD, LMPOP/ZMPOP, SINTERCARD, FUNCTIONS, COMMAND LIST, etc.)
- Add support for Redis vector set commands
- Add support for RedisJSON commands including `jsonArrappend`, `jsonArrindex`, `jsonArrindexOpts`, `jsonArrlen`, `jsonArrlenAt`, `jsonArrinsert`, `jsonArrpop`, `jsonArrpopAt`, `jsonArrpopAtIndex`, `jsonArrtrim`, `jsonClear`, `jsonClearAt`, `jsonDebug`, `jsonDebugMemory`, `jsonDebugMemoryAt`, `jsonDel`, `jsonDelAt`, `jsonForget`, `jsonForgetAt`, `jsonGet`, `jsonGetOpts`, `jsonMerge`, `jsonMget`, `jsonMset`, `jsonNumincrby`, `jsonNummultby`, `jsonObjkeys`, `jsonObjkeysAt`, `jsonObjlen`, `jsonObjlenAt`, `jsonResp`, `jsonRespAt`, `jsonSet`, `jsonSetOpts`, `jsonStrappend`, `jsonStrappendAt`, `jsonToggle`, `jsonType`, and `jsonTypeAt`.
- Add support for Top-K sketch commands: `topkAdd`, `topkCount`, `topkIncrby`, `topkInfo`, `topkList`, `topkListWithCount`, `topkReserve`, and `topkQuery`.
- Add support for t-digest sketch commands: `tdigestAdd`, `tdigestByrank`, `tdigestByrevrank`, `tdigestCdf`, `tdigestCreate`, `tdigestCreateOpts`, `tdigestInfo`, `tdigestMax`, `tdigestMerge`, `tdigestMergeOpts`, `tdigestMin`, `tdigestQuantile`, `tdigestRank`, `tdigestReset`, `tdigestRevrank`, and `tdigestTrimmedMean`.
- Add support for RedisTimeSeries commands: `tsAdd`, `tsAddOpts`, `tsAlter`, `tsCreate`, `tsCreateOpts`, `tsCreaterule`, `tsCreateruleAlign`, `tsDecrby`, `tsDecrbyOpts`, `tsDel`, `tsDelrule`, `tsGet`, `tsGetOpts`, `tsIncrby`, `tsIncrbyOpts`, `tsInfo`, `tsInfoOpts`, `tsMadd`, `tsMget`, `tsMgetOpts`, `tsMrange`, `tsMrangeOpts`, `tsMrevrange`, `tsMrevrangeOpts`, `tsQueryindex`, `tsRange`, `tsRangeOpts`, `tsRevrange`, and `tsRevrangeOpts`.
- Add support for wait commands: `wait` and `waitaof`.
- Add a dedicated function command module reexporting `functionDelete`, `functionDump`, `functionFlush`, `functionFlushOpts`, `functionKill`, `functionLoad`, `functionLoadReplace`, `functionRestore`, `functionRestoreOpts`, and `functionStats`.
## 0.16.1
- PR #248 Introduced nix flakes and reproducible build environment. Thanks to Christian Georgii
- PR #249 PubSub supported on a cluster
- PR #250 All geospatial commands were supported.
- PR #251 New withPubSub for lightweight connections were introduced
- PR #253 Add runRedisNonBlocking function that will skip action if no connections in the pool are
available. Thanks to Chordify
## 0.16
- PR #176. Exposed RedisArg type class so it's possible to (de)serialize application data structures.
- PR #182. Add MonadTrans instance for MonadRedis.
- PR #198. Extended Redis 6 and 7 support.
- add `xgroupCreate`, `xgroupCreateConsumer`, `xgroupSetId`;
- added support of the message trimming by message;
- add support for count parameter for approximate trimming.
- New internal functions `unsubscribe1`, `punsubscribe1` functions that do not remove all subscriptions when empty lst is passed
- Fixes in cluster support:
- connect authorizes with all nodes
- TLS connection is instantiated with all nodes
- Fixed resource leakage
- Added new methods for the cluster mode:
- requestMasterNodes, masterNodes, getRandomConnection
Breaking changes:
- **Connection** Fix connection API.
```haskell
data PortID = PortNumber NS.PortNumber
| UnixSocket String
deriving (Eq, Show)
```
And introduce instead `ConnectAddr`:
```haskell
data ConnectAddr
= ConnectAddrHostPort NS.HostName NS.PortNumber
| ConnectAddrUnixSocket String
deriving (Eq, Show)
```
It allow to remove a hack with ignored path.
- **URI parsing** follows the redis client spec. Main changes:
1. In `redis://password@host`, `password` is parsed as a password instead of a username.
2. `redis-socket://[[username:]password@]path` is supported.
- **xpendingDetail** instead of 'Maybe ByteString' for a consumer name the method
receives XPendingOpts structure that can take number of milliseconds and consumer name.
In order to preserve an old behavior code should be rewritten as:
``` haskell
xpendingDetails s g f l t Nothing -> xpendingSummary s g f l t defaultXPendingDetailOpts
xpendingDetails s g f l t (Just c) -> xpendingSummary s g f l t defaultXPendingDetailOpts{xPeedingDetailConsumer=Just c)
```
- **xpendingSummary** no longer accepts consumer arguments as it was done in violation to spec and methodd never worked this way
- **XTrimOpts** type changed, because previous type didn't hold library invariants now instead of a simple ADT XTrimOpts is data that defines strategy of trimming and type, exact or approximate. Here is a conversion table:
NoArg -> is not representable,
In xaddOpts options use Nothing instead;
In xtrim using NoArgs as a bug.
Maxlen n -> TrimOpts{trimOptsStrategy=TrimMaxlen n, trimOptsType=TrimExact};
MaxlenApprox n -> TrimOpts{trumOptsStrategy=TrimMaxlen n, trimOptsType=TrimApprox Nothing};
- 'addChannelsAndWait', 'removeChannelsAndWait' now wait only the channels that we run
operations on, instead of waiting changes from all threads.
- `xreadGroupOpts` now accepts new `XReadGroupOpts` instead of `XReadOpts` type.
## 0.15.2
* PR #189. Document that UnixSocket ignores connectHost
* PR #190. mtl version update
## 0.15.1
* PR #181. Add MonadUnliftIO instance
## 0.15.0
* PR #174, Issue #173. Hedis fails to decode xstreamInfo response in case when the stream is empty
## 0.14.3
* PR #171. Support GHC 9
## 0.14.2
* PR #163. support for redis 6.0 COMMAND format
* PR #164. remove invalid tests for Redis Cluster
## 0.14.1
* PR #162. Improved documentation for EVALSHA
## 0.14.0
* PR #157. Clustering support
## 0.13.1
* PR #158. Upgrade to Redis 6.0.9 & Fix auth test
* PR #160. Fix GHC 8.0.1 compat
## 0.13.0
* PR #159. Issue #152. Make HSET return integer instead of bool
## 0.12.15
* PR #154. Implement Redis Sentinel support
## 0.12.14
* PR #153. Publicly expose ConnectTimeout exception
## 0.12.13
* PR #150, Issue #143. Leaking sockets when connection fails
## 0.12.12
* PR #149. Make withConnect friendly to transformer stack
## 0.12.11
* Expose `withCheckedConnect`, `withConnect`
## 0.12.9
* Expose the `Database.Redis.Core.Internal` module (see https://github.com/informatikr/hedis/issues/144 )
## 0.12.8
* PR #140. Added support of +/- inf redis argument
## 0.12.7
* PR #139. fix MonadFail instance
## 0.12.6
* PR #138, Issue #137. Derive MonadFail for the Redis monad
## 0.12.5
Issue #136 fix slowlog parsing
## 0.12.4
* Add upper bound on network package
## 0.12.3
* Issue #135. Upper the base bound
## 0.12.2
* PR #134. Fix some asynchronous exception safety problems
## 0.12.1
* PR #133. Fixes to stream commands
## 0.12.0
* PR #130. Bring back ability to connect via a Unix Socket
## 0.11.1
* PR #129. Fix tests
## 0.11.0
* PR #126. Fixes for network 2.8 and 3.0
## 0.10.10
* Only disable warnings for GHC 8.6, fix build
## 0.10.9
* Remove deprecation warnings
## 0.10.8
* PR #121. make xgroupCreate return Status
## 0.10.7
* PR #121. Fix streaming on redis 5.0.2
* PR #121. Get rid of slave-thread
## 0.10.6
* PR #120. Add withConnect, withCheckedConnect
## 0.10.5
* PR #XXX Fix CI builds with updated Redis version
## 0.10.4
* PR #112. Implement streams commands
## 0.10.3
* PR #110. Add disconnect which destroys all (idle) resources in the pool
## 0.10.2
* PR #108. Add TLS support
## 0.10.1
* PR #104. Add a Semigroup instance (fix GHC 8.4)
## 0.10.0
* PR #102. Return list from srandmemberN
* PR #103. Add spopN
* PR #101. Add parseConnectInfo
* PR #100, Issue #99. Throw error when AUTH or SELECT fails on connect
## 0.9.12
* PR #98. Added `connectTimeout` option
## 0.9.11
* PR #94. Refactor fix for issue #92 - (Connection to Unix sockets is broken)
## 0.9.10
* PR #93, Issue #92. Connection to Unix sockets is broken
## 0.9.9
* PR #90. set SO_KEEPALIVE option on underlying connection socket
## 0.9.8
* Fix syntax errors from redis when using scanOpts to specify match
pattern or count options (see PR #88)
## 0.9.7
* Expose returnDecode method of RedisCtx (see issue #83)
## 0.9.6
* Export Condition constructors (see PR #86)
## 0.9.2
* Added multithreaded pub/sub message processing (see PR #77)
## 0.9.0
* Merge in a fresh commands.json and a set of new commands
implemented. See PR #52 for more info
## 0.8.3
* Export MonadRedis methods
## 0.8.1
* Export unRedis/reRedis internalish functions which let you define
MonadCatch instance easily (see PR #73)
## 0.8.0
* Major speed improvement by using non-backtracking parser (PR #69)
## 0.7.10
* Improved performance (PR #64)
## 0.7.7
* Close connection handle on error
## 0.7.2
* Improve speed, rewrite internal logic (PR #56)
## 0.7.1
* Add NFData instances
## 0.7.0
* Enforce all replies being recieved in runRedis. Pipelining between runRedis
calls doesn't work now.
## 0.6.10
* Add HyperLogLog support
## 0.6.4
* New connection option to automatically SELECT a database.
## 0.5 -> 0.6
* Changed return type of HDEL from Bool to Integer.
* Some documentation updates.
## 0.5 -> 0.5.1
* New commands: DUMP, RESTORE, BITOP, BITCOUNT.
* Removed the dependency on stm.
* Improved performance of Queued in long transactions.
* Minor documentation updates.
## 0.4.1 -> 0.5
* Added new Redis 2.6 commands, including Lua scripting support.
* A transaction context is now created by using the 'multiExec' function.
The functions 'multi', 'exec' and 'discard' are no longer available
individually.
* Inside of a transaction, commands return their results wrapped in a
composable /future/, called 'Queued'.
* The 'getType' command (the Redis TYPE command) now has a custom return
type 'RedisType'.
* Minor improvements and fixes to the documentation.
## 0.3.2 -> 0.4.1
* The following commands got a 'Maybe' added to their return type, to
properly handle Redis returning `nil`-replies: `brpoplpush`, `lindex`, `lpop`,
`objectEncoding`, `randomkey`, `rpop`, `rpoplpush`, `spop`, `srandmember`,
`zrank`, `zrevrank`, `zscore`.
* Updated dependencies on `bytestring-lexing` and `stm`.
* Minor improvements and fixes to the documentation.