Go Makefile
Latest commit 51564b7 Feb 25, 2017 @vmihailenco vmihailenco committed on GitHub Merge pull request #514 from fiatjaf/patch-1
Mention SETEX in the documentation.
Permalink
Failed to load latest commit information.
internal Separate read and write buffers for PubSub. Feb 19, 2017
testdata Use go standard path for test data Mar 12, 2016
.gitignore Use go standard path for test data Mar 12, 2016
.travis.yml Remove dial limiter. Dec 16, 2016
LICENSE Fix license. Sep 12, 2016
Makefile Fix ReceiveMessage to work without any subscriptions. Feb 8, 2017
README.md Update readme. Dec 30, 2016
bench_test.go Reduce number of allocations. Jan 13, 2017
cluster.go Reduce number of allocations. Jan 13, 2017
cluster_test.go Fix cluster pipeline tests. Dec 20, 2016
command.go Add ScanSlice. Feb 18, 2017
command_test.go Prepare v5 release. Oct 9, 2016
commands.go Mention SETEX in the documentation. Feb 25, 2017
commands_test.go the timeout of WAIT command is in milliseconds. Feb 24, 2017
doc.go doc: fix outdated reference. Oct 7, 2014
example_instrumentation_test.go Fix Client process instrumentation. Dec 30, 2016
example_test.go Add TxPipeline examples. Dec 22, 2016
export_test.go Use consistent cluster state when executing pipeline. Nov 8, 2016
iterator.go Remove Scanner in favor of ScanCmd. Jan 3, 2017
iterator_test.go Prepare v5 release. Oct 9, 2016
main_test.go Set read/write timeouts more consistently. Dec 3, 2016
options.go Fix error message for Go 1.8. Jan 26, 2017
options_test.go Fix error message for Go 1.8. Jan 26, 2017
parser.go Reduce number of allocations. Jan 13, 2017
pipeline.go Fix defer order. Jan 28, 2017
pipeline_test.go Add TxPipeline. Dec 16, 2016
pool_test.go Fix ReceiveMessage to work without any subscriptions. Feb 8, 2017
pubsub.go Use simple PING for compatibility Feb 23, 2017
pubsub_test.go Fix Go 1.4 build. Feb 18, 2017
race_test.go Remove dial limiter. Dec 16, 2016
redis.go Fix ReceiveMessage to work without any subscriptions. Feb 8, 2017
redis_context.go Context methods only for go1.7+ Jan 16, 2017
redis_no_context.go Context methods only for go1.7+ Jan 16, 2017
redis_test.go Fix ReceiveMessage to work without any subscriptions. Feb 8, 2017
result.go Reduce number of allocations. Jan 13, 2017
ring.go Fix defer order. Jan 28, 2017
ring_test.go More cluster tests. Oct 9, 2016
script.go Check that clients implement scripter interface. Dec 14, 2016
sentinel.go Fix ReceiveMessage to work without any subscriptions. Feb 8, 2017
sentinel_test.go Prepare v5 release. Oct 9, 2016
tx.go Merge pull request #444 from go-redis/feature/tx-pipeline Dec 16, 2016
tx_test.go Fix ReceiveMessage to work without any subscriptions. Feb 8, 2017

README.md

Redis client for Golang Build Status

Supports:

API docs: https://godoc.org/gopkg.in/redis.v5. Examples: https://godoc.org/gopkg.in/redis.v5#pkg-examples.

Installation

Install:

go get gopkg.in/redis.v5

Import:

import "gopkg.in/redis.v5"

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() {
    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 exists")
    } else if err != nil {
        panic(err)
    } else {
        fmt.Println("key2", val2)
    }
    // Output: key value
    // key2 does not exists
}

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{Weights: []int64{2, 3}}, "zset1", "zset2").Result()

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

Benchmark

go-redis vs redigo:

BenchmarkSetGoRedis10Conns64Bytes-4       200000          7621 ns/op         210 B/op          6 allocs/op
BenchmarkSetGoRedis100Conns64Bytes-4      200000          7554 ns/op         210 B/op          6 allocs/op
BenchmarkSetGoRedis10Conns1KB-4           200000          7697 ns/op         210 B/op          6 allocs/op
BenchmarkSetGoRedis100Conns1KB-4          200000          7688 ns/op         210 B/op          6 allocs/op
BenchmarkSetGoRedis10Conns10KB-4          200000          9214 ns/op         210 B/op          6 allocs/op
BenchmarkSetGoRedis100Conns10KB-4         200000          9181 ns/op         210 B/op          6 allocs/op
BenchmarkSetGoRedis10Conns1MB-4             2000        583242 ns/op        2337 B/op          6 allocs/op
BenchmarkSetGoRedis100Conns1MB-4            2000        583089 ns/op        2338 B/op          6 allocs/op
BenchmarkSetRedigo10Conns64Bytes-4        200000          7576 ns/op         208 B/op          7 allocs/op
BenchmarkSetRedigo100Conns64Bytes-4       200000          7782 ns/op         208 B/op          7 allocs/op
BenchmarkSetRedigo10Conns1KB-4            200000          7958 ns/op         208 B/op          7 allocs/op
BenchmarkSetRedigo100Conns1KB-4           200000          7725 ns/op         208 B/op          7 allocs/op
BenchmarkSetRedigo10Conns10KB-4           100000         18442 ns/op         208 B/op          7 allocs/op
BenchmarkSetRedigo100Conns10KB-4          100000         18818 ns/op         208 B/op          7 allocs/op
BenchmarkSetRedigo10Conns1MB-4              2000        668829 ns/op         226 B/op          7 allocs/op
BenchmarkSetRedigo100Conns1MB-4             2000        679542 ns/op         226 B/op          7 allocs/op

Redis Cluster:

BenchmarkRedisPing-4                      200000          6983 ns/op         116 B/op          4 allocs/op
BenchmarkRedisClusterPing-4               100000         11535 ns/op         117 B/op          4 allocs/op

Shameless plug

Check my PostgreSQL client for Go.