Skip to content

asheswook/redis-queue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

redis-queue

a reliable, lightweight message queue for golang

Feature

  1. Queue Interaction: Enables push and pop interactions with the message queue.
  2. Atomic: Handles push and pop operations atomically, providing safety against race conditions.
  3. Persistence: Ensures no message loss, even in the event of an unexpected program termination.

Usage

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()
}

How it works

Time Complexity

CommonQueue Methods

Method Time Complexity
Push(payload) O(1)
Pop() O(1)

SafeQueue Methods

Method Time Complexity
Push(payload) O(1)
Pop() O(1)
SafePop() O(log N)
Ack() O(log N)

About

a reliable, lightweight, fast redis message queue for golang

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages