gpt4 book ai didi

caching - 使用 HashTable 将对象作为值保存在 Redis 中

转载 作者:行者123 更新时间:2023-12-03 07:25:56 24 4
gpt4 key购买 nike

我是 Redis 的新手,我正在尝试编写一个简单的项目,该项目从 SQL 数据库中收集信息并缓存到 Redis 中。由于我更熟悉 C#,因此我选择了 StackExchange.Redis 要做到这一点。

假设我的数据库中有一个表,其架构如下 人员(ID、姓名、地址、年龄、出生日期) .
我有一个 我的项目中具有相应字段的类。
我还有一个函数 GetPersonByID(ID) ,它请求 Redis,如果具有 ID 的键不存在,它会执行另一个名为 的函数GetPersonByID_SQL(ID) ,当执行sql查询时,从db获取信息后,它会创建一个对象 ,将该对象添加到 Redis(使用 hashTable)并返回该对象。如果键存在于 Redis 中,该函数只是从 Redis 获取信息,创建一个对象 ,将相应的值映射到字段并返回该对象。

这是我如何执行此操作的代码。

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)自动绑定(bind)到我现有的对象?

最佳答案

My question is, Is there any way I can Bind automatically the value of Redis (that is in my way a HashTable) to my existing object?



不,这不是 StackExchange.Redis 的功能 - 值只能存储为最基本的类型(字符串和数字)。您需要自己转换为更复杂的值。

因此,您可以将您的人员对象存储为多个哈希字段(正如您在代码中所做的那样),或者您可以将您的人员对象存储为针对键的单个序列化字符串(您可以为此使用 STRING 数据结构) .然后,您可以在要检索值时执行必要的反序列化。

如果您总是想从您的 Person 数据结构中检索每个值,我建议您选择第二个选项。您只需要为每个 get/set 使用一个命令命令:
// SET
_redis.StringSet(key, serializedPerson);

// GET
string serializedPerson = _redis.StringGet(key);

关于caching - 使用 HashTable 将对象作为值保存在 Redis 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59129517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com