The Wayback Machine - https://web.archive.org/web/20190501134220/https://github.com/go-redis/redis
Skip to content
Type-safe Redis client for Golang
Branch: master
Clone or download
aspacca and vmihailenco Ring instrumentantions (#1017)
* Ring instrumentantions
Latest commit 97e6ed8 Apr 24, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
internal Fix MinIdleConns and MaxConnAge Mar 25, 2019
testdata Added backoff retry May 26, 2017
.gitignore Use go standard path for test data Mar 12, 2016
.travis.yml travis: add Go v1.12 Mar 25, 2019
CHANGELOG.md Process pipeline commands concurrently Sep 11, 2018
LICENSE Fix license. Sep 12, 2016
Makefile Use stable version of Redis Jan 21, 2019
README.md Fix link Apr 22, 2019
bench_test.go Bench bigget values Aug 15, 2018
cluster.go fix pubsub panic on redis reload Apr 18, 2019
cluster_commands.go Add Cluster.DBSize Sep 11, 2017
cluster_test.go Use random node when there are no channels Mar 7, 2019
command.go Some code improvements Apr 17, 2019
command_test.go Add Float32 helper Apr 10, 2019
commands.go Add Streams comment Feb 19, 2019
commands_test.go Merge pull request #932 from theodesp/master Dec 15, 2018
doc.go doc: fix outdated reference. Oct 7, 2014
example_instrumentation_test.go Replace client with redisdb in examples Aug 12, 2018
example_test.go Support default redis address Jan 13, 2019
export_test.go Remove Redis Cluster state check Nov 24, 2018
internal_test.go Add missing options to UniversalOptions Aug 15, 2018
iterator.go Remove Scanner in favor of ScanCmd. Jan 3, 2017
iterator_test.go Add FlushDBAsync and FlushAllAsync Jun 17, 2017
main_test.go Optimize reading big values Aug 16, 2018
options.go Support default redis address Jan 13, 2019
options_test.go Add test for read timeout option (#877) Oct 5, 2018
pipeline.go Move comment to Pipeliner interface. Apr 12, 2019
pipeline_test.go Support custom command in pipeline Feb 8, 2019
pool_test.go Add MaxConnAge Aug 12, 2018
pubsub.go Typo error in comments Apr 8, 2019
pubsub_test.go pubsub: drop a message when the channel is full Mar 12, 2019
race_test.go Add more race tests May 17, 2018
redis.go Some code improvements Apr 17, 2019
redis_test.go Cleanup pool May 29, 2018
result.go Optimize reading big values Aug 16, 2018
ring.go Ring instrumentantions (#1017) Apr 24, 2019
ring_test.go Ring instrumentantions (#1017) Apr 24, 2019
script.go Script: Fix `Exists` to use hash instead of source (#726) Mar 5, 2018
sentinel.go Some code improvements Apr 17, 2019
sentinel_test.go Increase timeout Dec 13, 2018
tx.go Fix typos in Client.Watch documentation Feb 13, 2019
tx_test.go Cleanup pool May 29, 2018
universal.go Added WrapProcessPipeline to UniversalClient, wrap c.processTxPipelin… Apr 14, 2019
universal_test.go Update import Feb 20, 2017

README.md

Redis client for Golang

Build Status GoDoc Airbrake

Supports:

API docs: https://godoc.org/github.com/go-redis/redis. Examples: https://godoc.org/github.com/go-redis/redis#pkg-examples.

Installation

Install:

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

Import:

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

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 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 := 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"}, "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

See also

You can’t perform that action at this time.