对于缓存的理解和分析。

          对于大流量网站数据处理,我们首先想到的是用缓存。缓存能减少服务器的压力,主要表现在数据处理上,访问缓存的时候,数据是不需要通过数据库查询的,这能大大减少

了服务器请求数据库的压力,当用户量大的时候体现 就非常明显

   
       缓存按更新方式分为两种:1. 定期更新缓存 2. 按需更新缓存

       定期缓存:根据用户访问判断当前数据的缓存文件是否有5分钟了(时间自己设定)。满足了时间就自动更新缓存, 否则不更新

       按需更新:当需要更改缓存的时候就更改缓存文件。

       缓存的表现形式有多种:

       1. 以txt,.php类型的文件存储缓存数据。

       2.缓存服务器来存储数据 比如memcached

       3. 非关系型数据库来存储缓存,比如mangoDb

              ...................

            其实大流量的网站我接触的不是太多,刚开始处理的时候都是不管三七二十一的直接select * from 表名,然后

根据sql语句出来的数组写在缓存里。后来渐渐的发现了弊端。当数据量大的时候就显得特别的笨拙,我用来做缓存的

时候文章发布系统的栏目,把栏目的相关数据放在缓存里做处理,因为栏目操作太频繁了,目前的栏目数差不多也有

三千多个。每次循环3000条记录压力还是很轻松的,可一想到每次更改栏目一丁点的信息就得select * 一次心里就不

爽,后来我又想让每个分类都单独存成一个缓存,但这样管理成为一件很困难的事情,所以需要重构缓存的结构便于

以后的扩展。

           重构方法:

           select * from 表名。

           将结果存在一个数组中,并要求这个数组的键是栏目的id。

           当栏目操作为增加的时候。获取它的自增id,通过数组的array_push函数加进缓存数组中, 并且写入。

           当栏目操作为删除的时候。从缓存中取出数组并且删除删除的那项栏目。并且写入。

           当栏目编辑的时候,只更改当前栏目的信息,并且写入

public function getCache() {
    $model = new model();
    $sql = "select * from arctype";
    $list = $model->findAll($sql);
    $arr = array();
    foreach($list as $item) {
       $arr[$item['id']] = $item;
    }
    return $arr;
}

               这样在绝大部分情况下,不做sql操作,只有在缓存文件不存在的时候,才会做sql操作。

         那些定义死的,用的时候却是灵活的。有时候可以两种类型的缓存一起使用。再比如说:我发了一篇文章,这

个时候这个篇所属的分类的文章数字段就得加1,文章的栏目页面假如是静态页面的话,栏目页面就需要更新。如果

每发一篇文章就更新一下,当前栏目的首页和列表页面,那么这个系统以后会涉及随着数据增加越来越难用,越用越

慢。如何避免这个问题呢,我想法是这样的。每发一篇文章相应需要更新的栏目的id存储到某一个数据表中,每5分钟

生成一次栏目,生成的栏目只有有过更新的栏目。发一篇文章更新一回,跟发5分钟文章更新一回,对系统来说不是

一个概念的,这样能省时间减少服务器的压力。如果5分钟后发现统计的数据表中没有记录,就不更新任何栏目。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值