laravel缓存事件(比如监听缓存失效)
laravel缓存事件(比如监听缓存失效)
打赏
一、总结
一句话总结:
缓存是有缓存事件的,比如cache.hit、cache.missed、cache.write、cache.delete
要在每次缓存操作时执行相应程序,你可以监听缓存触发的事件,通常,你可以将这些缓存处理器代码放到EventServiceProvider的boot方法中: /** * 注册应用任意其他事件 * * @param \Illuminate\Contracts\Events\Dispatcher $events * @return void */ public function boot(DispatcherContract $events){ parent::boot($events); $events->listen('cache.hit', function ($key, $value) { // }); $events->listen('cache.missed', function ($key) { // }); $events->listen('cache.write', function ($key, $value, $minutes) { // }); $events->listen('cache.delete', function ($key) { // }); }
1、解决后端更新(上传课程数据)之后前端没有及时更新缓存?
可以直接用Cache::flush()方法把全部的缓存给清掉
2、缓存事件?
缓存是有缓存事件的,比如cache.hit、cache.missed、cache.write、cache.delete
要在每次缓存操作时执行相应程序,你可以监听缓存触发的事件,通常,你可以将这些缓存处理器代码放到EventServiceProvider的boot方法中: /** * 注册应用任意其他事件 * * @param \Illuminate\Contracts\Events\Dispatcher $events * @return void */ public function boot(DispatcherContract $events){ parent::boot($events); $events->listen('cache.hit', function ($key, $value) { // }); $events->listen('cache.missed', function ($key) { // }); $events->listen('cache.write', function ($key, $value, $minutes) { // }); $events->listen('cache.delete', function ($key) { // }); }
二、Laravel之缓存
转自或参考:Laravel之缓存
https://www.cnblogs.com/itfenqing/p/6930450.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | 一.默认缓存的配置 缓存配置位于config/cache.php,你可以使用memcache,redis,数据库缓存,文件缓存等.默认是文件缓存 二.缓存获取 1.获取 $value = Cache:: get ( 'key' ); // 默认值 $value = Cache:: get ( 'key' , 'default' ); // 访问多个缓存存储 $value = Cache::store( 'file' )-> get ( 'foo' ); Cache::store( 'redis' )->put( 'bar' , 'baz' , 10); // 传递一个闭包,如果数据不存在 $user = Cache:: get ( 'user1' , function() { return User:: where ( 'id' , 1)-> select ( 'name' )->first()->name; }); 2.检查缓存是否存在 if (Cache::has( 'key' )) { // } 三.缓存写/更新 1.写/更新 a.put,无论缓存是否存在,均写入或者更新 Cache::put( 'key' , 'value' , $minutes); //第三个参数为缓存多少分钟 除了传递缓存项失效时间,你还可以传递一个代表缓存项有效时间的PHP Datetime 实例: $expiresAt = Carbon::now()->addMinutes(10); Cache::put( 'key' , 'value' , $expiresAt); b.add 方法只会在缓存项不存在的情况下添加缓存项到缓存,如果缓存项被添加到缓存返回 true ,否则,返回 false : Cache::add( 'key' , 'value' , $minutes); 2.forever 方法用于持久化存储缓存项到缓存,即没有过期时间,这些值必须通过forget 方法手动从缓存中移除: Cache::forever( 'key' , 'value' ); 3.增加减少缓存的值 Cache::increment( 'key' ); Cache::increment( 'key' , $amount); Cache::decrement( 'key' ); Cache::decrement( 'key' , $amount); 4.获取或更新 $value = Cache::remember( 'users' , $minutes, function() { return DB::table( 'users' )-> get (); }); 如果缓存项不存在,传递给remember 方法的闭包被执行并且将结果存放到缓存中。 你还可以联合remember 和forever 方法: $value = Cache::rememberForever( 'users' , function() { return DB::table( 'users' )-> get ();}); 5.获取缓存后删除 $value = Cache::pull( 'key' ); 四.删除 1.删除单个 Cache::forget( 'key' ); 2.清空全部 Cache::flush(); 五.缓存标签 缓存标签不支持file或database缓存驱动.memcache等内存缓存通常比较适合做缓存,因为它们有有过期时间,可以被自动过期删除. 1.存储 缓存标签允许你给相关的缓存项打上同一个标签,然后可以输出被分配同一个标签的所有缓存值。你可以通过传递一个有序的标签名数组来访问被打上标签的缓存。例如,让我们访问一个被打上标签的缓存并将其值放到缓存中: Cache::tags([ 'people' , 'artists' ])->put( 'John' , $john, $minutes); Cache::tags([ 'people' , 'authors' ])->put( 'Anne' , $anne, $minutes); 2.获取 $john = Cache::tags([ 'people' , 'artists' ])-> get ( 'John' ); $anne = Cache::tags([ 'people' , 'authors' ])-> get ( 'Anne' ); 3.移除 Cache::tags([ 'people' , 'authors' ])->flush(); //移除被打上people,authors标签的缓存,或者,Anne 和 John都会从缓存中移除: Cache::tags( 'authors' )->flush(); //移除被打上 authors标签的缓存,所以Anne会被移除,而John不会: 六.缓存事件 要在每次缓存操作时执行相应程序,你可以监听缓存触发的事件,通常,你可以将这些缓存处理器代码放到EventServiceProvider的boot方法中: /** * 注册应用任意其他事件 * * @param \Illuminate\Contracts\Events\Dispatcher $events * @return void */ public function boot(DispatcherContract $events){ parent::boot($events); $events->listen( 'cache.hit' , function ($key, $value) { // }); $events->listen( 'cache.missed' , function ($key) { // }); $events->listen( 'cache.write' , function ($key, $value, $minutes) { // }); $events->listen( 'cache.delete' , function ($key) { // }); } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步