Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/redis/go-redis
Redis Go client
https://github.com/redis/go-redis
go golang redis redis-client redis-cluster
Last synced: about 1 month ago
JSON representation
Redis Go client
- Host: GitHub
- URL: https://github.com/redis/go-redis
- Owner: redis
- License: bsd-2-clause
- Created: 2012-07-25T13:01:39.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2024-04-15T13:27:50.000Z (about 2 months ago)
- Last Synced: 2024-04-16T01:40:23.887Z (about 2 months ago)
- Topics: go, golang, redis, redis-client, redis-cluster
- Language: Go
- Homepage: https://redis.uptrace.dev
- Size: 4.84 MB
- Stars: 19,239
- Watchers: 251
- Forks: 2,274
- Open Issues: 230
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Lists
- awesome-go - redis - Redis client for Golang. (Database Drivers / NoSQL Database Drivers)
- awesome-stars - redis/go-redis - Redis Go client (Go)
- awesome-stars - redis/go-redis - Redis Go client (Go)
- awesome-stars - go-redis
- awesome-stars-eryajf - redis/go-redis - Redis Go client (Go)
- awesome-stars - redis/go-redis - Redis Go client (Go)
- go-awesome - go-redis - Redis 客户端 (开源类库 / 数据库)
- awesome-go - redis - Redis client for Golang. Stars:`19.3K`. (Database Drivers / NoSQL Database Drivers)
- awesome-ccamel - redis/go-redis - Redis Go client (Go)
- awesome-stars - redis/go-redis - Redis Go client (Go)
- awesome - redis/go-redis - Redis Go client (Go)
- awesome-repositories - redis/go-redis - Redis Go client (Go)
- awesome-go-cn - redis - redis) [![godoc][D]](https://godoc.org/github.com/redis/go-redis) [![包含中文文档][CN]](https://github.com/redis/go-redis) (数据库驱动程序 / NoSQL数据库驱动程序)
- awesome-stars - redis/go-redis - Redis Go client (Go)
- awesome-stars - redis/go-redis - Redis Go client (Go)
- awesome-go-cn - redis - redis) [![godoc][D]](https://godoc.org/github.com/redis/go-redis) [![包含中文文档][CN]](https://github.com/redis/go-redis) (数据库驱动程序 / NoSQL数据库驱动程序)
- awesome-stars - redis/go-redis - Redis Go client (Go)
- awesome-stars - redis/go-redis - Type-safe Redis client for Golang (Go)
- my-awesome-stars - redis/go-redis - Redis Go client (Go)
- awesome-stars - redis/go-redis - Redis Go client (Go)
- awesome-go - go-redis
- awesome-stars - redis/go-redis - Type-safe Redis client for Golang (Go)
- awesome-stars - redis/go-redis - Redis Go client (Go)
- awesome-stars - redis/go-redis
- awesome-go-with-stars - redis - Redis client for Golang. (Database Drivers / NoSQL Database Drivers)
- awesome-go - redis/go-redis
- awesome-go-stars - redis(stars: 19193) - Redis client for Golang. (Database Drivers / NoSQL Database Drivers)
- awesome-starts - redis/go-redis - Redis Go client (Go)
- my-awesome - redis/go-redis - client,redis-cluster pushed_at:2024-05 star:19.4k fork:2.3k Redis Go client (Go)
- awesome-go - redis - Redis client for Golang. (Database Drivers / NoSQL Database Drivers)
- awesome-go - redis - Redis client for Golang. (Database Drivers / NoSQL Database Drivers)
- awesome-go - redis - Redis client for Golang. (Database Drivers / NoSQL Database Drivers)
- awesome-stars - redis/go-redis - `★19451` Redis Go client (Go)
- awesome-golang-repositories - go-redis
README
# Redis client for Go
[![build workflow](https://github.com/redis/go-redis/actions/workflows/build.yml/badge.svg)](https://github.com/redis/go-redis/actions)
[![PkgGoDev](https://pkg.go.dev/badge/github.com/redis/go-redis/v9)](https://pkg.go.dev/github.com/redis/go-redis/v9?tab=doc)
[![Documentation](https://img.shields.io/badge/redis-documentation-informational)](https://redis.uptrace.dev/)
[![Chat](https://discordapp.com/api/guilds/752070105847955518/widget.png)](https://discord.gg/rWtp5Aj)> go-redis is brought to you by :star: [**uptrace/uptrace**](https://github.com/uptrace/uptrace).
> Uptrace is an open-source APM tool that supports distributed tracing, metrics, and logs. You can
> use it to monitor applications and set up automatic alerts to receive notifications via email,
> Slack, Telegram, and others.
>
> See [OpenTelemetry](https://github.com/redis/go-redis/tree/master/example/otel) example which
> demonstrates how you can use Uptrace to monitor go-redis.## How do I Redis?
[Learn for free at Redis University](https://university.redis.com/)
[Build faster with the Redis Launchpad](https://launchpad.redis.com/)
[Try the Redis Cloud](https://redis.com/try-free/)
[Dive in developer tutorials](https://developer.redis.com/)
[Join the Redis community](https://redis.com/community/)
[Work at Redis](https://redis.com/company/careers/jobs/)
## Documentation
- [English](https://redis.uptrace.dev)
- [简体中文](https://redis.uptrace.dev/zh/)## Resources
- [Discussions](https://github.com/redis/go-redis/discussions)
- [Chat](https://discord.gg/rWtp5Aj)
- [Reference](https://pkg.go.dev/github.com/redis/go-redis/v9)
- [Examples](https://pkg.go.dev/github.com/redis/go-redis/v9#pkg-examples)## Ecosystem
- [Redis Mock](https://github.com/go-redis/redismock)
- [Distributed Locks](https://github.com/bsm/redislock)
- [Redis Cache](https://github.com/go-redis/cache)
- [Rate limiting](https://github.com/go-redis/redis_rate)This client also works with [Kvrocks](https://github.com/apache/incubator-kvrocks), a distributed
key value NoSQL database that uses RocksDB as storage engine and is compatible with Redis protocol.## Features
- Redis 3 commands except QUIT, MONITOR, and SYNC.
- Automatic connection pooling with
- [Pub/Sub](https://redis.uptrace.dev/guide/go-redis-pubsub.html).
- [Pipelines and transactions](https://redis.uptrace.dev/guide/go-redis-pipelines.html).
- [Scripting](https://redis.uptrace.dev/guide/lua-scripting.html).
- [Redis Sentinel](https://redis.uptrace.dev/guide/go-redis-sentinel.html).
- [Redis Cluster](https://redis.uptrace.dev/guide/go-redis-cluster.html).
- [Redis Ring](https://redis.uptrace.dev/guide/ring.html).
- [Redis Performance Monitoring](https://redis.uptrace.dev/guide/redis-performance-monitoring.html).
- [Redis Probabilistic [RedisStack]](https://redis.io/docs/data-types/probabilistic/)## Installation
go-redis supports 2 last Go versions and requires a Go version with
[modules](https://github.com/golang/go/wiki/Modules) support. So make sure to initialize a Go
module:```shell
go mod init github.com/my/repo
```Then install go-redis/**v9**:
```shell
go get github.com/redis/go-redis/v9
```## Quickstart
```go
import (
"context"
"fmt""github.com/redis/go-redis/v9"
)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 {
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
}
```The above can be modified to specify the version of the RESP protocol by adding the `protocol`
option to the `Options` struct:```go
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
Protocol: 3, // specify 2 for RESP 2 or 3 for RESP 3
})```
### Connecting via a redis url
go-redis also supports connecting via the
[redis uri specification](https://github.com/redis/redis-specifications/tree/master/uri/redis.txt).
The example below demonstrates how the connection can easily be configured using a string, adhering
to this specification.```go
import (
"context"
"fmt""github.com/redis/go-redis/v9"
)func ExampleClient() *redis.Client {
url := "redis://user:password@localhost:6379/0?protocol=3"
opts, err := redis.ParseURL(url)
if err != nil {
panic(err)
}return redis.NewClient(opts)
}```
## Contributing
Please see [out contributing guidelines](CONTRIBUTING.md) to help us improve this library!
## Look and feel
Some corner cases:
```go
// 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 `main_test.go`:
```go
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 `testdata/redis/`:```shell
ln -s /usr/bin/redis-server ./go-redis/testdata/redis/src
cp ./go-redis/testdata/redis.conf ./go-redis/testdata/redis/
```Lastly, run:
```shell
go test
```Another option is to run your specific tests with an already running redis. The example below, tests
against a redis running on port 9999.:```shell
REDIS_PORT=9999 go test
```## See also
- [Golang ORM](https://bun.uptrace.dev) for PostgreSQL, MySQL, MSSQL, and SQLite
- [Golang PostgreSQL](https://bun.uptrace.dev/postgres/)
- [Golang HTTP router](https://bunrouter.uptrace.dev/)
- [Golang ClickHouse ORM](https://github.com/uptrace/go-clickhouse)## Contributors
Thanks to all the people who already contributed!