Мы рассматриваем возможность использования Redis, размещенного в Azure. Наш первый случай использования NuGet StackExchange - это поиск по нашей клиентской базе. Первоначально это около 10 000 клиентов, но со временем они будут расти.
У покупателя будет конкретная модель поиска, примерно так:
{
"Id": 123,
"Name": "Bob Smith",
"Age": 72,
"Postcode": "AB123EF",
"Email": "[email protected]",
"Telephones": [
"07710123456",
"01453123456"
]
}
Насколько я понимаю, вам следует избегать ввода больших объектов blob в Redis, поэтому хранить список как один объект - не лучшая идея. Итак, мы использовали функции List * для хранения каждого элемента под ключом и сериализации данных.
Первоначальная работа выглядит примерно так:
var tasks = new List<Task>();
foreach (var customer in customers)
{
tasks.Add(db.ListLeftPushAsync(_key, JsonConvert.SerializeObject(customer)));
}
await Task.WhenAll(tasks).ConfigureAwait(true);
Все работает так, как мы ожидали, я уверен, что есть некоторая оптимизация, но, похоже, все в порядке.
Это принципиально оставило нам вопрос о запросе информации. Я понимаю, что Redis хранит все как строку, но я не понимаю, как искать в списке, поскольку это объект Redis, а не строка. Таким образом, мы не можем использовать, например, ListRange(_key).Where(c => c.Contains("Bob"))
.
Пожалуйста, дайте мне знать, если наш подход неверен или есть метод, который мне просто не хватает.