Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds a few commands related to streams:
Overall the code is heavily inspired from the sorted sets implementation.
The data structure used to store streams on the DB is a slice of
streamEntry
which are composed of a pair ofuint64
for the ID, and a[][2]string
for the values to guarantee the insertion order."Direct" functions have been added, namely
XAdd
andStream
. Note thatXAdd
behaves differently from the XADD command since it allows for adding items with an ID inferior to the latest existing ID. I figured this would be useful for writing tests?XADD uses
time.Now()
when autogenerating an ID, which replicates Redis's behavior.I did not implement the
MAXLEN
option of XADD, so a custom error is returned for now. Implementing it should be straightforward along with XDEL and XTRIM.XLEN, XRANGE and XREVRANGE should be identical feature-wise to Redis.
The range commands are more heavily tested via integration tests since redigo does not provide native support for streams (see gomodule/redigo#375).
Fixes #57 !