membaseと.NET用のenyimクライアントをインストールしたところ、linqを統合するためのこの手法について言及している記事に出くわしました。
public static IEnumerable<T> CachedQuery<T>
(this IQueryable<T> query, MembaseClient cache, string key) where T : class
{
object result;
if (cache.TryGet(key, out result))
{
return (IEnumerable<T>)result;
}
else
{
IEnumerable<T> items = query.ToList();
cache.Store(StoreMode.Set, key, items);
return items;
}
}
必要なデータが最初にキャッシュにあるかどうかをチェックし、キャッシュしていない場合はそれを返します。
現在 Dictionary<'String, List'>
、アプリケーションでを使用しており、これをmembase/memcachedタイプのアプローチに置き換えたいと考えています。
List <'T'>にアイテムを追加したり、キャッシュされたリストでLinq演算子を使用したりするための同様のパターンはどうですか?List <'T'>全体を単一のキーの下でキャッシュに保存し、それを取得して追加し、追加するたびに再設定する必要があるのは悪い考えのように思われます。エレメント。それとも、これは許容できる方法ですか?
public bool Add(T item)
{
object list;
if (cache.TryGet(this.Key, out list))
{
var _list = list as List<T>;
_list.Add(item);
return cache.Store(StoreMode.Set, this.Key, _list);
}
else
{
var _list = new List<T>(new T[] { item });
return cache.Store(StoreMode.Set, this.Key, _list);
}
}
このようなキャッシュ状況では、コレクションは通常どのように処理されますか?代わりにハッシュアルゴリズムが通常使用されますか、それともキャッシュのキー値ストア内のタイプTの「リスト」を識別するためのある種のキープレフィックスシステムが使用されますか?