A golang queue library based on go-leveldb
Andrew Thornton
47d1e224cd
Unfortunately the locking order in the queue.Close() function is incorrect as the queue.Len() function locks the lowLock before the highLock. We therefore must lock the lowLock before the highLock. Signed-off-by: Andrew Thornton <art27@cantab.net> Reviewed-on: #5 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: Andrew Thornton <art27@cantab.net> Co-committed-by: Andrew Thornton <art27@cantab.net> |
||
---|---|---|
.circleci | ||
.drone.yml | ||
.gitignore | ||
error.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
queue_test.go | ||
queue.go | ||
README.md | ||
set_test.go | ||
set.go | ||
uniquequeue_test.go | ||
uniquequeue.go |
levelqueue
Level queue is a simple queue golang library base on go-leveldb.
Installation
go get gitea.com/lunny/levelqueue
Usage
queue, err := levelqueue.Open("./queue")
err = queue.RPush([]byte("test"))
// pop an element from left of the queue
data, err = queue.LPop()
// if handle success, element will be pop, otherwise it will be keep
queue.LHandle(func(dt []byte) error{
return nil
})
You can now create a Set from a leveldb:
set, err := levelqueue.OpenSet("./set")
added, err:= set.Add([]byte("member1"))
has, err := set.Has([]byte("member1"))
members, err := set.Members()
removed, err := set.Remove([]byte("member1"))
And you can create a UniqueQueue from a leveldb:
queue, err := levelqueue.OpenUnique("./queue")
err := queue.RPush([]byte("member1"))
err = queue.LPush([]byte("member1"))
// Will return ErrAlreadyInQueue
// and so on.
Creating Queues, UniqueQueues and Sets from already open DB
If you have an already open DB you can create these from this using the
NewQueue
, NewUniqueQueue
and NewSet
functions.