Pull to refresh

Основы использования Redis в Go

Level of difficultyEasy

Redis — мощное хранилище данных в памяти, широко используется для кэширования данных. В сочетании с Go, статически типизированным, компилируемым языком программирования, разработанным для простоты и эффективности, Redis может значительно улучшить производительность и масштабируемость ваших приложений. Эта статья поможет интегрировать Redis в ваши проекты на Go.

Установка и настройка клиента

Прежде всего установите Redis в ваш проект.

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

Для взаимодействия с Redis необходимо сконфигурировать клиент.

import (
    "context"
    "fmt"
    "github.com/redis/go-redis/v9"
)

func main() {
    client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "1234",            
        DB:       0,              
    })
}

Если же для подключения в вашем проекте используется строка подключения (connection string), то используйте следующий пример.

opt, err := redis.ParseURL("redis://<user>:<pass>@localhost:6379/<db>")
// обработайте ошибку err
client := redis.NewClient(opt)

Примеры использования

Redis отлично подходит для хранения простых пар ключ-значение. Вот как сохранить и получить простую строку:

ctx := context.Background()

err := client.Set(ctx, "key", "value", 0).Err()
// обработайте ошибку err

val, err := client.Get(ctx, "key").Result()
// обработайте ошибку err
fmt.Println("key", val)

Работа с map

Redis поддерживает различные типы данных. Ниже приведен пример хранения и извлечения объекта пользователя.

user := map[string]interface{}{
    "name":    "John Doe",
    "age":     30,
    "country": "USA",
}
err := client.HSet(ctx, "user:100", user).Err()
// обработайте ошибку err

user, err = client.HGetAll(ctx, "user:100").Result()
// обработайте ошибку err
fmt.Println(user)

Работа со структурами

Для хранения структур нам необходимо научить наши структуры сериализовываться в бинарный формат. Для этого возьмем для примера простую структуру User и реализуем интерфейс BinaryMarshaler и BinaryUnmarshaler.

type User struct {
	ID   int    `json:"id"`
	Name string `json:"name"`
}

func (u User) MarshalBinary() ([]byte, error) {
	return json.Marshal(u)
}

func (u User) UnmarshalBinary(data []byte) error {
	return json.Unmarshal(data, &u)
}

Это позволит Redis преобразовать структуру User в байты и сохранить полученные байты в памяти. Теперь попробуем сохранить стуктуру в Redis:

user := User{ID: 1, Name: "John Doe"}

err := rdb.Set(ctx, "user:1", user, 0).Err()
// обработайте ошибку err

err = rdb.Get(ctx, "user:1").Scan(&user)
// обработайте ошибку err

fmt.Println(user)

В результате мы смогли сохранить и получить структуру из Redis.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.