2013-12-23 53 views
1

我有一个sql服务器中的表,我将从.net MVC代码多次查询,我想实现appfabric缓存,而不是sql server查询(仅限于此查询)。我如何实现这一点? 如果查询是 - 从id = @cid的人中选择地址;appfabric缓存,而不是查询sql服务器

CID可以是1,2或3,来自码

+0

[此博客文章](http://www.hanselman.com/blog/InstallingConfiguringAndUsingWindowsServerAppFabricAndTheVelocityMemoryCacheIn10Minutes.aspx)应涵盖大部分需要的内容。 –

回答

3

你真的需要的AppFabric对于这种情况?

我的意思是说,AppFabric Caching的目标是大容量的网站,其中数据库是瓶颈,本地缓存不再是一个好的选择。是的,它是高速缓存,但适用于大数据和分布式场景。另外,您必须为缓存层安装其他专用服务器。

也许一个基本的MemoryCache足以启动:本地缓存,无需安装,不需要额外的服务器和内置支持.net bcl。

这是一个基本的例子:

//Create a cache instance 
ObjectCache cache = MemoryCache.Default;  

//check the cache for a specific value 
if (cache.Contains("mydata"))  
{   
    //get an item from the cache 
    var value=cache.Get("mydata");  
}  
else  
{  
    //load data 
    var data=fetchData(); 
    //add an data to the cache 
    cache.Add("mydata", data);  
} 

缓存一小块数据和一个(或几个)Web服务器,这是相当足够的。

+0

只要您不需要远程使缓存失效 - 并且您的目标.Net> = 4 - [MemoryCache](http://msdn.microsoft.com/zh-cn/library/system.runtime .caching.memorycache(v = vs.110).aspx)确实非常有用。我们有一个使用AppFabric集群的系统,如果集群关闭,则回落到MemoryCache:我们必须接受,我们不能在MemoryCache缓存的生命周期内使缓存的数据无效,但在我们的场景中这是可以接受的,我们在MemoryCache中使用简短的缓存过期来缓解该问题。 – stuartd

+0

我只是在学习基础知识,我们的应用程序确实有大量的。所以我们需要一点一点地开始appfabric。 – Nithin

+0

@Nithin正如我所说,在跳入AppFabric之前,尝试使用MemoryCache是​​没有代价的。有了一点抽象概念,为MemoryCache和AppFabric实现一个通用缓存客户端并且在您最喜爱的IoC实现之间切换并不困难。高音量不是一个真正的问题。什么是重要的:你有多少个Web服务器?数据库活动是什么? – Cybermaxs

0

无论高速缓存使用,你会添加不同的缓存条目对于每个查询,使用基本密钥的结构和ID作为缓存键,然后从数据库缓存值返回:

public Address GetData(int cId) 
{ 
    const string AddressCacheKeyBase = "AddressCacheKey"; 
    string key = AddressCacheKeyBase + cId; 

    var cachedData = cache.Get(key); 

    if (cachedData != null) 
    { 
     return (Address)cachedData;  
    } 

    Address address = GetAddressFromDatabase(cID); 
    cache.Add(key, address); 

    return address; 
} 
+0

我们可以在缓存中拥有多个值的单个密钥吗?可能作为一个单一的对象? – Nithin

+0

@Nithin你当然可以,你可以使用'Dictionary ',并将Id作为键,将Address作为值。 但是,无论何时需要添加或取消值,都需要从缓存中读取字典,添加或更新地址,然后将字典存储回缓存。 – stuartd