Подключение к нешардированному кластеру Valkey™
К нешардированному кластеру Valkey™ можно подключиться:
-
С помощью Valkey™ Sentinel.
Valkey™ Sentinel — это система управления хостами Valkey™, позволяющая проводить мониторинг, отправлять уведомления о состояниях хостов, переключать мастер и передавать клиентам актуальные адреса хостов.
Поддерживается нешифрованное соединение через порт
26379для кластеров с любой версией Valkey™.Если клиентское приложение не поддерживает подключение через Sentinel, подключитесь напрямую к мастеру. Если в прямом подключении нет необходимости, используйте Sentinel для более надежной работы с хостами кластера.
Подробнее о Sentinel см. в разделе Репликация и отказоустойчивость и документации Valkey™
. -
Напрямую к мастеру.
Поддерживаются шифрованное соединение через порт
6380и нешифрованное через порт6379.Важно
Используя SSL-соединение, можно подключаться только к кластерам с включенной настройкой Поддержка TLS.
Чтобы всегда подключаться к мастеру в нешардированном кластере, воспользуйтесь особым FQDN, который всегда указывает на мастер, либо отслеживайте роли всех хостов кластера самостоятельно.
Особый FQDN
Yandex Managed Service for Valkey™ предоставляет особый FQDN, который можно использовать вместо обычных FQDN хостов для подключения к нешардированному кластеру.
FQDN вида c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz в нешардированном кластере всегда указывает на текущий хост-мастер. Идентификатор кластера можно запросить со списком кластеров в каталоге. При подключении к этому FQDN разрешено выполнять операции чтения и записи.
В кластерах из нескольких хостов особый FQDN может некоторое время (до 10 минут) указывать на хост-реплику. Это связано с тем, что на обновление DNS-записей для особых FQDN требуется время. Если запрос на запись завершился ошибкой, повторите его позднее.
Важно
Если при автоматической смене мастера новым мастером станет хост без публичного доступа, подключиться к нему из интернета будет невозможно. Чтобы этого избежать, включите публичный доступ для всех хостов кластера.
Пример подключения с SSL-шифрованием к хосту-мастеру для кластера с идентификатором c9qash3nb1v9********:
redis-cli -h c-c9qash3nb1v9********.rw.mdb.yandexcloud.kz \
-p 6380 \
--tls \
--cacert ~/.redis/YandexInternalRootCA.crt \
-a <пароль_Valkey™>
Важно
Используйте подключение с помощью особого FQDN хоста-мастера только для процессов, которые допускают недоступность базы данных на запись продолжительностью до 10 минут.
Подключение из графических IDE
Подключение проверялось в следующем окружении:
- MacOS Big Sur 11.3.
- DBeaver Enterprise:
21.0.
Подключаться из графических IDE к хостам кластера можно только через SSH-туннель с помощью созданной ВМ. Перед подключением подготовьте сертификат.
Чтобы избежать ошибок при подключении, сохраните сертификат
Поддержка подключения к кластеру Valkey™ доступна только в коммерческих редакциях DBeaver
Чтобы подключиться к кластеру:
- Создайте новое соединение с БД:
- Выберите в меню База данных пункт Новое соединение.
- Выберите из списка БД Valkey™.
- Нажмите кнопку Далее.
- Укажите параметры подключения на вкладке Главное:
- Хост — FQDN хоста-мастера или особый FQDN, всегда указывающий на текущий хост-мастер.
- Порт —
6379для обычного кластера или6380для кластера с включенным SSL-шифрованием. - В блоке Аутентификация укажите пароль от кластера.
- На вкладке SSH:
- Включите настройку Использовать туннель SSH.
- Укажите параметры SSH-туннеля:
- Хост/IP — публичный IP-адрес ВМ для подключения;
- Имя пользователя — логин для подключения к ВМ;
- Метод аутентификации —
Публичный ключ; - Секретный ключ — путь к файлу закрытого ключа для подключения к ВМ;
- Passphrase — пароль от закрытого ключа.
- На вкладке SSL:
- Включите настройки Использовать SSL и Пропустить валидацию имени хоста.
- В блоке Параметры:
- Выберите Способ — Набор сертификатов.
- В поле Корневой сертификат укажите путь к сохраненному файлу SSL-сертификата.
- Нажмите кнопку Тест соединения ... для проверки соединения с БД. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
- Нажмите кнопку Готово, чтобы сохранить настройки соединения с БД.
Подготовка к подключению из Docker-контейнера
Чтобы подключаться к кластеру Yandex Managed Service for Valkey™ из Docker-контейнера, добавьте в Dockerfile строки:
# Собрать вручную утилиту redis-tools с поддержкой TLS.
RUN apt-get update && \
apt-get install make gcc libssl-dev --yes && \
wget https://download.redis.io/redis-stable.tar.gz && \
tar -xzvf redis-stable.tar.gz && \
cd redis-stable && \
make BUILD_TLS=yes MALLOC=libc && \
make install && \
cp ./src/redis-cli /usr/bin/
# Собрать вручную утилиту redis-tools с поддержкой TLS.
RUN apt-get update && \
apt-get install wget make gcc libssl-dev --yes && \
wget https://download.redis.io/redis-stable.tar.gz && \
tar -xzvf redis-stable.tar.gz && \
cd redis-stable && \
make BUILD_TLS=yes MALLOC=libc && \
make install && \
cp ./src/redis-cli /usr/bin/ && \
# Получить SSL-сертификат.
mkdir --parents ~/.redis && \
wget "https://storage.yandexcloud.kz/cloud-certs/CA.pem" \
--output-document ~/.redis/YandexInternalRootCA.crt && \
chmod 0655 ~/.redis/YandexInternalRootCA.crt
Примеры строк подключения
Примеры для Linux проверялись в следующем окружении:
- Виртуальная машина в Yandex Cloud с Ubuntu 20.04 LTS.
- Bash:
5.0.16. - Python:
3.8.2; pip3:20.0.2. - PHP:
7.4.3. - OpenJDK:
11.0.8; Maven:3.6.3. - Node.JS:
10.19.0, npm:6.14.4. - Go:
1.13.8. - Ruby:
2.7.0p0. - unixODBC:
2.3.6.
Примеры для Windows проверялись в следующем окружении:
- Локальная машина с Windows 10 Pro build
19042.1052. - PowerShell:
5.1.19041. - cURL:
7.55.1 WinSSL.
Примеры кода с заполненным FQDN хоста доступны в консоли управления
Bash
Перед подключением установите зависимости:
sudo apt update && sudo apt install -y redis-tools
Подключение с помощью Sentinel:
-
Получите адрес хоста-мастера, используя Sentinel и любой хост Valkey™:
redis-cli \ -h <FQDN_любого_хоста_Valkey™> \ -p 26379 \ sentinel \ get-master-addr-by-name <имя_кластера_Valkey™> | head -n 1 -
Подключитесь к хосту с этим адресом:
redis-cli \ -h <адрес_хоста-мастера_Valkey™> \ -a <пароль_Valkey™>
Подключение напрямую к мастеру:
redis-cli \
-h c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz \
-a <пароль>
Перед подключением установите зависимости:
Соберите утилиту redis-tools с поддержкой TLS одним из двух способов::
-
Из репозитория
-
Подключите репозиторий:
sudo apt-add-repository ppa:redislabs/redisПакеты в этом репозитории уже собраны с флагом
BUILD_TLS=yes. -
Установите утилиту:
sudo apt update && sudo apt install -y redis-tools
-
-
Вручную
Перейдите в директорию, куда хотите скачать дистрибутив. Скачайте стабильную версию утилиты и выполните сборку и установку:
wget https://download.redis.io/redis-stable.tar.gz && \ tar -xzvf redis-stable.tar.gz && \ cd redis-stable && \ make BUILD_TLS=yes && \ sudo make install && \ sudo cp ./src/redis-cli /usr/bin/
Подключение напрямую к мастеру:
redis-cli \
-h c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz \
-a <пароль> \
-p 6380 \
--tls \
--cacert ~/.redis/YandexInternalRootCA.crt
О том, как получить FQDN хоста, см. инструкцию.
После подключения к кластеру выполните команды:
SET foo bar
GET foo
При успешном подключении к кластеру и выполнении тестового запроса будет выведена строка bar.
C#
Перед подключением:
-
Установите зависимости:
sudo apt update && sudo apt install --yes apt-transport-https dotnet-sdk-6.0 -
Создайте директорию для проекта:
cd ~/ && mkdir cs-project && cd cs-project -
Создайте конфигурационный файл:
RedisClient.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="StackExchange.Redis" Version="2.8.58" /> </ItemGroup> </Project> -
Для подключения с SSL получите SSL-сертификат.
Пример кода для подключения с помощью Sentinel:
Program.cs
using System;
using System.Threading.Tasks;
using StackExchange.Redis;
namespace RedisClient
{
class Program
{
// Configuration constants
private const string TEST_KEY = "test-key";
private const string TEST_VALUE = "test-value";
private const string USERNAME = "default";
private const string PASSWORD = "<пароль>";
static async Task<int> Main(string[] args)
{
try
{
var sentinelOptions = new ConfigurationOptions
{
EndPoints = {
"<FQDN_хоста_1_Valkey™>:26379",
...
"<FQDN_хоста_N_Valkey™>:26379"
},
CommandMap = CommandMap.Sentinel
};
var sentinelConnection = await ConnectionMultiplexer.ConnectAsync(sentinelOptions);
var endpoints = sentinelConnection.GetEndPoints();
var sentinelServer = sentinelConnection.GetServer(endpoints[0]);
var masterEndpoint = await sentinelServer.SentinelGetMasterAddressByNameAsync("mymaster");
await sentinelConnection.CloseAsync();
var masterOptions = new ConfigurationOptions
{
EndPoints = { masterEndpoint },
User = USERNAME,
Password = PASSWORD,
Ssl = false
};
var connection = await ConnectionMultiplexer.ConnectAsync(masterOptions);
var db = connection.GetDatabase();
bool setResult = await db.StringSetAsync(TEST_KEY, TEST_VALUE);
if (!setResult)
{
Console.WriteLine($"SET failed for key {TEST_KEY}");
return 1;
}
Console.WriteLine($"Successfully set {TEST_KEY} = {TEST_VALUE}");
var getResult = await db.StringGetAsync(TEST_KEY);
if (!getResult.HasValue)
{
Console.WriteLine($"GET failed: Key {TEST_KEY} not found");
return 1;
}
string retrievedValue = getResult.ToString();
if (retrievedValue != TEST_VALUE)
{
Console.WriteLine($"GET failed. Expected: '{TEST_VALUE}' Actual: '{retrievedValue}'");
return 1;
}
Console.WriteLine($"Successfully retrieved {TEST_KEY} = {retrievedValue}");
return 0;
}
catch (Exception ex)
{
Console.WriteLine($"Operation failed: {ex.Message}");
return 1;
}
}
}
}
Пример кода для подключения напрямую к мастеру:
Program.cs
using System;
using System.Threading.Tasks;
using StackExchange.Redis;
namespace RedisClient
{
class Program
{
// Configuration constants
private const string TEST_KEY = "test-key";
private const string TEST_VALUE = "test-value";
private const string USERNAME = "default";
private const string PASSWORD = "<пароль>";
static async Task<int> Main(string[] args)
{
try
{
var masterOptions = new ConfigurationOptions
{
EndPoints = { "<FQDN_хоста-мастера_Valkey™>:6379" },
User = USERNAME,
Password = PASSWORD
};
var connection = await ConnectionMultiplexer.ConnectAsync(masterOptions);
var db = connection.GetDatabase();
bool setResult = await db.StringSetAsync(TEST_KEY, TEST_VALUE);
if (!setResult)
{
Console.WriteLine($"SET failed for key {TEST_KEY}");
return 1;
}
Console.WriteLine($"Successfully set {TEST_KEY} = {TEST_VALUE}");
var getResult = await db.StringGetAsync(TEST_KEY);
if (!getResult.HasValue)
{
Console.WriteLine($"GET failed: Key {TEST_KEY} not found");
return 1;
}
string retrievedValue = getResult.ToString();
if (retrievedValue != TEST_VALUE)
{
Console.WriteLine($"GET failed. Expected: '{TEST_VALUE}' Actual: '{retrievedValue}'");
return 1;
}
Console.WriteLine($"Successfully retrieved {TEST_KEY} = {retrievedValue}");
return 0;
}
catch (Exception ex)
{
Console.WriteLine($"Operation failed: {ex.Message}");
return 1;
}
}
}
}
Program.cs
using System;
using System.Threading.Tasks;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using StackExchange.Redis;
namespace RedisClient
{
class Program
{
// Configuration constants
private const string TEST_KEY = "test-key";
private const string TEST_VALUE = "test-value";
private const string USERNAME = "default";
private const string PASSWORD = "<пароль>";
private const string CERT = "/home/<домашняя_директория>/.redis/YandexInternalRootCA.crt"
static async Task<int> Main(string[] args)
{
try
{
var masterOptions = new ConfigurationOptions
{
EndPoints = { "<FQDN_хоста-мастера_Valkey™>:6380" },
User = USERNAME,
Password = PASSWORD,
Ssl = true,
SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13
};
masterOptions.CertificateValidation += (
object sender,
X509Certificate? certificate,
X509Chain? chain,
SslPolicyErrors sslPolicyErrors) =>
{
if (certificate == null) {
return false;
}
var ca = new X509Certificate2(CERT);
bool verdict = (certificate.Issuer == ca.Subject);
if (verdict) {
return true;
}
Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
return false;
}
var connection = await ConnectionMultiplexer.ConnectAsync(masterOptions);
var db = connection.GetDatabase();
// Send SET command
bool setResult = await db.StringSetAsync(TEST_KEY, TEST_VALUE);
if (!setResult)
{
Console.WriteLine($"SET failed for key {TEST_KEY}");
return 1;
}
Console.WriteLine($"Successfully set {TEST_KEY} = {TEST_VALUE}");
// Send GET command
var getResult = await db.StringGetAsync(TEST_KEY);
if (!getResult.HasValue)
{
Console.WriteLine($"GET failed: Key {TEST_KEY} not found");
return 1;
}
string retrievedValue = getResult.ToString();
if (retrievedValue != TEST_VALUE)
{
Console.WriteLine($"GET failed. Expected: '{TEST_VALUE}', Actual: '{retrievedValue}'");
return 1;
}
Console.WriteLine($"Successfully retrieved {TEST_KEY} = {retrievedValue}");
return 0;
}
catch (Exception ex)
{
Console.WriteLine($"Operation failed: {ex.Message}");
return 1;
}
}
}
}
О том, как получить FQDN хоста, см. инструкцию.
Подключение:
cd ~/cs-project && \
dotnet build && dotnet run bin/Debug/net6.0/RedisClient
При успешном подключении к кластеру и выполнении тестового запроса будут выведены строки:
Successfully set test-key = test-value
Successfully retrieved test-key = test-value
Go
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes golang git && \
go mod init github.com/go-redis/redis && \
go get github.com/go-redis/redis/v7
Пример кода для подключения с помощью Sentinel:
connect.go
package main
import (
"fmt"
"github.com/go-redis/redis/v7"
)
func main() {
conn := redis.NewUniversalClient(
&redis.UniversalOptions{
Addrs: []string{
"<FQDN_хоста_1_Valkey™>:26379",
...
"<FQDN_хоста_N_Valkey™>:26379"},
MasterName: "<имя_кластера_Valkey™>",
Password: "<пароль>",
ReadOnly: false,
},
)
err := conn.Set("foo", "bar", 0).Err()
if err != nil {
panic(err)
}
result, err := conn.Get("foo").Result()
if err != nil {
panic(err)
}
fmt.Println(result)
conn.Close()
}
Пример кода для подключения напрямую к мастеру:
connect.go
package main
import (
"fmt"
"github.com/go-redis/redis/v7"
)
func main() {
conn := redis.NewUniversalClient(
&redis.UniversalOptions{
Addrs: []string{"c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz:6379"},
Password: "<пароль>",
ReadOnly: false,
},
)
err := conn.Set("foo", "bar", 0).Err()
if err != nil {
panic(err)
}
result, err := conn.Get("foo").Result()
if err != nil {
panic(err)
}
fmt.Println(result)
conn.Close()
}
connect.go
package main
import (
"crypto/tls"
"crypto/x509"
"fmt"
"github.com/go-redis/redis/v7"
"io/ioutil"
)
const (
cert = "/home/<домашняя_директория>/.redis/YandexInternalRootCA.crt"
)
func main() {
rootCertPool := x509.NewCertPool()
pem, err := ioutil.ReadFile(cert)
if err != nil {
panic(err)
}
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
panic("Failed to append PEM.")
}
conn := redis.NewUniversalClient(
&redis.UniversalOptions{
Addrs: []string{"c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz:6380"},
Password: "<пароль>",
ReadOnly: false,
TLSConfig: &tls.Config{
RootCAs: rootCertPool,
},
},
)
err = conn.Set("foo", "bar", 0).Err()
if err != nil {
panic(err)
}
result, err := conn.Get("foo").Result()
if err != nil {
panic(err)
}
fmt.Println(result)
conn.Close()
}
О том, как получить FQDN хоста, см. инструкцию.
Подключение:
go run connect.go
При успешном подключении к кластеру и выполнении тестового запроса будет выведена строка bar.
Java
Перед подключением:
-
Установите зависимости:
sudo apt update && sudo apt install --yes default-jdk maven -
Создайте директорию для проекта Maven:
cd ~/ && mkdir --parents project/src/java/com/example && cd project/ -
Создайте конфигурационный файл для Maven:
pom.xml
<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>app</artifactId> <packaging>jar</packaging> <version>0.1.0</version> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.7.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.30</version> </dependency> </dependencies> <build> <finalName>${project.artifactId}-${project.version}</finalName> <sourceDirectory>src</sourceDirectory> <resources> <resource> <directory>src</directory> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <goals> <goal>attached</goal> </goals> <phase>package</phase> <configuration> <descriptorRefs> <descriptorRef> jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project>Актуальные версии зависимостей для Maven:
-
Для подключения с SSL:
-
Создайте защищенное хранилище сертификатов:
keytool -importcert \ -alias YARootCrt \ -file ~/.redis/YandexInternalRootCA.crt \ -keystore ~/.redis/YATrustStore \ -storepass <пароль_защищенного_хранилища> \ --noprompt && chmod 0655 ~/.redis/YATrustStore
Пример кода для подключения с помощью Sentinel:
src/java/com/example/App.java
package com.example;
import java.util.HashSet;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;
public class App {
public static void main(String[] args) {
String redisName = "<имя_кластера_Valkey™>";
String redisPass = "<пароль>";
HashSet sentinels = new HashSet();
sentinels.add("<FQDN_хоста_1_Valkey™>:26379");
...
sentinels.add("<FQDN_хоста_N_Valkey™>:26379");
try {
JedisSentinelPool pool = new JedisSentinelPool(redisName, sentinels);
Jedis conn = pool.getResource();
conn.auth(redisPass);
conn.set("foo", "bar");
System.out.println(conn.get("foo"));
pool.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Пример кода для подключения напрямую к мастеру:
src/java/com/example/App.java
package com.example;
import redis.clients.jedis.Jedis;
public class App {
public static void main(String[] args) {
String redisHost = "c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz";
String redisPass = "<пароль>";
try {
Jedis conn = new Jedis(redisHost);
conn.auth(redisPass);
conn.set("foo", "bar");
System.out.println(conn.get("foo"));
conn.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
src/java/com/example/App.java
package com.example;
import redis.clients.jedis.DefaultJedisClientConfig;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import javax.net.ssl.SSLParameters;
public class App {
public static void main(String[] args) {
String redisHost = "c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz";
String redisPass = "<пароль_кластера>";
System.setProperty("javax.net.ssl.trustStore", "/home/<домашняя_директория>/.redis/YATrustStore");
System.setProperty("javax.net.ssl.trustStorePassword", "<пароль_защищенного_хранилища_сертификатов>");
SSLParameters sslParameters = new SSLParameters();
DefaultJedisClientConfig jedisClientConfig = DefaultJedisClientConfig.builder().
password(redisPass).
ssl(true).
sslParameters(sslParameters).
build();
try {
Jedis conn = new Jedis(new HostAndPort(redisHost, 6380), jedisClientConfig);
conn.set("foo", "bar");
System.out.println(conn.get("foo"));
conn.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
О том, как получить FQDN хоста, см. инструкцию.
Подключение:
mvn clean package && \
java -jar target/app-0.1.0-jar-with-dependencies.jar
При успешном подключении к кластеру и выполнении тестового запроса будет выведена строка bar.
Node.js
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes nodejs npm && \
npm install ioredis
Пример кода для подключения с помощью Sentinel:
app.js
"use strict";
const Redis = require("ioredis");
const conn = new Redis({
sentinels: [
{ host: "<FQDN_хоста_1_Valkey™>", port: 26379 },
...
{ host: "<FQDN_хоста_N_Valkey™>", port: 26379 },
],
name: "<имя_кластера_Valkey™>",
password: "<пароль>"
});
conn.set("foo", "bar", function (err) {
if (err) {
console.error(err);
conn.disconnect();
}
});
conn.get("foo", function (err, result) {
if (err) {
console.error(err);
} else {
console.log(result);
}
conn.disconnect();
});
Пример кода для подключения напрямую к мастеру:
app.js
"use strict";
const Redis = require("ioredis");
const conn = new Redis({
host: "c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz",
port: 6379,
password: "<пароль>"
});
conn.set("foo", "bar", function (err) {
if (err) {
console.error(err);
conn.disconnect();
}
});
conn.get("foo", function (err, result) {
if (err) {
console.error(err);
} else {
console.log(result);
}
conn.disconnect();
});
app.js
"use strict";
const fs = require("fs");
const Redis = require("ioredis");
const conn = new Redis({
host: "c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz",
port: 6380,
password: "<пароль>",
tls: {
ca: fs.readFileSync("/home/<домашняя_директория>/.redis/YandexInternalRootCA.crt"),
}
});
conn.set("foo", "bar", function (err) {
if (err) {
console.error(err);
conn.disconnect();
}
});
conn.get("foo", function (err, result) {
if (err) {
console.error(err);
} else {
console.log(result);
}
conn.disconnect();
});
О том, как получить FQDN хоста, см. инструкцию.
Подключение:
node app.js
При успешном подключении к кластеру и выполнении тестового запроса будет выведена строка bar.
PHP
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes php php-dev php-pear && \
sudo pear channel-discover pear.nrk.io && \
sudo pear install nrk/Predis
Пример кода для подключения с помощью Sentinel:
connect.php
<?php
require "Predis/Autoloader.php";
Predis\Autoloader::register();
$sentinels = [
"<FQDN_хоста_1_Valkey™>:26379",
...
"<FQDN_хоста_N_Valkey™>:26379",
];
$options = [
"replication" => "sentinel",
"service" => "<имя_кластера_Valkey™>",
"parameters" => [
"password" => "<пароль>",
],
];
$conn = new Predis\Client($sentinels, $options);
$conn->set("foo", "bar");
var_dump($conn->get("foo"));
$conn->disconnect();
?>
Пример кода для подключения напрямую к мастеру:
connect.php
<?php
require "Predis/Autoloader.php";
Predis\Autoloader::register();
$host = ["c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz:6379"];
$options = [
"parameters" => [
"password" => "<пароль>",
],
];
$conn = new Predis\Client($host, $options);
$conn->set("foo", "bar");
var_dump($conn->get("foo"));
$conn->disconnect();
?>
connect.php
<?php
require "Predis/Autoloader.php";
Predis\Autoloader::register();
$host = ["c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz:6380"];
$options = [
"parameters" => [
"scheme" => "tls",
"ssl" => [
"cafile" => "/home/<домашняя_директория>/.redis/YandexInternalRootCA.crt",
"verify_peer" => true,
"verify_peer_name" => false,
],
"password" => "<пароль>",
],
];
$conn = new Predis\Client($host, $options);
$conn->set("foo", "bar");
var_dump($conn->get("foo"));
$conn->disconnect();
?>
О том, как получить FQDN хоста, см. инструкцию.
Подключение:
php connect.php
При успешном подключении к кластеру и выполнении тестового запроса будет выведена строка bar.
Python
Перед подключением установите зависимости:
sudo apt update && sudo apt install -y python3 python3-pip && \
pip3 install redis
Пример кода для подключения с помощью Sentinel:
connect.py
from redis.sentinel import Sentinel
sentinels = [
"<FQDN_хоста_1_Valkey™>",
...
"<FQDN_хоста_N_Valkey™>"
]
name = "<имя_кластера_Valkey™>"
pwd = "<пароль>"
sentinel = Sentinel([(h, 26379) for h in sentinels], socket_timeout=0.1)
master = sentinel.master_for(name, password=pwd)
slave = sentinel.slave_for(name, password=pwd)
master.set("foo", "bar")
print(slave.get("foo"))
Пример кода для подключения без использования SSL-соединения напрямую к мастеру:
connect.py
import redis
r = redis.StrictRedis(
host="c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz",
port=6379,
password="<пароль>",
)
r.set("foo", "bar")
print(r.get("foo"))
connect.py
import redis
r = redis.StrictRedis(
host="c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz",
port=6380,
password="<пароль>",
ssl=True,
ssl_ca_certs="/home/<домашняя_директория>/.redis/YandexInternalRootCA.crt",
)
r.set("foo", "bar")
print(r.get("foo"))
О том, как получить FQDN хоста, см. инструкцию.
Подключение:
python3 connect.py
При успешном подключении к кластеру и выполнении тестового запроса будет выведена строка bar.
Ruby
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes ruby && \
sudo gem install redis
Пример кода для подключения с помощью Sentinel:
connect.rb
# coding: utf-8
require 'redis'
SENTINELS = [
{ host: '<FQDN_хоста_1_Valkey™>', port: 26379 },
...
{ host: '<FQDN_хоста_N_Valkey™>', port: 26379 }
]
conn = Redis.new(
host: '<имя_кластера_Valkey™>',
sentinels: SENTINELS,
role: 'master',
password: '<пароль>'
)
conn.set('foo', 'bar')
puts conn.get('foo')
conn.close
Пример кода для подключения без использования SSL-соединения напрямую к мастеру:
connect.rb
# coding: utf-8
require 'redis'
conn = Redis.new(
host: 'c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz',
port: 6379,
password: '<пароль>'
)
conn.set('foo', 'bar')
puts conn.get('foo')
conn.close
connect.rb
# coding: utf-8
require 'redis'
conn = Redis.new(
host: 'c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz',
port: 6380,
password: '<пароль>',
ssl: true,
ssl_params: { ca_file: '/home/<домашняя_директория>/.redis/YandexInternalRootCA.crt' },
)
conn.set('foo', 'bar')
puts conn.get('foo')
conn.close
О том, как получить FQDN хоста, см. инструкцию.
Подключение:
ruby connect.rb
При успешном подключении к кластеру и выполнении тестового запроса будет выведена строка bar.