我可以使用
在ServiceStack.redis中执行此操作IRedisTypedClient<ObjectName> myObj = redisClient.As<ObjectName>();
但我无法在StackExchange.Redis中找到任何示例。
我是否必须序列化为JSON然后存储它们?
提前完成。
答案 0 :(得分:21)
目前,SE.Redis并没有尝试提供序列化 - 有太多不同的方法可以做到这一点。我更倾向于认为库应该做一件事,而不是7.应该可以通过扩展方法或其他管道/包装代码添加任何混合序列化等问题,选择您选择的任何序列化策略,以及任何库你选择。
答案 1 :(得分:8)
最简单的解决方案是使用json / binary /其他序列化。更复杂但更原生 - 使用redis "hashes" data type。
在第一种情况下,我更喜欢 protobuf 库(它默认包含在StackExchange.Redis.Extensions.Protobuf nuget包中)。但是如果需要,可以使用json / binary / xml序列化。
答案 2 :(得分:0)
示例:在下面创建帮助函数示例,在获取/设置之前使用JSON SerializeObject / DeSerializeObject。但是此解决方案具有以下限制:对象大小不能超过Int32.MaxNumber(2,147,483,647为2Gb)。
示例代码
public static void SetData<T>(string key, T data)
{
using (var redis = ConnectionMultiplexer.Connect("localhost:6379"))
{
IDatabase db = redis.GetDatabase();
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
json_serializer.MaxJsonLength = int.MaxValue;
db.StringSet(key, json_serializer.Serialize(data));
redis.Close();
}
}
public static T GetData<T>(string key)
{
using (var redis = ConnectionMultiplexer.Connect("localhost:6379"))
{
try
{
IDatabase db = redis.GetDatabase();
var res = db.StringGet(key);
redis.Close();
if (res.IsNull)
return default(T);
else
return JsonConvert.DeserializeObject<T>(res);
}
catch
{
return default(T);
}
}
}