laravel学习笔记--缓存系统
缓存系统
配置
Laravel 为各种后端缓存提供了丰富而统一的 API,其缓存配置位于 config/cache.php 文件中。
缓存所存储的目录在storage\framework\cache\data
Laravel 配置为使用 file 缓存驱动,它将序列化的缓存对象存储在文件系统中
获取缓存实例
Illuminate\Contracts\Cache\Factory 和
Illuminate\Contracts\Cache\Repository 提供了 Laravel 缓存服务的访问机制
不过还有门面模式facade提供的,一般使用门面模式提供的
使用缓存–从缓存中获取数据
$key= Cache::get('key');//获取缓存值
$value = Cache::get('name', '默认的值');
//获取缓存值,如果没有这个缓存值,提供一个默认值
dd($value);
甚至可以传递一个 Closure 作为默认值。如果指定的数据在缓存中不存在,将返回 Closure 的结果。传递闭包的方法允许你从数据库或其他外部服务中获取默认值
$value = Cache::get('key', function () {
return DB::table(...)->get();
});
检查缓存项是否存在
has 方法可以用于判断缓存项是否存在。如果值为 null,则该方法将会返回 false
if (Cache::has('name'))
dd('存在');
递增与递减值
increment 和 decrement
方法可以用来调整缓存中整数项的值。这两个方法都可以传入第二个可选参数,这个参数用来指明要递增或递减的数量
递增
$value = Cache::increment('count');
dd($value);
递减
$value = Cache::decrement('count');
dd($value);
获取缓存,如果缓存不存在,就使用闭包返回的数据–不会缓存
$value = Cache::get('users', function () {
return 'hello';
});
dd($value);
//如果想要在缓存中获取这个缓存,会获取不到
获取和存储
获取缓存,如果缓存不存在,就使用闭包返回的数据 同时缓存指定时间的数据,时间单位是秒–会缓存
第一个参数是 获取缓存键,第二个参数是缓存有限时间,第三个参数是如果不存在这个缓存,就使用它里面闭包的数据
$value = Cache::remember('users', 30, function () {
return 'remember';
});
dd($value);
//如果想要在缓存中去获取这个缓存,是可以获取到的,不过超过时间就会过期
使用 rememberForever 方法从缓存中获取数据或者永久存储它
$value = Cache::rememberForever('users', function () {
return DB::table('users')->get();
});
删除缓存
Cache::pull('users');
$value2 = Cache::get('users');
在缓存中存储数据
使用 Cache Facade 的 put 方法将数据存储到缓存中
如果没有给第三个参数传递时间,就会永久存储
Cache::put('key', 'value', 30);
//第一个参数是缓存键,第二个参数是缓存值,第三个参数是缓存时间
只存储没有的数据
add 方法将只存储缓存中不存在的数据。如果存储成功,将返回 true ,否则返回 false
就是说,缓存中如果没有这个数据。它就会执行存储,如果有这个数据,就不会存储了
Cache::add('key', 'value', $seconds);
数据永久存储
forever 方法可用于持久化将数据存储到缓存中。因为这些数据不会过期,所以必须通过 forget 方法从缓存中手动删除它们
Cache::forever('key', 'value');
从缓存中删除数据
可以使用 forget 方法从缓存中删除这些数据:
Cache::forget('key');
也可以通过提供零或者负的 TTL 值来删除这些数据
Cache::put('key', 'value', 0);
Cache::put('key', 'value', -5);
清空所有的缓存
Cache::flush();
一个缓存小实例
例如,要获取博客的分类,
如果缓存存在,就不进行缓存,如果不存在,就进行缓存,这样可以适当为服务器减少压力
if (!function_exists('categories')) {
function categories()
{
//使用缓存处理获取分类请求--永久缓存
$categories = cache()->rememberForever('categories', function () {
//查询数据库
$categories = \Illuminate\Support\Facades\DB::table('categories')
->pluck('name', 'id');//以id为键,name为值
return $categories;
});
return $categories;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下