Laravel进阶系列笔记--(十五)Laravel 基于Redis缓存使用的案例
作者:温新
时间:2021-07-11
hi,我是温新,一名PHPer。
本篇文章基于Redis进行缓存。
我这里使用的是Laravel基础系列笔记时的数据库,下面是数据表结构。
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">CREATE</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">TABLE</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`users`</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`id`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">bigint</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">20</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">unsigned</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">NOT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">AUTO_INCREMENT</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`name`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">varchar</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">191</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">COLLATE</span> utf8mb4_unicode_ci <span style="box-sizing: border-box;color: rgb(119, 0, 136)">NOT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`email`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">varchar</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">191</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">COLLATE</span> utf8mb4_unicode_ci <span style="box-sizing: border-box;color: rgb(119, 0, 136)">NOT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`password`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">varchar</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">191</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">COLLATE</span> utf8mb4_unicode_ci <span style="box-sizing: border-box;color: rgb(119, 0, 136)">NOT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`created_at`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">timestamp</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">DEFAULT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`updated_at`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">timestamp</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">DEFAULT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`nickname`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">varchar</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">80</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">CHARACTER</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">SET</span> utf8mb4 <span style="box-sizing: border-box;color: rgb(119, 0, 136)">COLLATE</span> utf8mb4_unicode_ci <span style="box-sizing: border-box;color: rgb(119, 0, 136)">DEFAULT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`country_id`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">int</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">10</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">unsigned</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">DEFAULT</span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'0'</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`lover_id`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">int</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">10</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">unsigned</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">NOT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">COMMENT</span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'关联爱人ID'</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">PRIMARY</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">KEY</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">`id`</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">UNIQUE</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">KEY</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`users_email_unique`</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">`email`</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">KEY</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`users_country_id_index`</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">`country_id`</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span><span style="box-sizing: border-box">;</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">CREATE</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">TABLE</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`posts`</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`id`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">int</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">10</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">unsigned</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">NOT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">AUTO_INCREMENT</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`title`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">varchar</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">100</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">COLLATE</span> utf8mb4_unicode_ci <span style="box-sizing: border-box;color: rgb(119, 0, 136)">NOT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">COMMENT</span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'标题'</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`user_id`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">int</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">10</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">unsigned</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">DEFAULT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">COMMENT</span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'用户ID'</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`content`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">text</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">COLLATE</span> utf8mb4_unicode_ci <span style="box-sizing: border-box;color: rgb(119, 0, 136)">NOT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">COMMENT</span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'内容'</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`created_at`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">timestamp</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">DEFAULT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`updated_at`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">timestamp</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">DEFAULT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">`deleted_at`</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">timestamp</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">DEFAULT</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">NULL</span><span style="box-sizing: border-box">,</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">PRIMARY</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">KEY</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">`id`</span><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span><span style="box-sizing: border-box">;</span></span>
本案例使用win10系统演示。
对分页文章列表进行缓存
第一步:修改驱动为redis
文件:.env
CACHE_DRIVER=redis
第二步:定义路由并获取数据
文件:routes/web.php
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">Route</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">get</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'posts'</span>, <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span>(){</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$posts</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\Illuminate\Support\Facades\DB</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">table</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'posts'</span>)<span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">paginate</span>(<span style="box-sizing: border-box;color: rgb(17, 102, 68)">10</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">view</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'posts'</span>, <span style="box-sizing: border-box;color: rgb(51, 0, 170)">compact</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'posts'</span>));</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">});</span>
第三步:创建视图
文件:resources/views/posts.blade.php
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)"><</span><span style="box-sizing: border-box;color: rgb(51, 0, 170)">link</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">href</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(170, 17, 17)">"https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.css"</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">rel</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(170, 17, 17)">"stylesheet"</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)"><</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">ul</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">@foreach</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$posts</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">as</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$post</span>)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 26, 26)"><</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">li</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span>{{ <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$post</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">title</span> }}<span style="box-sizing: border-box;color: rgb(152, 26, 26)"></</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">li</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">@endforeach</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)"></</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">ul</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">{{ <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$posts</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">links</span>() }}</span>
第四步:使用缓存
对路由方法进行改造
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">Route</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">get</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'posts'</span>, <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span>(){</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$page</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">request</span>()<span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">page</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">??</span> <span style="box-sizing: border-box;color: rgb(17, 102, 68)">1</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$key</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'posts_paginate_'</span> . <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$page</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 缓存</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$posts</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\Illuminate\Support\Facades\Cache</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">rememberForever</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$key</span> , <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span>(){</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\Illuminate\Support\Facades\DB</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">table</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'posts'</span>)<span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">paginate</span>(<span style="box-sizing: border-box;color: rgb(17, 102, 68)">10</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> });</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">view</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'posts'</span>, <span style="box-sizing: border-box;color: rgb(51, 0, 170)">compact</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'posts'</span>));</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">});</span>
对文章浏览量进行缓存
手动对posts
表新views
字段。
alter table posts add views int not null default 0 comment '浏览量'
第一步:改造文章列表界面
文件:posts.blade.php
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)"><</span><span style="box-sizing: border-box;color: rgb(51, 0, 170)">link</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">href</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(170, 17, 17)">"https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.css"</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">rel</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(170, 17, 17)">"stylesheet"</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)"><</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">ul</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">@foreach</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$posts</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">as</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$post</span>)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 26, 26)"><</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">li</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">><</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">a</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">href</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(170, 17, 17)">"{{ url('detail',['id'=></span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$post</span>-><span style="box-sizing: border-box;color: rgb(0, 0, 0)">id</span><span style="box-sizing: border-box;color: rgb(170, 17, 17)">]) }}"</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span>{{ <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$post</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">title</span> }}<span style="box-sizing: border-box;color: rgb(152, 26, 26)"></</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">a</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">li</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">@endforeach</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)"></</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">ul</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">{{ <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$posts</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">links</span>() }}</span>
第二步:添加文章详情路由
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// web.php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">Route</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">get</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'detail/{id}'</span>, <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$id</span>){</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$detail</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">\Illuminate\Support\Facades\DB</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">table</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'posts'</span>)<span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">find</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$id</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">view</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'post_detail'</span>, <span style="box-sizing: border-box;color: rgb(51, 0, 170)">compact</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'detail'</span>));</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">});</span>
第三步:添加文章详情视图
文件:resources/post_detail.blade.php
文章浏览量: {{ $detail->views }}
第四步:创建Post模型并设置方法
php artisan make:model Post
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// app/Models/Post.php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Illuminate\Support\Facades\Cache</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 通过获取器设置缓存</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">public</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">getViewsNumberAttribute</span>()</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$key</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'post_views_'</span> . <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$this</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">id</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 设置缓存</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Cache</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">rememberForever</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$key</span>, <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span>(){</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$this</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">views</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> });</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 缓存中的浏览量加1</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Cache</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">increment</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$key</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>
第五步:修改视图文件
文件:post_detail.blade.php
文章浏览量: {{ $detail->views_number }}
使用缓存完成,剩下的就是如何将浏览量同步到数据库。这里根据自己的需求来确定。
我是温新
每天进步一点点,就一点点
请登录后再评论