2019-11-28 15:37:33 +00:00
|
|
|
# levelqueue
|
|
|
|
|
|
|
|
Level queue is a simple queue golang library base on go-leveldb.
|
|
|
|
|
|
|
|
[![Build Status](https://drone.gitea.com/api/badges/lunny/levelqueue/status.svg)](https://drone.gitea.com/lunny/levelqueue) [![](http://gocover.io/_badge/gitea.com/lunny/levelqueue)](http://gocover.io/gitea.com/lunny/levelqueue)
|
|
|
|
[![](https://goreportcard.com/badge/gitea.com/lunny/levelqueue)](https://goreportcard.com/report/gitea.com/lunny/levelqueue)
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
```
|
|
|
|
go get gitea.com/lunny/levelqueue
|
|
|
|
```
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
```Go
|
|
|
|
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
|
|
|
|
})
|
2020-02-02 23:19:58 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
You can now create a Set from a leveldb:
|
|
|
|
|
|
|
|
```Go
|
|
|
|
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:
|
|
|
|
|
|
|
|
```Go
|
|
|
|
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.
|