You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zeripath 7f8e3192cd
Allow common redis and leveldb connections (#12385)
* Allow common redis and leveldb connections

Prevents multiple reopening of redis and leveldb connections to the same
place by sharing connections.

Further allows for more configurable redis connection type using the
redisURI and a leveldbURI scheme.

Signed-off-by: Andrew Thornton <art27@cantab.net>

* add unit-test

Signed-off-by: Andrew Thornton <art27@cantab.net>

* as per @lunny

Signed-off-by: Andrew Thornton <art27@cantab.net>

* add test

Signed-off-by: Andrew Thornton <art27@cantab.net>

* Update modules/cache/cache_redis.go

* Update modules/queue/queue_disk.go

* Update modules/cache/cache_redis.go

* Update modules/cache/cache_redis.go

* Update modules/queue/unique_queue_disk.go

* Update modules/queue/queue_disk.go

* Update modules/queue/unique_queue_disk.go

* Update modules/session/redis.go

Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Co-authored-by: Lauris BH <lauris@nix.lv>
4 years ago
..
internal Allow common redis and leveldb connections (#12385) 4 years ago
.gitignore Allow common redis and leveldb connections (#12385) 4 years ago
.golangci.yml Allow common redis and leveldb connections (#12385) 4 years ago
.travis.yml Allow common redis and leveldb connections (#12385) 4 years ago
CHANGELOG.md Allow common redis and leveldb connections (#12385) 4 years ago
LICENSE Allow common redis and leveldb connections (#12385) 4 years ago
Makefile Allow common redis and leveldb connections (#12385) 4 years ago
README.md Allow common redis and leveldb connections (#12385) 4 years ago
cluster.go Allow common redis and leveldb connections (#12385) 4 years ago
cluster_commands.go Allow common redis and leveldb connections (#12385) 4 years ago
command.go Allow common redis and leveldb connections (#12385) 4 years ago
commands.go Allow common redis and leveldb connections (#12385) 4 years ago
doc.go Allow common redis and leveldb connections (#12385) 4 years ago
error.go Allow common redis and leveldb connections (#12385) 4 years ago
go.mod Allow common redis and leveldb connections (#12385) 4 years ago
go.sum Allow common redis and leveldb connections (#12385) 4 years ago
iterator.go Allow common redis and leveldb connections (#12385) 4 years ago
options.go Allow common redis and leveldb connections (#12385) 4 years ago
pipeline.go Allow common redis and leveldb connections (#12385) 4 years ago
pubsub.go Allow common redis and leveldb connections (#12385) 4 years ago
redis.go Allow common redis and leveldb connections (#12385) 4 years ago
result.go Allow common redis and leveldb connections (#12385) 4 years ago
ring.go Allow common redis and leveldb connections (#12385) 4 years ago
script.go Allow common redis and leveldb connections (#12385) 4 years ago
sentinel.go Allow common redis and leveldb connections (#12385) 4 years ago
tx.go Allow common redis and leveldb connections (#12385) 4 years ago
universal.go Allow common redis and leveldb connections (#12385) 4 years ago

README.md

Redis client for Golang

Build Status GoDoc Airbrake

Supports:

API docs: https://godoc.org/github.com/go-redis/redis. Examples: https://godoc.org/github.com/go-redis/redis#pkg-examples.

Installation

go-redis requires a Go version with Modules support and uses import versioning. So please make sure to initialize a Go module before installing go-redis:

go mod init github.com/my/repo
go get github.com/go-redis/redis/v7

Import:

import "github.com/go-redis/redis/v7"

Quickstart

func ExampleNewClient() {
	client := redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "", // no password set
		DB:       0,  // use default DB
	})

	pong, err := client.Ping().Result()
	fmt.Println(pong, err)
	// Output: PONG <nil>
}

func ExampleClient() {
	client := redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "", // no password set
		DB:       0,  // use default DB
	})
	err := client.Set("key", "value", 0).Err()
	if err != nil {
		panic(err)
	}

	val, err := client.Get("key").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("key", val)

	val2, err := client.Get("key2").Result()
	if err == redis.Nil {
		fmt.Println("key2 does not exist")
	} else if err != nil {
		panic(err)
	} else {
		fmt.Println("key2", val2)
	}
	// Output: key value
	// key2 does not exist
}

Howto

Please go through examples to get an idea how to use this package.

Look and feel

Some corner cases:

// SET key value EX 10 NX
set, err := client.SetNX("key", "value", 10*time.Second).Result()

// SORT list LIMIT 0 2 ASC
vals, err := client.Sort("list", &redis.Sort{Offset: 0, Count: 2, Order: "ASC"}).Result()

// ZRANGEBYSCORE zset -inf +inf WITHSCORES LIMIT 0 2
vals, err := client.ZRangeByScoreWithScores("zset", &redis.ZRangeBy{
	Min: "-inf",
	Max: "+inf",
	Offset: 0,
	Count: 2,
}).Result()

// ZINTERSTORE out 2 zset1 zset2 WEIGHTS 2 3 AGGREGATE SUM
vals, err := client.ZInterStore("out", &redis.ZStore{
	Keys: []string{"zset1", "zset2"},
	Weights: []int64{2, 3}
}).Result()

// EVAL "return {KEYS[1],ARGV[1]}" 1 "key" "hello"
vals, err := client.Eval("return {KEYS[1],ARGV[1]}", []string{"key"}, "hello").Result()

// custom command
res, err := client.Do("set", "key", "value").Result()

See also