Как в golang работать с redis sentinel?
Шаги для работы с Redis Sentinel в Go:
- Установка библиотеки go-redis: Установите пакет
go-redis
с поддержкой Sentinel:
12go get github.com/go-redis/redis/v8 - Импорт необходимых пакетов: В вашем коде нужно импортировать библиотеку
go-redis
и контекст для работы с Redis:12345678package mainimport ("context""fmt""github.com/go-redis/redis/v8") - Настройка соединения с Sentinel: Вы можете настроить подключение к Redis Sentinel с указанием адресов серверов Sentinel и имени мастер-сервера.
Пример кода:
12345678910111213141516171819202122232425262728293031323334var ctx = context.Background()func main() {// Настройка клиента Redis с использованием Sentinelrdb := redis.NewFailoverClient(&redis.FailoverOptions{MasterName: "mymaster", // Имя мастер-сервера, как в конфиге SentinelSentinelAddrs: []string{"192.168.1.101:26379", "192.168.1.102:26379"}, // Адреса SentinelPassword: "", // Пароль (если есть)DB: 0, // Используемая база данных})// Проверка соединенияpong, err := rdb.Ping(ctx).Result()if err != nil {fmt.Println("Ошибка соединения с Redis:", err)return}fmt.Println("Ответ от Redis:", pong)// Пример команды seterr = rdb.Set(ctx, "foo", "bar", 0).Err()if err != nil {fmt.Println("Ошибка установки значения:", err)}// Пример команды getval, err := rdb.Get(ctx, "foo").Result()if err != nil {fmt.Println("Ошибка получения значения:", err)} else {fmt.Println("Значение foo:", val)}}
Основные параметры подключения:
- MasterName: имя мастер-сервера Redis, которое Sentinel мониторит (например,
mymaster
). - SentinelAddrs: список адресов Sentinel, которые используются для обнаружения мастер-сервера.
- Password: пароль для подключения к Redis (если настроен).
- DB: номер базы данных Redis (по умолчанию 0).
Обработка переключения мастера:
go-redis
автоматически выполняет повторные подключения в случае изменения мастера. Когда Sentinel производит фейловер (failover), клиент автоматически перенаправляется на новый мастер.
Тестирование подключения:
Команда Ping
проверяет доступность соединения с Redis через Sentinel. Также можно использовать команды Set
и Get
, чтобы протестировать выполнение операций на мастер-сервере.
Пример работы с репликами:
Если нужно выполнять запросы на чтение с реплик (слейвов), можно использовать методы, поддерживающие чтение с реплик:
1 2 3 |
rdb.ReadOnly() val, err := rdb.Get(ctx, "foo").Result() |
Заключение:
go-redis
делает работу с Redis Sentinel простой, автоматически обрабатывая фейловеры и перенаправляя запросы на новый мастер.
Recommended Posts
Что такое oneof в Protobuf?
25.04.2024