如何从内存缓存中提取所有项目,其中密钥以相同的单词

时间:2017-03-27 15:17:10

标签: c# caching asp.net-core

我正在使用C#和.Net Core。

我将第三方REST调用结果存储在本地内存缓存中。我想从缓存中提取数据组并将它们返回给我的客户端。

例如,我为分支信息调用REST服务,并将每个结果存储在内存缓存中,并将分支的唯一ID作为缓存密钥...例如,Branch-101,Branch-400,Branch-321。 (注意,我的缓存中还有很多其他数据,而不仅仅是分支信息)

我现在希望能够在缓存中的每个分支返回客户端。有没有人对我这样做的最好方法有任何想法?

有没有办法让我查询缓存并返回缓存中每个分支的数组或字典?

编辑 - 缓存代码的详细信息

以下是尝试从缓存中提取数据的代码。如果数据不在缓存中,则会调用委托来获取数据。此时缓存是扁平的,但如果以不同的方式构建它会更好,我可以在我刚刚开始项目的时候:

第一行设置我要查找的类型的默认值(通常为null) 下一行根据我要查找的对象类型生成一个键。例如,如果我正在寻找一个Branch对象,那么键将是“branch-”+分支的唯一键

接下来,我尝试将对象从缓存中取出。如果对象不存在,我调用委托并将缓存值设置为调用委托的结果:

    // Here is the delegate
    public delegate string GetData(int id);

    // Here is the code that pulls the data out of cache or 
    // calls a delegate to get rest data
    public T CacheOrCall<T>(int id, string nodename, GetData fn)
    {
        T o = default(T);
        string key = typeof(T).ToString() + "-" + id;
        string ret = null;
        bool isCached = this.cache.TryGetValue(key, out o);
        if (!isCached)
        {
            ret = fn(id);
            o = this.Deserialize<T>(ret, nodename);
            this.cache.Set(key, o, this.cacheOptions);
        }
        return o;
    }

1 个答案:

答案 0 :(得分:0)

最后,我为所有分支添加了一个条目。该条目是一个字典对象,其键是一个分支标识符,其值是分支对象本身。

Dictionary<int, Branch>