私はREDISとStackExchange Redisクライアントから始めます。 REDISから一度に複数のアイテムを取得するための最高のパフォーマンスを得ているのだろうかと思います。これはStackExchange Redisのパイプライニングの良い実装ですか?
状況: ユーザーのダッシュボードに個人用の予定表を表示するASP.NET MVC Webアプリケーションがあります。ダッシュボードはランディングページなので、頻繁に使用されます。予定表アイテムを表示するには
、私は最初にその特定の月のすべての予定表アイテムIDを取得:
RedisManager.RedisDb.StringGet("calendaritems_2016_8");
// this returns JSON Serialized List<int>
その後、各予定表アイテムIDの私は、対応するキャッシュキーのリストを作成:
"CalendarItemCache_1"
"CalendarItemCache_2"
"CalendarItemCache_3"
etc.
var multipleItems = CacheHelper.GetMultiple<CalendarItemCache>(cacheKeys);
のTh:私は、一般的な機能でのRedisに手を差し伸べるこのコレクションでは
atの実装は次のようになります。
public List<T> GetMultiple<T>(List<string> keys) where T : class
{
var taskList = new List<Task>();
var returnList = new ConcurrentBag<T>();
foreach (var key in keys)
{
Task<T> stringGetAsync = RedisManager.RedisDb.StringGetAsync(key)
.ContinueWith(task =>
{
if (!string.IsNullOrWhiteSpace(task.Result))
{
var deserializeFromJson = CurrentSerializer.Serializer.DeserializeFromJson<T>(task.Result);
returnList.Add(deserializeFromJson);
return deserializeFromJson;
}
else
{
return null;
}
});
taskList.Add(stringGetAsync);
}
Task[] tasks = taskList.ToArray();
Task.WaitAll(tasks);
return returnList.ToList();
}
私はパイプライン処理を正しく実装していますか? REDIS CLIモニタには次の情報が表示されます。
1472728336.718370 [0 127.0.0.1:50335] "GET" "CalendarItemCache_1"
1472728336.718389 [0 127.0.0.1:50335] "GET" "CalendarItemCache_2"
etc.
何らかのMGETコマンドが必要です。
事前に感謝します。