起因
一直都没找到二级缓存在php中应用的比较好的资料和案例,由于范凯RobbinWeb 应用的缓存设计模式和Hibernate二级缓存的启示,记下这篇二级缓存在Eloquent ORM中的应用。
过程
比如博客的首页调用最新的20篇文章,相信不少同学在刚开始使用缓存的时候,会写下如下代码:
![20c1df306be93b9ab34984f3368ccb70.png](https://img-blog.csdnimg.cn/img_convert/20c1df306be93b9ab34984f3368ccb70.png)
当然,模型中还能预加载每篇文章的分类,作者和tag信息,看起来没有任何问题,而且非常符合人类直觉。但是,放大到全站缓存来看,还是有很大的改善空间。
首先,首页缓存的是一个包含20个article对象的集合,集合的每一个单独的article对象除了在首页出现,还会在分类、作者和tag等列表页出现,还有文章详情页,而缓存的集合数据没办法在这些页面间共用,重复缓存大量相同的article对象是对内存资源的很大浪费,要是article中的text字段content没有单独拆分出去,内存浪费得就更严重了。
其次,不像详情页数据改动很少,首页作为列表页来说,更新频率很高,设置的缓存时间比较短,一般是分钟级别,缓存命中率并不高。
为了有效解决这两个问题,二级缓存就派上用场了,先说下自己对二级缓存的理解。
一级缓存可以看成是数据库里存的数据的一个镜像,只不过把数