C# Membase server和Enyim--集成LINQ和/或集合
我刚刚安装了membase和enyim client for.NET,并看到一篇文章提到了这种集成linq的技术:C# Membase server和Enyim--集成LINQ和/或集合,c#,linq,caching,memcached,membase,C#,Linq,Caching,Memcached,Membase,我刚刚安装了membase和enyim client for.NET,并看到一篇文章提到了这种集成linq的技术: public static IEnumerable<T> CachedQuery<T> (this IQueryable<T> query, MembaseClient cache, string key) where T : class { object result; if (
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;
}
}
公共静态IEnumerable CachedQuery
(此IQueryable查询,MembaseClient缓存,字符串键)其中T:class
{
客观结果;
if(cache.TryGet(键,输出结果))
{
返回(IEnumerable)结果;
}
其他的
{
IEnumerable items=query.ToList();
cache.Store(StoreMode.Set、key、items);
退货项目;
}
}
它将首先检查所需数据是否在缓存中,如果没有缓存,则返回它
目前,我正在应用程序中使用字典
,并希望用membase/memcached类型的方法来替换它
类似的向列表添加项或在缓存列表上使用Linq操作符的模式如何?在我看来,将整个列表存储在缓存中的单个键下,并且必须检索它、添加到它,然后在每次添加元素时重新设置它,这可能是一个坏主意。或者这是一种可以接受的做法
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);
}
}
public bool Add(T项)
{
对象列表;
if(cache.TryGet(this.Key,out list))
{
var _list=列表为列表;
_列表。添加(项目);
返回cache.Store(StoreMode.Set,this.Key,_list);
}
其他的
{
var_list=新列表(新的T[]{item});
返回cache.Store(StoreMode.Set,this.Key,_list);
}
}
在这样的缓存情况下,通常如何处理集合?是否通常使用散列算法,或某种密钥前缀系统来识别缓存键值存储中T类型的“列表”?这取决于几个因素: 这应该是可伸缩的吗?此列表是否特定于用户,并且您可以确定不会对同一列表同时调用两次“Add”?-比赛条件是一种风险 我在membase中存储了一个通用列表,但它是特定于用户的,所以我可以非常肯定不会有竞争条件
您还应该考虑序列化列表的体积,这可能很大。我认为我的案子清单很小
不确定它是否有用,但我实现了一个非常基本的迭代列表,通过membase进行随机访问(通过双间接寻址)。通过复合密钥(由多个字段组成)进行随机访问 您需要:我希望它足够清楚。这取决于几个因素: 这应该是可伸缩的吗?此列表是否特定于用户,并且您可以确定不会对同一列表同时调用两次“Add”?-比赛条件是一种风险 我在membase中存储了一个通用列表,但它是特定于用户的,所以我可以非常肯定不会有竞争条件
您还应该考虑序列化列表的体积,这可能很大。我认为我的案子清单很小
不确定它是否有用,但我实现了一个非常基本的迭代列表,通过membase进行随机访问(通过双间接寻址)。通过复合密钥(由多个字段组成)进行随机访问 您需要: