Type-safe Redis client for Golang
Go to file
Miha Vrhovnik 40f80e8913 Prevent index out of bunds error
I'm reusing this driver for disque client... and get index out of bounds error because there really are just 2 items in array not 3.
2020-08-07 08:05:47 +02:00
example/otel gofumports 2020-07-16 09:52:07 +03:00
internal Fix test 2020-07-28 16:26:03 +03:00
redisext Fix golangci 2020-07-16 10:01:27 +03:00
testdata Added backoff retry 2017-05-26 14:33:34 +03:00
.gitignore Introduce metrics capture with OpenTelemetry (#1398) 2020-07-15 12:07:07 +03:00
.golangci.yml Fix golangci 2020-07-16 10:01:27 +03:00
.prettierrc Add sponsors 2020-06-09 17:59:23 +03:00
.travis.yml Fix golangci 2020-07-16 10:01:27 +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 Retry timeout and retryable error 2020-07-24 15:52:15 +03:00
cluster_commands.go Add ctx as first arg 2020-05-19 08:52:38 +03:00
cluster_test.go gofumports 2020-07-16 09:52:07 +03:00
command.go Fix golangci 2020-07-16 10:01:27 +03:00
command_test.go Merge branch 'v8' 2020-05-21 10:16:44 +03:00
commands.go Log with context to associate all log by traceID (#1413) 2020-07-18 09:04:36 +03:00
commands_test.go gofumports 2020-07-16 09:52:07 +03:00
doc.go doc: fix outdated reference. 2014-10-07 09:27:55 +03:00
error.go Retry timeout and retryable error 2020-07-24 15:52:15 +03:00
example_instrumentation_test.go Bump major version 2020-05-19 08:52:38 +03:00
example_test.go gofumports 2020-07-16 09:52:07 +03:00
export_test.go Bump major version 2020-05-19 08:52:38 +03:00
go.mod upgrade xxhash to v2 2020-07-06 13:51:51 +09:00
go.sum upgrade xxhash to v2 2020-07-06 13:51:51 +09:00
internal_test.go Fix build 2020-05-21 10:03:09 +03:00
iterator.go Prevent index out of bunds error 2020-08-07 08:05:47 +02:00
iterator_test.go gofumports 2020-07-16 09:52:07 +03:00
main_test.go Retry timeout and retryable error 2020-07-24 15:52:15 +03:00
options.go feat(option): default dialtimeout take effect when dialer is nil 2020-07-21 15:18:36 +08: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 Log with context to associate all log by traceID (#1413) 2020-07-18 09:04:36 +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 Retry timeout and retryable error 2020-07-24 15:52:15 +03:00
redis_test.go Add OnConnect context 2020-06-10 10:36:22 +03:00
result.go Fix golangci 2020-07-16 10:01:27 +03:00
ring.go Retry timeout and retryable error 2020-07-24 15:52:15 +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 gofumports 2020-07-16 09:52:07 +03:00
sentinel.go Log with context to associate all log by traceID (#1413) 2020-07-18 09:04:36 +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 gofumports 2020-07-16 09:52:07 +03:00
universal_test.go gofumports 2020-07-16 09:52:07 +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