【问题标题】:How to read all the items present in an Appfabric Cache:如何读取 Appfabric 缓存中存在的所有项目:
【发布时间】:2013-07-09 10:45:33
【问题描述】:

我正在尝试开发一种工具(在 Visual Studio 2010,C# 中),它可以读取 Appfabric 缓存中存在的所有项目并将它们存储在表中。我不必使用powershell。

首先我想如果我可以得到缓存中存在的所有区域,我可以使用DataCache.GetObjectsInRegion 方法来完成我的任务。但是我无法从缓存中获取所有区域名称,因为它不显示用户定义的区域名称,而只显示默认名称,所以现在我放弃了这种方法。

谁能在这里指导我,我的主要目标是读取缓存中存在的所有项目。

【问题讨论】:

    标签: appfabric appfabric-cache azure-appfabric


    【解决方案1】:

    没有列出缓存中所有项目的内置方法。

    您是对的,可以使用 GetObjectsInRegion 为命名缓存列出所有项目。您必须首先知道所有区域名称(如果使用)或调用 GetSystemRegions 以获取所有(默认)系统区域。一个简单的 foreach 将允许您列出所有项目。当你把没有区域名称的东西放入缓存时,它会被添加到系统区域中。

    这是一个基本的例子

        // Declare array for cache host(s).
        DataCacheServerEndpoint[] servers = new DataCacheServerEndpoint[1];
        servers[0] = new DataCacheServerEndpoint("YOURSERVERHERE", 22233);
    
        // Setup the DataCacheFactory configuration.
        DataCacheFactoryConfiguration factoryConfig = new DataCacheFactoryConfiguration();
        factoryConfig.Servers = servers;
    
        factoryConfig.SecurityProperties = new DataCacheSecurity(DataCacheSecurityMode.None, DataCacheProtectionLevel.None);
    
        // Create a configured DataCacheFactory object.
        DataCacheFactory mycacheFactory = new DataCacheFactory(factoryConfig);
    
        // Get a cache client for the default cache 
        DataCache myCache = mycacheFactory.GetDefaultCache(); //or change to mycacheFactory.GetCache(myNamedCache);
    
        //inserty dummytest data
        myCache.Put("key1", "myobject1");
        myCache.Put("key2", "myobject2");
        myCache.Put("key3", "myobject3");
        Random random = new Random();
    
        //list all items in the cache : important part
        foreach (string region in myCache.GetSystemRegions())
        {
            foreach (var kvp in myCache.GetObjectsInRegion(region))
            {
                Console.WriteLine("data item ('{0}','{1}') in region {2} of cache {3}", kvp.Key, kvp.Value.ToString(), region, "default");
            }
        }
    

    【讨论】:

    • 感谢您的回答,但还有一个问题,GetSystemRegions 方法用于确定缓存的默认区域,但其他非默认区域呢?
    • 就是这样:您无法获得特定的区域名称。这只能通过主机上的 Powershell CmdLets 实现(因为区域仅限于单个缓存主机)。您也可以尝试使用包装器自己维护所有区域名称的列表。
    • 仅适用于 Powershell Cmdlet Get-CacheRegion。注意:您可以使用 C# 调用它
    • 当密钥已知(可以是输入)时,有什么方法可以获取对象,我知道 DataCache.Get(key) 方法,但是密钥是按区域划分的,所以它可能返回错误的数据。我正在考虑将 Get-CacheRegion cmdlet 中的区域名称存储到数据库中,然后从我的 C# 代码中读取数据库(虽然我也不知道该怎么做->看看你是否也可以在这里提供帮助,将保存一个很多时间)。之后我可以运行一个循环并检查每个区域的密钥。如果您有任何其他想法,请分享并记住这次我也知道关键,但问题是我不知道 regoin。
    • 另一种完全不同的方式是实现写后提供程序。缓存中的项目可以使用后写提供程序定期写入后端存储。这在缓存定义的时间间隔内异步发生。您可以使用它来转储密钥和区域。见msdn.microsoft.com/en-us/library/hh377669.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多