Laravel进阶系列笔记--(十四)Laravel 缓存的基础使用方法
作者:温新
时间:2021-07-11
hi,我是温新,一名PHPer。
Laravel中缓存配置文件位于config/cache.php
,支持多种驱动,如Redis
、Memcached
、文件缓存
等。本篇文章记录缓存使用的基本方法。
在进行实例演示之前,先来熟悉下缓存基本方法的使用。
使用缓存之前确保安装安装了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');
});
其它方法
增加/减少
increment
和decrement
这两个方法只能用于调整缓存中的整数值。如一篇文章的阅读量。
// 一次增加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();
});
});
我是温新
每天进步一点点,就一点点
请登录后再评论