Redis C#. При добавлении авторизации рабочий код падает с различными ошибками
Подскажите, как корректно авторизоваться в 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"]
Источник: Stack Overflow на русском