mirror of https://github.com/go-redis/redis.git
a999d1ecd8 | ||
---|---|---|
internal | ||
testdata | ||
.gitignore | ||
.golangci.yml | ||
.travis.yml | ||
CHANGELOG.md | ||
LICENSE | ||
Makefile | ||
README.md | ||
bench_test.go | ||
cluster.go | ||
cluster_commands.go | ||
cluster_test.go | ||
command.go | ||
command_test.go | ||
commands.go | ||
commands_test.go | ||
doc.go | ||
error.go | ||
example_instrumentation_test.go | ||
example_test.go | ||
export_test.go | ||
go.mod | ||
go.sum | ||
internal_test.go | ||
iterator.go | ||
iterator_test.go | ||
main_test.go | ||
options.go | ||
options_test.go | ||
pipeline.go | ||
pipeline_test.go | ||
pool_test.go | ||
pubsub.go | ||
pubsub_test.go | ||
race_test.go | ||
redis.go | ||
redis_test.go | ||
result.go | ||
ring.go | ||
ring_test.go | ||
script.go | ||
sentinel.go | ||
sentinel_test.go | ||
tx.go | ||
tx_test.go | ||
universal.go | ||
universal_test.go |
README.md
Redis client for Golang
Supports:
- Redis 3 commands except QUIT, MONITOR, SLOWLOG and SYNC.
- Automatic connection pooling with circuit breaker support.
- Pub/Sub.
- Transactions.
- Pipeline and TxPipeline.
- Scripting.
- Timeouts.
- Redis Sentinel.
- Redis Cluster.
- Cluster of Redis Servers without using cluster mode and Redis Sentinel.
- Ring.
- Instrumentation.
- Cache friendly.
- Rate limiting.
- Distributed Locks.
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
func ExampleNewClient() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
pong, err := client.Ping(ctx).Result()
fmt.Println(pong, err)
// Output: PONG <nil>
}
func ExampleClient() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
err := client.Set(ctx, "key", "value", 0).Err()
if err != nil {
panic(err)
}
val, err := client.Get(ctx, "key").Result()
if err != nil {
panic(err)
}
fmt.Println("key", val)
val2, err := client.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 := client.SetNX(ctx, "key", "value", 10*time.Second).Result()
// SORT list LIMIT 0 2 ASC
vals, err := client.Sort(ctx, "list", &redis.Sort{Offset: 0, Count: 2, Order: "ASC"}).Result()
// ZRANGEBYSCORE zset -inf +inf WITHSCORES LIMIT 0 2
vals, err := client.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 := client.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 := client.Eval(ctx, "return {KEYS[1],ARGV[1]}", []string{"key"}, "hello").Result()
// custom command
res, err := client.Do(ctx, "set", "key", "value").Result()