Need help with redis?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

12.7K Stars 1.6K Forks BSD 2-Clause "Simplified" License 2.0K Commits 119 Opened issues


Type-safe Redis client for Golang

Services available


Need anything else?

Contributors list

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

Redis client for Golang

build workflow PkgGoDev Documentation Chat

Other projects you may like:

  • Bun - fast and simple SQL client for PostgreSQL, MySQL, and SQLite.
  • BunRouter - fast and flexible HTTP router for Go.




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

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

go get


import (

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 {

val, err := rdb.Get(ctx, "key").Result()
if err != nil {
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 {
} 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 defined in

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

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


Thanks to all the people who already contributed!

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.