Я только что установил мембрану и клиент enyim для .NET и наткнулся на статью, в которой упоминается этот метод интеграции 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.
А как насчет аналогичного шаблона для добавления элементов в список <'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 в хранилище значений ключей кеша?