有一段时间没上blog了,讲讲最近学到的,觉得有点用的知识,我们一般网站构建的过程中,访问压力最大的是什么?是首页,首页的更新频率有多快,如果是实时更新,不在我要说的范围之内,如果不是,那么我们可以考虑一下,使用页面初始化数据缓存。
1. 什么是初始化数据
页面刚进来的时候第一眼所看到的没有上拉刷新或下拉加载动作之前的数据。
2. 如何缓存
我们可以根据模块 控制器 方法名 业务名称等一系列的组成相关的key
存入拿到的数据,存储的方式大概可以使用如下几种:(伪代码 并不完整 主要说明思想)
(1) mysql 存储
$data = array('一系列的数据组成的数组'); //data为某个数据接口初始化时的返回结果
$content = bin2hex(gzcompress($data));
$module_name = 'goods_index_list';
$result=mysql_query( "insert into initdata (module_name,content) value ('$module_name','$data')");//压缩内容插入到数据表中
//查询
$query = "select content from initdata where module_name=$module_name";
$result = mysql_query($query);
$resdata = @gzuncompress($result["content"]);
(2) redis 存储
$data = array('一系列的数据组成的数组'); //data为某个数据接口初始化时的返回结果
$module_name = 'goods_index_list';
$redis->hset($module_name,json_encode($data));
$resdata = json_decode($redis->hget($module_name),true);
(3) mongo 存储
$data = array('一系列的数据组成的数组'); //data为某个数据接口初始化时的返回结果
$module_name = 'goods_index_list';
$mongo->data = array($module_name=>$data);
$mongo->insertData('initdata');
$resdata = $mongo->selectCollection('initdata')->find(array('module_name'=>$module_name));
3. 小结
其实,首页是数据访问最频繁的页面,做数据初始化缓存很有必要,这样不需要实时查询数据库,可以减轻数据库很大一部分压力,当然,数据更新相当频繁的不建议这么做了。
最后要注意:数据源更改,及时刷新缓存。多个数据源更新,我们可以做相关的定时脚步实现,避免复杂的缓存更新。