Level queue is a simple queue golang library base on go-leveldb.
Find a file
Renovate Bot a74bb3f082
All checks were successful
check-and-test / check-and-test (push) Successful in 23s
Update https://data.forgejo.org/actions/forgejo-release action to v2.11.3 (#13)
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-07 23:08:33 +00:00
.forgejo/workflows Update https://data.forgejo.org/actions/forgejo-release action to v2.11.3 (#13) 2026-03-07 23:08:33 +00:00
.gitignore chore(.gitignore): add emacs 2025-02-28 06:02:46 +01:00
error.go Add Set and UniqueQueue implementations (#1) 2020-01-18 05:41:15 +00:00
go.mod Update dependency go to v1.25 (#9) 2026-01-25 14:31:55 +00:00
go.sum Update module github.com/stretchr/testify to v1.11.0 (#6) 2025-08-25 03:55:34 +00:00
LICENSE init project 2019-02-17 14:34:03 +08:00
queue.go Prevent NPE if pushes/gets occur after the db is already closed (#6) 2022-07-29 13:47:28 +08:00
queue_test.go fix bug 2019-11-28 16:44:03 +08:00
README.md chore: relocate to code.forgejo.org/forgejo/levelqueue 2025-02-28 07:27:48 +01:00
renovate.json chore(renovate): enable renovate 2025-02-28 06:12:12 +01:00
set.go Prevent NPE if pushes/gets occur after the db is already closed (#6) 2022-07-29 13:47:28 +08:00
set_test.go Add Set and UniqueQueue implementations (#1) 2020-01-18 05:41:15 +00:00
uniquequeue.go Prevent NPE if pushes/gets occur after the db is already closed (#6) 2022-07-29 13:47:28 +08:00
uniquequeue_test.go Add Set and UniqueQueue implementations (#1) 2020-01-18 05:41:15 +00:00

levelqueue

Level queue is a simple queue golang library base on go-leveldb.

Installation

go get code.forgejo.org/forgejo/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.