Laravel进阶系列笔记--(十四)Laravel 缓存的基础使用方法

作者: 温新

分类: 【Laravel】

阅读: 1878

时间: 2021-08-25 15:04:23

作者:温新

时间:2021-07-11

hi,我是温新,一名PHPer。

Laravel中缓存配置文件位于config/cache.php,支持多种驱动,如RedisMemcached文件缓存等。本篇文章记录缓存使用的基本方法。

在进行实例演示之前,先来熟悉下缓存基本方法的使用。

使用缓存之前确保安装安装了redis服务器与PHP redis扩展。

准备工作

1)修改.env文件将缓存驱动修改为redis

2)添加2个路由,分别用于设置和获取缓存数据

<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)">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)">'a'</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><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)">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)">'b'</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>

添加缓存

添加缓存数据

方法:put(key,name,seconds)

<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)">'a'</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(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)">\Illuminate\Support\Facades\Cache</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">put</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'name'</span>,<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'lisi'</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)">\Illuminate\Support\Facades\Cache</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">put</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'age'</span>,<span style="box-sizing: border-box;color: rgb(17, 102, 68)">18</span>,<span style="box-sizing: border-box;color: rgb(0, 0, 0)">now</span>()<span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">addMinutes</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>

缓存不存在时添加

方法:add(key,value,seconds)

<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)">'a'</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, 0, 0)">\Illuminate\Support\Facades\Cache</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">add</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'nickname'</span>,<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'李麻子'</span>,<span style="box-sizing: border-box;color: rgb(0, 0, 0)">now</span>()<span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">addMinutes</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>

获取缓存

获取缓存数据

方法:get(key)

<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)">'b'</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)">echo</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)">get</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'name'</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)">echo</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)">get</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'age'</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)">echo</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)">get</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'nickname'</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">});</span>

若缓存数据不存在可以从使用闭包的方法从其他地方获取数据,如当缓存不存在时从数据库获取数据。

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$value</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</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)">get</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'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)">DB</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">table</span>(<span style="box-sizing: border-box;color: rgb(0, 0, 0)">表名</span>)<span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">get</span>();</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">});</span>

检查缓存是否存在

方法:has(key)

<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)">'b'</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)">if</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)">has</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'nickname'</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(170, 17, 17)">'无缓存'</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>

删除缓存

删除指定key

方法:forget(key)

<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)">'b'</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, 0, 0)">\Illuminate\Support\Facades\Cache</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">forget</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'name'</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">});</span>

通过有效期删除

方法:put()设置有效期删除缓存

\Illuminate\Support\Facades\Cache::put('name','lisi',0);

清除所有缓存

方法:flush()

\Illuminate\Support\Facades\Cache::flush();

永久删除缓存

方法:forever(key,value)

Route::get('b', function(){
    \Illuminate\Support\Facades\Cache::forever('name','wagnwu');
});

其它方法

增加/减少

incrementdecrement这两个方法只能用于调整缓存中的整数值。如一篇文章的阅读量。

// 一次增加1
Cache::increment('key');
// 一次增加10
Cache::increment('key', 10);
// 一次减少1
Cache::decrement('key');
//一次减少10
Cache::decrement('key', 10);

获取和存储

当要获取缓存中的所有文章时,若是缓存中不存在,则到数据库中去获取。

方法:remember(key,secondes,callback)

Route::get('b', function(){
    $posts = \Illuminate\Support\Facades\Cache::remember('posts',10,function(){
        return \Illuminate\Support\Facades\DB::table('posts')->get();
    });
});

方法:rememberForever(key,callback)永久存储

Route::get('b', function(){
    $posts = \Illuminate\Support\Facades\Cache::rememberForever('posts',function(){
        return \Illuminate\Support\Facades\DB::table('posts')->get();
    });
});

我是温新

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

请登录后再评论