ServiceStack.redisでこれを行うことができました。
IRedisTypedClient<ObjectName> myObj = redisClient.As<ObjectName>();
しかし、StackExchange.Redisでこれを行う例は見つかりませんでした。
JSONにシリアル化して保存する必要がありますか?
よろしくお願いします。
現時点では、SE.Redisはシリアル化の提供を試みていません。これを行うには、あまりにも多くの異なる方法があります。私はライブラリが7ではなく1つのことを行うべきだという意見ではありません。ハイブリッドシリアライゼーションなどの懸念事項を、拡張メソッドやその他の配管/ラッピングコード、追加するシリアライゼーション戦略、およびライブラリを選択するだけで追加できるはずです。選んで。
最も簡単な解決策は、json/binary/otherシリアライゼーションを使用することです。より複雑ですがよりネイティブです-redis "ハッシュ"データ型を使用します 。
最初のケースでは、protobufライブラリを優先します(デフォルトで に含まれています)StackExchange.Redis.Extensions.Protobuf nugetパッケージ)。ただし、必要に応じてjson/binary/xmlシリアル化を使用できます。
それらすべてに関する優れたパフォーマンスレポートがあります: -servicestack-text /
例:以下のヘルパー関数のサンプルを作成し、JSON SerializeObject/DeSerializeObjectをget/setの前に使用します。ただし、このソリューションには、オブジェクトサイズが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);
}
}
}