Redis C#. При добавлении авторизации рабочий код падает с различными ошибками

Рейтинг: 0Ответов: 0Опубликовано: 27.07.2025

Подскажите, как корректно авторизоваться в Redis ?

Следующий пример кода работает корректно, когда авторизация не задана. при попытке добавить авторизацию (либо через options, либо в строку подключения) возникают различные ошибки

using System.Net;
using System.Text.Json;
using System.Text.Json.Serialization;
using NRedisStack.RedisStackCommands;
using NRedisStack.Search;
using NRedisStack.Search.Literals.Enums;
using StackExchange.Redis;

namespace TC.Console.Tests;

public static class RedisTest
{
   // private const string ConnectionString = "localhost:6379,password=qwerty,user=appuser";
    private const string ConnectionString = "localhost:6379";

    public static async Task Run(CancellationToken cancellationToken)
    {
        await using var conn = await ConnectionMultiplexer.ConnectAsync(ConnectionString);
       /* await using var conn = await ConnectionMultiplexer.ConnectAsync(new ConfigurationOptions()
        {
            EndPoints = { "localhost:6379" },
            Password = "MyStrongPassword",
            AbortOnConnectFail = false
        });*/
        var db = conn.GetDatabase();
        var json = db.JSON();

        var ft = db.FT();
        var indexes = await ft._ListAsync();
        if (!indexes.Select(x=>(string)x!).Contains("idx:users"))
        {
            await ft.CreateAsync(
                "idx:users",
                FTCreateParams.CreateParams().On(IndexDataType.JSON).Prefix("user:"),
                new Schema().AddTextField("$.Name")
                    .AddNumericField("$.Age")
            );
        }

       var options = new JsonSerializerOptions
       {
           PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // Опционально
           WriteIndented = false,
           ReferenceHandler = ReferenceHandler.IgnoreCycles
       };

        await json.SetAsync("user:1", "$", new User { Name = "Bob", Age = 100000000}, serializerOptions: options);
        await json.SetAsync("user:2", "$", new User { Name = "Bob", Age = 45 }, serializerOptions: options);
        await json.SetAsync("user:3", "$", new User { Name = "Charlie", Age = 35 }, serializerOptions: options);
        
        System.Console.WriteLine(json.Get<User>("user:3", "$", serializerOptions: options));
        System.Console.WriteLine(json.Get<User>("user:2", "$", serializerOptions: options));
        System.Console.WriteLine(json.Get<User>("user:1", "$", serializerOptions: options));
        
        var results = ft.Search("idx:users", new Query("*"));
        foreach (var doc in results.Documents)
        {
            System.Console.WriteLine(doc["json"]);
        }

/*
        var result = await ft.SearchAsync("idx:users", new Query("@age:[30 40]"));

        foreach (var doc in result.Documents)
        {
            var jsonStr = doc["$"]; // JSON возвращается как строка
            var user = JsonSerializer.Deserialize<User>(jsonStr.ToString());
            System.Console.WriteLine($"{user.Name} — {user.Age}");
        }*/
    }
}

public record User
{
    public string Name { get; set; }
    public int Age { get; set; }
}

docker-compose:

version: "3.4"

services:

  redis:
    image: redis/redis-stack-server:latest
    container_name: redis-stack
    healthcheck:
      test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]
    restart: unless-stopped
    ports:
      - "6379:6379"
    command: ["redis-server", "--requirepass", "MyStrongPassword"]

Ответы

Ответов пока нет.