【问题标题】:Apache ignite loadCache() with filter or predicate conditions with genericsApache 使用泛型的过滤器或谓词条件点燃 loadCache()
【发布时间】:2020-10-13 07:08:54
【问题描述】:

我正在寻找 .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 作为我的第 3 方持久层

【问题讨论】:

    标签: c# .net linq ignite


    【解决方案1】:

    您应该在您的自定义 ICacheStore 实现中处理这个问题。

    您可以通过将自定义参数传递给 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 方法(可选地使用缓存条目过滤器)传递该参数:

    // load 10 entities starting from 100
    cache.LoadCache(new CacheEntryFilter(), 100, 10);
    

    我认为将表达式作为参数传递应该适合您。

    【讨论】:

    • 好的,我为每个商店都安装了 LoadCache。现在的问题是我如何将表达式传递给 cache.LoadCache 方法它在本地指令中找不到 CacheEntryFilter 我现在正在尝试调用这样的函数,cache.LoadCache(new CacheEntryFilter(),query); // Cannot find CacheEntryFilter
    • 我不认为你需要在那里使用过滤器,它可以设置为 null 。另外,你可以传递整个表达式,它应该被正确序列化。比如Expression&lt;Func&lt;int, bool&gt;&gt; myExp = i =&gt; i &gt; 10; 然后cache.LoadCache(null, myExp)
    • 然后您可以检查此参数并将其转换回您的 LoadCache 方法中的表达式,类似于在答案中获取 start 和 count 值
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2011-12-12
    • 2019-11-24
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    相关资源
    最近更新 更多