a reliable, lightweight message queue for golang
- Queue Interaction: Enables push and pop interactions with the message queue.
- Atomic: Handles push and pop operations atomically, providing safety against race conditions.
- Persistence: Ensures no message loss, even in the event of an unexpected program termination.
go get -u github.com/asheswook/redis-queue
package main
import (
"github.com/redis/go-redis/v9"
redisqueue "github.com/asheswook/redis-queue"
)
func main() {
// Using go-redis client
// You can also use normal client instead of cluster client
client := redis.NewClusterClient(
&redis.ClusterOptions{
Addrs: config.Addrs,
},
)
cfg := redisqueue.NewConfig()
cfg.Redis = client
cfg.Queue.Name = "YOUR_QUEUE_NAME"
cfg.Safe.AckZSetName = "YOUR_QUEUE_NAME:ack"
queue, err := redisqueue.NewSafeQueue(cfg)
if err != nil {
panic(err)
}
err = queue.Push("testPayload")
msg, err := queue.SafePop()
if msg == nil && err == nil {
// No message
}
if err != nil {
// Error
}
// Signal the message has been processed successfully.
_ = msg.Ack()
}| Method | Time Complexity |
|---|---|
Push(payload) |
O(1) |
Pop() |
O(1) |
| Method | Time Complexity |
|---|---|
Push(payload) |
O(1) |
Pop() |
O(1) |
SafePop() |
O(log N) |
Ack() |
O(log N) |

