forgejo/vendor/github.com/go-redis/redis/v8
6543 792b4dba2c
[Vendor] Update directly used dependencys (#15593)
* update github.com/blevesearch/bleve v2.0.2 -> v2.0.3

* github.com/denisenkom/go-mssqldb v0.9.0 -> v0.10.0

* github.com/editorconfig/editorconfig-core-go v2.4.1 -> v2.4.2

* github.com/go-chi/cors v1.1.1 -> v1.2.0

* github.com/go-git/go-billy v5.0.0 -> v5.1.0

* github.com/go-git/go-git v5.2.0 -> v5.3.0

* github.com/go-ldap/ldap v3.2.4 -> v3.3.0

* github.com/go-redis/redis v8.6.0 -> v8.8.2

* github.com/go-sql-driver/mysql v1.5.0 -> v1.6.0

* github.com/go-swagger/go-swagger v0.26.1 -> v0.27.0

* github.com/lib/pq v1.9.0 -> v1.10.1

* github.com/mattn/go-sqlite3 v1.14.6 -> v1.14.7

* github.com/go-testfixtures/testfixtures v3.5.0 -> v3.6.0

* github.com/issue9/identicon v1.0.1 -> v1.2.0

* github.com/klauspost/compress v1.11.8 -> v1.12.1

* github.com/mgechev/revive v1.0.3 -> v1.0.6

* github.com/microcosm-cc/bluemonday v1.0.7 -> v1.0.8

* github.com/niklasfasching/go-org v1.4.0 -> v1.5.0

* github.com/olivere/elastic v7.0.22 -> v7.0.24

* github.com/pelletier/go-toml v1.8.1 -> v1.9.0

* github.com/prometheus/client_golang v1.9.0 -> v1.10.0

* github.com/xanzy/go-gitlab v0.44.0 -> v0.48.0

* github.com/yuin/goldmark v1.3.3 -> v1.3.5

* github.com/6543/go-version v1.2.4 -> v1.3.1

* do github.com/lib/pq v1.10.0 -> v1.10.1 again ...
2021-04-22 20:08:53 -04:00
..
internal [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
.gitignore [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
.golangci.yml [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
.prettierrc [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
CHANGELOG.md [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
cluster.go [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
cluster_commands.go [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
command.go [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
commands.go [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
doc.go [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
error.go [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
go.mod [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
go.sum [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
iterator.go [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
LICENSE [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
Makefile [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
options.go [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
pipeline.go [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
pubsub.go [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
README.md [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
redis.go [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
result.go [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
ring.go [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
script.go [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
sentinel.go [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00
tx.go [Vendor] Update go-redis to v8.5.0 (#13749) 2021-02-10 21:28:32 +00:00
universal.go [Vendor] Update directly used dependencys (#15593) 2021-04-22 20:08:53 -04:00

All-in-one tool to optimize performance and monitor errors & logs

Redis client for Golang

build workflow PkgGoDev Documentation Chat

Ecosystem

Features

Installation

go-redis supports 2 last Go versions and requires a Go version with modules support. So make sure to initialize a Go module:

go mod init github.com/my/repo

And then install go-redis/v8 (note v8 in the import; omitting it is a popular mistake):

go get github.com/go-redis/redis/v8

Quickstart

import (
    "context"
    "github.com/go-redis/redis/v8"
)

var ctx = context.Background()

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

    err := rdb.Set(ctx, "key", "value", 0).Err()
    if err != nil {
        panic(err)
    }

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

    val2, err := rdb.Get(ctx, "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
}

Look and feel

Some corner cases:

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

// SET key value keepttl NX
set, err := rdb.SetNX(ctx, "key", "value", redis.KeepTTL).Result()

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

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

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

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

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

Run the test

go-redis will start a redis-server and run the test cases.

The paths of redis-server bin file and redis config file are definded in main_test.go:

var (
	redisServerBin, _  = filepath.Abs(filepath.Join("testdata", "redis", "src", "redis-server"))
	redisServerConf, _ = filepath.Abs(filepath.Join("testdata", "redis", "redis.conf"))
)

For local testing, you can change the variables to refer to your local files, or create a soft link to the corresponding folder for redis-server and copy the config file to testdata/redis/:

ln -s /usr/bin/redis-server ./go-redis/testdata/redis/src
cp ./go-redis/testdata/redis.conf ./go-redis/testdata/redis/

Lastly, run:

go test

See also