Laravel进阶系列笔记--(十五)Laravel 基于Redis缓存使用的案例

作者: 温新

分类: 【Laravel】

阅读: 1624

时间: 2021-08-25 15:05:44

作者:温新

时间: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 }}

使用缓存完成,剩下的就是如何将浏览量同步到数据库。这里根据自己的需求来确定。

我是温新

每天进步一点点,就一点点

请登录后再评论