配置项做缓存提高系统性能

第一步,注册个观察者,监听数据变化

1.创建观察者:在Command LineTools Consol中创建观察者类,会自动生成在app/Observers下,Observer这个目录第一次创建观察者类时会被自动创建,在创建观察者时也可以指定它的模型类:–model;

php artisan make:observer --model=config ConfigObserver

但在这里我们不需要制定模型了,我们需要自定义观察者中的方法:

php artisan make:observer ConfigObserver

2。注册观察者:
注册观察者有两种方式:
第一种:我们在app/providers/AppServiceProvider.php里的boot方法中注册:

 public function boot()
    {
    //注册观察者
       Config::observe(ConfigObserver::class);
    }

第二种:我们在config模型中自定义一个boot模型来注册观察者:

    namespace App\Model;
    public static function boot(){
       Config::observe(ConfigObserver::class);
    }

第二步,做数据缓存

在刚才创建的观察者类里,定义事件,在Eloquent: 入门中的事件中

namespace App\Observers;
class ConfigObserver
{
//ConfigObserver这个模型只要一监听到config这个模型中的updateOrCreate这个命令一运行之后就会触发created和saved 这两个方法,实现数据缓存,updateOrCreate的调用见下个代码块
    public function created ( Config $config )
    {
        $this->cache ();
    }

    public function saved ( Config $config )
    {
        $this->cache ();
    }
    public function cache ()
    {
    //数据缓存,在缓存系统里可以找到,这里由于配置项的修改一般很少,所以做永久缓存,可以全局调用
    //pluck 这个是 系统自带方法,表示查找数据库中键名叫name这个字段中键值是data的值,且只取一条数据,是一维数组
        \Cache::forever ( 'hd_config' , Config::pluck ( 'data' , 'name' ) );
    }
}

updateOrCreate的调用见下个代码块

public function update($name,Request $request){
            //config这个模型执行数据操作时,会触发监听里的运行created和saved 
         Config::updateOrCreate(
            ['name'=>$name],//查找条件
            ['name'=>$name,'data'=>$request->all ()]//添加更新的数据
        );。。。。。

第三步:定义一个函数来读取缓存,此方法定义在helper.php中,这样就可以用这个函数来读配置项的值,且全局可用

//$var实参,传入配置项的名称和数据中的某个字段,如:site.title表示配置项是site,,name叫title
function hd_config ( $var )
{
//定义静态变量,做缓存,
    static $cache = [];
    //拆分字段,得到site和title,
    $info = explode ( '.' , $var );
    //如果$cache中有值则跳过给$cache赋值直接读取$cache,否则要做赋值
    if ( ! $cache ) {
        //从缓存中读取数据,如果读取不到hd_config,那么将执行function回调
        $cache = Cache::get ( 'hd_config' );
    }
    //把配置项所对名name的值返回出来,这中??的写法就同isset判断是否存在,不存在给个默认值
    return $cache[ $info[ 0 ] ][ $info[ 1 ] ]??'';
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值