No description, website, or topics provided.
Branch: master
Clone or download
Latest commit a411a6d Nov 29, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore Preparing V7 Nov 13, 2017
.travis.yml Bump deps Nov 29, 2018
LICENSE Better docs Apr 4, 2017
Makefile Bump deps Oct 12, 2018
README.md Fixed usage on README Jan 19, 2018
README.md.tpl Better docs Apr 4, 2017
example_test.go Preparing V7 Nov 13, 2017
go.mod Bump deps Nov 29, 2018
go.sum Bump deps Nov 29, 2018
lock.go add token prefix for know who got the lock May 27, 2018
lock_test.go Merge branch 'master' of github.com:fishioon/redis-lock May 31, 2018
options.go add token prefix for know who got the lock May 27, 2018

README.md

redis-lock

Build Status GoDoc Go Report Card License

Simplified distributed locking implementation using Redis. For more information, please see examples.

Examples

import (
  "fmt"
  "time"

  "github.com/bsm/redis-lock"
  "github.com/go-redis/redis"
)

func main() {
	// Connect to Redis
	client := redis.NewClient(&redis.Options{
		Network:	"tcp",
		Addr:		"127.0.0.1:6379",
	})
	defer client.Close()

	// Obtain a new lock with default settings
	lock, err := lock.Obtain(client, "lock.foo", nil)
	if err != nil {
		fmt.Printf("ERROR: %s\n", err.Error())
		return
	} else if lock == nil {
		fmt.Println("ERROR: could not obtain lock")
		return
	}

	// Don't forget to unlock in the end
	defer lock.Unlock()

	// Run something
	fmt.Println("I have a lock!")
	time.Sleep(200 * time.Millisecond)

	// Renew your lock
	ok, err := lock.Lock()
	if err != nil {
		fmt.Printf("ERROR: %s\n", err.Error())
		return
	} else if !ok {
		fmt.Println("ERROR: could not renew lock")
		return
	}
	fmt.Println("I have renewed my lock!")

}

Documentation

Full documentation is available on GoDoc

Testing

Simply run:

make