zoukankan      html  css  js  c++  java
  • laravel缓存事件(比如监听缓存失效)

    laravel缓存事件(比如监听缓存失效)

    一、总结

    一句话总结:

    缓存是有缓存事件的,比如cache.hit、cache.missed、cache.write、cache.delete
    要在每次缓存操作时执行相应程序,你可以监听缓存触发的事件,通常,你可以将这些缓存处理器代码放到EventServiceProvider的boot方法中:
     
    /**
     * 注册应用任意其他事件
     *
     * @param  IlluminateContractsEventsDispatcher  $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  IlluminateContractsEventsDispatcher  $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

    一.默认缓存的配置
    缓存配置位于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  IlluminateContractsEventsDispatcher  $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) {
            //
        });
    }
      
    

      

     
  • 相关阅读:
    criteria用法
    Python Web开发学习-Django(13)多对多关系
    Python Web开发学习-Django(12)多对一关系
    Python Web开发学习-Django(10)查询集操作
    Python Web开发学习-Django(9)数据的增删改查
    Python Web开发学习-Django(11)导入数据到数据库
    Python Web开发学习-Django(8)数据的添加、获取和筛选
    Python Web开发学习-Django(7)数据库连接
    Python Web开发学习-Django(6)数据库迁移
    Python Web开发学习-Django(5)获取URL的中的数据
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12624220.html
Copyright © 2011-2022 走看看