私のクライアントはサーバーにjson(JObject)を送信し、その値をキー値のペアにフラット化するカスタムメソッドがあります。Redisハッシュよりも強力なタイプはどのように処理できますか?
平坦化されたデータのA辞書は、次のようになりますが作成され
{
Prop1: 12,
Prop2: "Str",
Prop3:{
Prop4: 222.4
}
}
これは私のJSONであると仮定すると:今
"Prop1": 12
"Prop2": "Str"
"Prop3.Prop4": 222.4
、私はRedisの(StackExchange.Redisを使用していますクライアント)。
キー(例:obj:123456)を生成し、辞書のキー値をハッシュエントリとして追加します。
データはのRedisに保存されますが、私の問題は、私は私がRedisのからデータを取得する際の型を区別する必要があるということです。
私はIsInteger
フラグに気付き、それを最初から使用したいと思っていました。 整数値(IsInteger
がtrue)のHashEntry
を作成してから、HashSetted
のデータを作成しました。 HashGet
を使用してデータを取得したとき、私はIsIntegerフラグがfalseであることに気付きました。
IsInteger
フラグがHashSet
とHashGet
の間に失われる理由はありますか?
タイプ(文字列\ int \ double \ date)を処理するための些細な方法はありませんRedis?私はカスタム実装を考えることができますが、私はそこに行きたいと思います。
編集 - ここでのコードの例です:
Dictionary<string, object> objs = new Dictionary<string, object>
{
{"Prop1", 12},
{"Prop2", "Str"},
{"Prop3.Prop4", 222.4},
};
var redisConnection = ConnectionMultiplexer.Connect(ConfigurationOptions.Parse("localhost:6379,name=SafeRedisConnection,connectTimeout=100000,syncTimeout=100000,abortConnect=false,defaultDatabase=5"));
// just a test
var hashEntries = objs.Where(kvp => kvp.Value is int).Select(kvp => new HashEntry(kvp.Key, (int)kvp.Value));
var hashEntries1 = objs.Where(kvp => kvp.Value is string).Select(kvp => new HashEntry(kvp.Key, (string)kvp.Value));
var hashEntries2 = objs.Where(kvp => kvp.Value is double).Select(kvp => new HashEntry(kvp.Key, (double)kvp.Value));
var arr = hashEntries.Union(hashEntries1).Union(hashEntries2).ToArray();
redisConnection.GetDatabase().HashSet("obj:123456", arr);
var keys = redisConnection.GetDatabase().HashKeys("obj:123456");
var dic = keys.ToDictionary(k => k, k => redisConnection.GetDatabase().HashGet("obj:123456", k));
データの設定方法やデータを取得するコードを追加できますか? –
@YuvalItzchakov - いくつかのコードを追加しました。タイプ別の分離は、私がIsIntegerのことをテストしたものです。私は、ここでレディスよりも "タイプ"を得るより良い習慣について嬉しく思います。 –