Как стать автором
Обновить

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

Уровень сложностиПростой

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.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.