【发布时间】:2019-12-06 17:29:32
【问题描述】:
我是 Redis 新手,我正在尝试编写一个简单的项目,该项目从 SQL 数据库中收集信息并缓存到 Redis 中。由于我对 C# 更加熟悉,因此我选择了 StackExchange.Redis 来执行此操作。
假设我的数据库中有一个表,其架构类似于 Persons(ID, Name, Address, Age, BirthDate)。 我的项目中有一个具有相应字段的 Person 类。 我还有一个函数 GetPersonByID(ID),它请求 Redis,如果 ID 为 的键不存在,它会执行另一个名为 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)自动绑定到我现有的对象?
【问题讨论】:
标签: caching redis binding stackexchange.redis