付费课程, 订阅后即可观看

代码之道 - 高效缓存

23 集视频
3小时11分钟

本期Laravel 视频教程我们正式改造网站的缓存机制,我们先将用户的缓存剥离出来进行单独的管理,单独管理之后,修改博客时,用户的缓存数据不会受到影响;修改用户数据时,也不会影响和清除博客和评论的缓存信息。

running8 2020.11.22 06:01

今天再看这个教程,我知道又可以再干点什么了。coding10教程,就是有生命力。

yang 2020.12.03 01:52

不还是单个 用户去查询,仍然不是where in 的形式?也就是说第一次查询的时候,还是有N+1的问题

不知道我理解的有没有问题

国营 2020.12.03 02:09

你还没有真正理解N+1是怎么一回事,继续好好想想吧,N+1 是多余重复查询了N次,这里的数据都只是查询了一次,以后网站所有页面再查询用户数据都时候也不会再走数据库,而且直接从缓存中获取数据。从网站整体上说,极大减少了数据库的查询次数。

yang 2020.12.03 02:19

我是指第一次查询,没有同步缓存的时候,查询用户的话 不是where in 的形式,而是 一个一个用户 where user_id = 1 ; where user_id = 2

我在想极端情况,第一次查询 也会很多 select user 的 sql ,我在想 第一次的时候采用where in 的形式,然后将数据拆分缓存,然后 后面的查询 手动去查 缓存

如果有 就 将 where in () 括号中的user_id 减去, 为空 则不执行 where in

还没把后面的看完,这只是我 粗略的 想法 ,还望批评指正

国营 2020.12.03 02:27

其实最有趣的事情就是“第一次”这个阶段,当前这套解决方案是针对网站全局做的方案,在我们访问当前页面之前,早已经有多个用户访问过之前的其他网页,在其他的网页,不管是什么类型的网页,只要有用户数据的,早已形成了缓存信息,所有当我们再访问的时候,基本上也不会一个一个再去查询用户的数据,用户发表评论的时候,或者其他操作的时候,他的用户信息其实也已经被缓存了。所以第一次的时候也不要用whereIn的方式,那本身就是再浪费过去的缓存结果。不要只想我们自己的操作,这是一个涉及到全体用户的事情。这个系列的课程我是挖了坑的,但是坑不在这里,我希望你是能找到那个坑的人。

yang 2020.12.03 02:32

这么说就没问题了,

业务来说: 博客站的话 一般来说都是 可以 不登录的, 其实数据预热 就可以解决这个问题

国营 2020.12.03 03:05

预热也可以,我喜欢比较温和的方案,不想在短时消耗系统大量计算资源。

yang 2020.12.03 12:35

enen,是的

邶城以北(叶兴勇) 2022.01.05 10:09

博主,讲一讲redis缓存的应用吧

国营 2022.01.05 10:31

这个系列就是redis啊,只不过多了一层封装,没让开发者直接看出来

mengge 2022.04.12 01:43

在视图里两次调用getUser方法,多调用了一次缓存,增加了IO

国营 2022.04.12 01:49

哈哈,不要走了极端,走了极端之后编程就变得痛苦了,取得一个适宜的平衡就好。

mengge 2022.04.12 01:54

哈哈,没想到你回复的这么快.我还有一个优化的思路,就是如果缓存支持一次获取多个值,比如redis,用mget来获取,然后把不存在的去数据库一次whereIn查出来,然后把存缓存的任务扔到队列去执行,抓紧把数据交回用户最关键.

国营 2022.04.12 02:00

各种方案都可以去尝试,然后评估各种方案更适用什么场景,但最好也不要优化到令人发指的地步,会增加太多维护和后期修改的成本。录不了视频,只能陪孩子上网课,所以恢复比较快。

微信扫码登录