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

最近在做一个WEB的数据统计的优化,但是由于数据量大,执行一次SQL统计要 比较长的时间(一般700ms算是正常)。

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

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

也就是说缓存1分钟就要失效重新统计,而且用户访问这页还很是频繁,如果 使用一般缓存那么用户体验很差而且很容易造成超时。

看到以上需求,第一个进入我大脑的就是从前做游戏时接触到的DDraw的双缓 冲显示方式。

在第一帧显示的同时,正在计算第二帧,这样读取和计算就可以分开了,也就 避免了读取时计算,提高了用户体验。

我想当然我们也可以将这种方式用于缓存的策略中,但这样用空间换取时间的 方式还是得权衡的,因为并不是所有时候都值得这么做,但这里我觉得这样做应 该是最好的方式了。

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

这里我使用以下数据结构做为存储单元:

namespace CHCache {
  /// <summary>
  /// 缓存介质
  /// </summary>
  public class Medium {
    /// <summary>
    /// 主要存储介质
    /// </summary>
    public object Primary { get; set; }
    /// <summary>
    /// 次要存储介质
    /// </summary>
    public object Secondary { get; set; }
    /// <summary>
    /// 是否正在使用主要存储
    /// </summary>
    public bool IsPrimary { get; set; }
    /// <summary>
    /// 是否正在更新
    /// </summary>
    public bool IsUpdating { get; set; }
    /// <summary>
    /// 是否更新完成
    /// </summary>
    public bool IsUpdated { get; set; }
  }
}

有了这个数据结构我们就可以将数据实现两份存储。再利用一些读写策略就可 以实现上面我们讲的缓存方式。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索存储
, 数据
, 缓存
, 用户体验
, public
, 双缓存去闪
方式
,以便于您获取更多的相关知识。

时间: 2024-11-08 17:41:38

无缝的缓存读取:双存储缓存策略的相关文章

无缝缓存读取简化:仅Lambda表达式传递委托

之前写了一篇:无缝的缓存读取:双存储缓存策略,其中使用了两个存储地址交替提供缓存数据. 在其中用了两个存储指针转换以达到无缝读取缓存,在Cat Chen一语提醒之后,想了一想:的确是没 有必要在缓存中使用两个存储指针的,其实一个存储地址,只要保证写入时在其它线程就可以. 更改存储介质至以下两个属性: namespace CHCache { /// <summary> /// 缓存介质 /// </summary> public class Medium { /// <summ

面向费用优化的云存储缓存策略

面向费用优化的云存储缓存策略 唐兵 张黎 为提高云存储的访问速率并降低费用,提出了一种面向费用优化的云存储缓存策略.利用几乎免费的局域网环境下的多台桌面计算机,在本地建立一个分布式文件系统,并将其作为远端云存储的缓存.进行文件读取时,首先查找其是否在缓存中,若存在则直接从缓存读取;若不存在则从远端云存储读取.采用了最近最少使用(LRU)算法进行缓存替换,将冷门数据从缓存中替换掉.以亚马逊简单存储服务(S3)作为远端的云存储服务,对原型系统进行了简单的性能测试.测试结果表明,使用了所提出的缓存策略

一种多租户云数据存储缓存管理机制

一种多租户云数据存储缓存管理机制 史玉良 王捷 随着云计算的普及,软件即服务(software as a service,SaaS)逐渐成为云计算的一种重要表现形式.云中数据节点的缓存是提高多租户应用数据访问性能的一种重要资源,缓存资源的共享和分配受到SaaS提供商的关注.对SaaS提供商而言,如何在多租户间有效地分配数据节点上的缓存资源,从而满足租户的服务水平协议(service level agreement,SLA),获得更高的收益已成为一项挑战.为此,提出了多租户云数据存储缓存管理机制,

mscomm控件 接收数据-VS2010 MFC 的MSCOMM 控件 的Get_Input()函数读取不到缓存中的数据

问题描述 VS2010 MFC 的MSCOMM 控件 的Get_Input()函数读取不到缓存中的数据 各位高手好,小弟在使用VS2010 MFC 的MSCOMM 控件时出现了一个问题: 就是在OnComm函数里调用的Get_Input()函数读取不到缓存中的数据,经过验证,发现当接收区缓存数据不为0时程序能触发OnComm消息,可是当程序运行到Get_Input()函数时,OnComm()函数仿佛就直接从Get_Input()函数返回了,后面的代码也没有运行.同时,由于Get_Input()函

闲话缓存:ZFS 读缓存深入研究-ARC(一)

在Solaris ZFS 中实现的ARC(Adjustable Replacement Cache)读缓存淘汰算法真是很有意义的一块软件代码.它是基于IBM的Megiddo和Modha提出的ARC(Adaptive Replacement Cache)淘汰算法演化而来的.但是ZFS的开发者们对IBM 的ARC算法做了一些扩展,以更适用于ZFS的应用场景.ZFS ARC的最早实现展现在FAST 2003的会议上,并在杂志<;Login:>的一篇文章中被详细描述. 注:关于杂志<:Login

缓存应用--Memcached分布式缓存简介(二)

1 命令行查看状态   很多时候我们需要去查看Memcached 的使用状态,比如Memcached 的运行时间,使用状态等等.在Windows系统中我们可以使用telnet 命令来查看Memcached 的相关运行情况.   开始->运行àcmd 运行得到如下:   输入telnet命令: telnet 服务地址 端口    Memcached 的默认端口号是11211      输入stats 命令: 在这里屏幕是空白,看不到输入的内容,回车之后可以看到Memcached的运行相关信息. 

缓存应用--Memcached分布式缓存简介

 一.   什么是Memcached Memcached 是一个高性能的分布式内存 对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象 来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度. 相信很多人都用过缓存,在 .net 中也有内置的缓存机制,还有很多第三方工具如apache,nginx等可以做静态资源的缓存,同时我们也可 以制定自己的缓存机制,缓存数据库查询的数据以减少对数据库的频繁操作.但是很多时候我们总是感觉这些缓存总不尽人意, Memcached可

ASP缓存类【先锋缓存类】Ver2004

<% '------------------------------------------------------------------------------------- '转发时请保留此声明信息,这段声明不并会影响你的速度! '************************** [先锋缓存类]Ver2004 ******************************** '作者:孙立宇.apollosun.ezhonghua '官方网站:http://www.lkstar.com

SQLServer中的执行计划缓存由于长时间缓存对性能造成的干扰

原文:SQLServer中的执行计划缓存由于长时间缓存对性能造成的干扰   本文出处:http://www.cnblogs.com/wy123/p/7190785.html  (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他)   先抛出一个性能问题,前几天遇到一个生产环境性能极其低下的存储过程,开发人员根据具体的业务逻辑和返回的数据量,猜测到这个存储过程的执行应该不会有这么慢.当时意识到可能是执行计划缓存的问题,因为当