Я новичок в Redis и пытаюсь написать простой проект, который собирает информацию из базы данных SQL и кэширует в Redis. Так как мне удобнее с C #, я выбрал StackExchange.Redis , чтобы сделать это.
Допустим, у меня есть таблица в моей БД со схемойкак это Персоны (ID, имя, адрес, возраст, дата рождения) . В моем проекте есть класс Person с соответствующими полями. У меня также есть функция GetPersonByID (ID) , которая запрашивает Redis, если ключ с идентификатором не существует, он выполняет другую функцию, называемую GetPersonByID_SQL (ID) , когда выполняется sql-запрос, после получения информации из db он создает объект Person , добавляет этот объект в Redis (используя hashTable) и возвращает объект. Если ключ существует в Redis, функция просто получает информацию от Redis, создает объект Person , сопоставляет значения соответствующих значений с полями и возвращает этот объект.
Вот код того, как ясделайте это.
public static Person GetPersonByID(string ID)
{
redis = ConnectionMultiplexer.Connect("127.0.0.1");
IDatabase db = redis.GetDatabase();
Person p;
if (!db.KeyExists(key))
{
p = Person.GetPersonByID_SQL(ID);
db.HashSet(key, "Name", p.Name);
db.HashSet(key, "Address", p.Address);
db.HashSet(key, "Age", p.Age);
db.HashSet(key, "BirthDate", p.BirthDate);
}
else
{
HashEntry[] values = db.HashGetAll(key);
p = new Person();
for (int i = 0; i < values.Length; i++)
{
HashEntry hashEntry = values[i];
switch (hashEntry.Name)
{
case "Name": p.Name = hashEntry.Value; break;
case "Address": p.Address = hashEntry.Value; break;
case "Age": p.Age = hashEntry.Value; break;
case "BirthDate": p.BirthDate = hashEntry.Value; break;
}
}
}
return p;
}
Мой вопрос таков: могу ли я каким-либо образом автоматически связать значение Redis (по-моему, HashTable) с существующим объектом?