2015年9月

对于读多写少的少量数据的缓存优化

前提:数据量比较少,并且读多写少,实时性要求不高的数据。

优点

  1. 访问本地cache节省了网络开销,减少中心cache集群(redis)的压力

  2. 正常的web机器内存利用率较低,减少web机内存资源的浪费

类库的选择

google guava cache

  1. LRU失效机制

  2. 流畅的api接口

  3. 使用内存缓存

  4. 配套stats接口

流程

未命名文件.png

  1. [被动失效] controller层访问cache,若获取不到数据,从db中获取数据,并刷到cache

  2. [主动失效] 当db数据变更时,主动失效缓存;注意:这里cache是在每台web机器都有一份,所以每台机器都需要刷一遍;所以我们需要一个配置中心;在web机器监听配置中心的变化,然后刷新各自机器的cache

  3. 定时将本机的cache的 命中率,量 上报到监控系统

主动失效机制

  1. 实时性要求较高的可以订阅mysql的binlog

  2. 实时性要求不高的可以定时跑crontab

casperjs兼容reactjs截图

由于phantomjs使用的webkit内核版本较低,不支持es5;自然phantomjs无法正常打开reactjs的页面;这里可以使用es5-shim.js 来兼容。

casperjs是可以使用clientScripts将 es5-shim.js 插入页面中;但是这个插入是在页面的加载完之后;我们需要的是在页面的最前面插入 es5-shim.js;于是:

casper.options.onPageInitialized = function() {
    casper.page.injectJs("es5-shim.js");
};