快捷搜索:

无缝的缓存读取:双存储缓存策略

近来在做一个WEB的数据统计的优化,然则因为数据量大年夜,履行一次SQL统计要 对照长的光阴(一样平常700ms算是正常)。

正常的做法只要加个缓存就好了。

然则同时营业要求此数据最多1分钟就要更新,而且这一分种内数据可能会有 较多变更(而且原系统不太易扩展)。

也便是说缓存1分钟就要掉效从新统计,而且用户造访这页还很是频繁,假如 应用一样平常缓存那么用户体验很差而且很轻易造成超时。

看到以上需求,第一个进入我大年夜脑的便是早年做游戏时打仗到的DDraw的双缓 冲显示要领。

在第一帧显示的同时,正在谋略第二帧,这样读取和谋略就可以分开了,也就 避免了读取时谋略,前进了用户体验。

我想当然我们也可以将这种要领用于缓存的策略中,但这样用空间换取光阴的 要领照样得权衡的,由于并不是所无意偶尔候都值得这么做,但这里我感觉这样做应 该是最好的要领了。

注:为了可以好好演示,本篇中的缓存都以IEnumerable的形式来存储,当然 这个文中道理也可以利用在WebCache中。

这里我应用以下数据布局做为存储单元:

namespace CHCache {

///

/// 缓存介质

///

public class Medium {

///

/// 主要存储介质

///

public object Primary { get; set; }

///

/// 次要存储介质

///

public object Secondary { get; set; }

///

/// 是否正在应用主要存储

///

public bool IsPrimary { get; set; }

///

/// 是否正在更新

///

public bool IsUpdating { get; set; }

///

/// 是否更新完成

///

public bool IsUpdated { get; set; }

}

}

有了这个数据布局我们就可以将数据实现两份存储。再使用一些读写策略就可 以实现上面我们讲的缓存要领。

共5页:

上一页1

2

3

4

5

下一页

您可能还会对下面的文章感兴趣: