如何解决Apache使用泛型过滤器或谓词条件点燃loadCache
我正在寻找.net / C#实现,可以在其中使用Ignite.LoadCache()方法加载缓存以仅通过某些查询操作加载。或者更具体地说,仅加载缓存中所需的内容,而不是所有内容
现在我正在使用null
加载缓存,如此处loadCache
这是我当前的实现方式
public List<TV> Where<TK,TV>(Expression<Func<ICacheEntry<TK,TV>,bool>> query)
{
var cache = _ignite.GetCache<TK,TV>(MyLocalCache);
LoadCache(cache);
var result = cache.AsCacheQueryable().Where(query);
}
private static void LoadCache<TK,TV>(ICache<TK,TV> cache)
{
cache.LoadCache(null);
}
我也将SQL用作我的第三方持久层
解决方法
您应该在自定义ICacheStore
您可以通过将自定义args传递给LoadCache方法来控制加载:
public void LoadCache(Action<object,object> act,params object[] args)
{
// no args,yield all values
if (args == null)
{
for (var item in loadAllFromSql())
{
act(item.Id,item);
}
return;
}
// args contains start and count
int start = (int) args[0];
int cnt = (int) args[1];
for (int i = start; i < start + cnt; i++)
{
act(new Key(i),new Value(i));
}
}
并可选地使用缓存条目过滤器,通过#loadCache方法传递该args:
// load 10 entities starting from 100
cache.LoadCache(new CacheEntryFilter(),100,10);
我认为将表达式作为参数传递应该适合您。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。