您的位置:首页 > 移动开发

微软分布式缓存AppFabric(Velocity)学习-缓存概念(二)

2011-08-15 00:18 706 查看
接上一篇 学习中,顺便翻译,有不正确的地方欢迎指正,转载请注明出处http://cnblogs.com/xuf22

二、缓存概念

2. 缓存客户端与本地缓存

使用Velocity缓存,应用程序中需要用到DataCache对象存储缓存对象。这个对象就是缓存客户端,它为应用程序提供了一个缓存群集服务的name cache的引用。该对象由DataCacheFacory对象的GetCache方法创建。

出于性能考虑,建议在应用程序中尽量少创建DataCacheFactory对象,在应用程序中创建一个全局变量,以便缓存客户端可以在任何地方都给使用--用单件模式吧

缓存客户端分为两种:路由客户端和普通客户端。两种缓存客户端都可以将缓存存储在本地,这种被存储在本地的缓存称为:本地缓存。缓存客户端的存储选项可以通过应用程序配置文件指定。

2.1 安全考虑

缓存客户端应该用在运行数据中心的服务器上的应用程序中,在企业防火墙内。缓存服务和缓存主机之前的通信是不加密的,很容易受到“嗅探”和“Replay”攻击。

强烈建议使用加密的XML配置文件来指定缓存客户端。

2.2 客户端类型

下图中有两个使用了缓存的应用程序:路由(routing)和普通的(simple)

T0:取出对象//cacheClientA pulls the FM radio inventory from cache
DataCacheFactory clientACacheFactory = new DataCacheFactory();
DataCache cacheClientA = clientACacheFactory.GetCache("catalog");
DataCacheItem radioInventoryA =
cacheClientA.GetCacheItem("RadioInventory","electronics");

//cacheClientB pulls the same FM radio inventory from cache
DataCacheFactory clientBCacheFactory = new DataCacheFactory();
DataCache cacheClientB = clientBCacheFactory.GetCache("catalog");
DataCacheItem radioInventoryB=
cacheClientA.GetCacheItem("RadioInventory", "electronics");[/code]

Time One(T1):
cacheClientA
更新对象成功


cacheClientA将对象
RadioInventory更新,
RadioInventory的版本号添加,这时cacheClientB中的RadioInventory对象已过期。






[code]//at time T1, cacheClientA updates the FM radio inventory
int newRadioInventoryA = 155;

cacheClientA.Put("RadioInventory", newRadioInventoryA,
radioInventoryA.Version,"electronics");


Time Two: The Second Update Fails

cacheClientB尝试修改
RadioInventory为一个新值,为了阻止将cacheClientA的更新覆盖,cacheClientB的更新将会失败。






[code]//later, at time T2, cacheClientB tries to
//update the FM radio inventory, triggers exception ERRCA001
int newRadioInventoryB = 130;

cacheClientB.Put("RadioInventory", newRadioInventoryB,
radioInventoryB.Version,"electronics");


保守式并发

当客户端取出对象时明确指出该对象已被取出,正在更新,所有对缓存对象的请求都被驳回,直到销被释放。当缓存对象被锁定时,读取操作会返回一个句柄。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: