Type-safe Redis client for Golang
Go to file
David Fu bb6761fe83 Make cluster client get updated nodes' addrs
During loading state, if all the nodes can't be connected, it's
possible that all the nodes' IP addresses have changed at the same
time. Clear the clusterAddrs so that the cluster client has chance
to get updated nodes' IP addresses by using the initial setting of
cluster addresses.
2020-06-15 15:24:18 +08:00
internal Remove io.StringWriter 2020-06-12 10:09:32 +03:00
redisext Add OpenTelemetryHook 2020-06-09 17:17:41 +03:00
testdata Added backoff retry 2017-05-26 14:33:34 +03:00
.gitignore Use go standard path for test data 2016-03-12 10:25:59 +00:00
.golangci.yml Bump golangci-lint to v1.21.0 2019-11-18 18:46:13 +01:00
.prettierrc Add sponsors 2020-06-09 17:59:23 +03:00
.travis.yml Use Redis stable for testing 2020-06-05 09:08:16 +03:00
CHANGELOG.md Cleanup 2020-06-10 15:04:12 +03:00
LICENSE Fix license. 2016-09-12 12:00:28 +00:00
Makefile Use Redis stable for testing 2020-06-05 09:08:16 +03:00
README.md Add ctx declaration in readme 2020-06-14 12:45:37 +02:00
bench_test.go Bump major version 2020-05-19 08:52:38 +03:00
cluster.go Make cluster client get updated nodes' addrs 2020-06-15 15:24:18 +08:00
cluster_commands.go Add ctx as first arg 2020-05-19 08:52:38 +03:00
cluster_test.go Cleanup 2020-06-10 15:04:12 +03:00
command.go Add OpenTelemetryHook 2020-06-09 17:17:41 +03:00
command_test.go Merge branch 'v8' 2020-05-21 10:16:44 +03:00
commands.go Fix wording 2020-06-10 17:22:06 +03:00
commands_test.go Fix build 2020-06-05 09:55:37 +03:00
doc.go doc: fix outdated reference. 2014-10-07 09:27:55 +03:00
error.go Merge branch 'v8' 2020-05-21 10:16:44 +03:00
example_instrumentation_test.go Bump major version 2020-05-19 08:52:38 +03:00
example_test.go Cleanup 2020-06-10 15:04:12 +03:00
export_test.go Bump major version 2020-05-19 08:52:38 +03:00
go.mod Set Ring.Username 2020-06-12 09:28:14 +03:00
go.sum Set Ring.Username 2020-06-12 09:28:14 +03:00
internal_test.go Fix build 2020-05-21 10:03:09 +03:00
iterator.go Add ctx as first arg 2020-05-19 08:52:38 +03:00
iterator_test.go Bump major version 2020-05-19 08:52:38 +03:00
main_test.go Bump major version 2020-05-19 08:52:38 +03:00
options.go Set Ring.Username 2020-06-12 09:28:14 +03:00
options_test.go Add AuthACL 2020-05-21 08:59:51 +03:00
pipeline.go Bump major version 2020-05-19 08:52:38 +03:00
pipeline_test.go Bump major version 2020-05-19 08:52:38 +03:00
pool_test.go Bump major version 2020-05-19 08:52:38 +03:00
pubsub.go Merge branch 'v8' 2020-05-21 10:16:44 +03:00
pubsub_test.go Bump major version 2020-05-19 08:52:38 +03:00
race_test.go Fix build 2020-06-05 09:55:37 +03:00
redis.go Add OnConnect context 2020-06-10 10:36:22 +03:00
redis_test.go Add OnConnect context 2020-06-10 10:36:22 +03:00
result.go add NewTimeCmdResult to allow unit testing with TimeCmd (#1298) 2020-04-18 09:05:16 +03:00
ring.go Set Ring.Username 2020-06-12 09:28:14 +03:00
ring_test.go Use Rendezvous in Ring. Thanks @rafaeleyng for initial idea and implementation 2020-06-08 13:22:37 +03:00
script.go Add ctx as first arg 2020-05-19 08:52:38 +03:00
sentinel.go Add OnConnect context 2020-06-10 10:36:22 +03:00
sentinel_test.go Bump major version 2020-05-19 08:52:38 +03:00
tx.go Bump major version 2020-05-19 08:52:38 +03:00
tx_test.go Bump major version 2020-05-19 08:52:38 +03:00
universal.go Add OnConnect context 2020-06-10 10:36:22 +03:00
universal_test.go Bump major version 2020-05-19 08:52:38 +03:00

README.md

Redis client for Golang

Build Status GoDoc

Sponsors

Ecosystem

Features

API docs: https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc. Examples: https://pkg.go.dev/github.com/go-redis/redis/v8?tab=doc#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/v8

Import:

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

Quickstart

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

var ctx = context.Background()

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

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

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
}

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 := rdb.SetNX(ctx, "key", "value", 10*time.Second).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()

See also