There are two popular choices:
- go-redis
- redigo
I prefer redigo over go-redis.
Cons with go-redis
- Not enough documentation for APIs
- Difficult to understand naming conventions for APIs
- I’m still finding how to refresh expiry time of a key using go-redis
- Needs Cmdable interface for calling Redis commands. The interface is not so well designed.
An interface in go-redis
type Cmdable interface {
TTL(key string) *DurationCmd
Restore(key string, ttl time.Duration, value string) *StatusCmd
Pros with redigo
- Easy to understand APIs
- Ability to call Redis commands from the client so you never have to learn a new wrapper
- No extra interface like go-redis
A sample client with go-redis is as following:
package main
import (
"fmt"
"github.com/go-redis/redis"
)
func HandleErr(err error) {
if err != nil {
panic(err)
}
}
/*
type DurationCmd struct {
baseCmd
val time.Duration
precision time.Duration
}
*/
func ExampleNewClient() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
err = client.Set("key", "value", 0).Err()
HandleErr(err)
val, err := client.Get("key").Result()
HandleErr(err)
fmt.Println("key", val)
ttl := client.TTL("key")
fmt.Println("ttl", ttl)
}
func main() {
ExampleNewClient()
}