让 Laravel 5 数据模型支持 remember () 方法 
                                                    
                        
                    
                    
  
                    
                    在使用前后端分离的时候,通常都会遇到这么一个问题,比方说首页进入的时候会调用 N 个接口,这 N 个接口都会去查询数据库中的用户表数据,会导致查询了 N 次。
查阅资料后发现大致有以下方法实现:
- MySQL 的 Query Cache
- Eloquent 里面使用 Cache
这边主要使用了第二种方案,因为有现成的 packagist。
安装
使用 Composer 进行安装。
composer require watson/rememberable使用
在 User.php 引入 use Rememberable
<?php
namespace App;
class User extends Model
{
    use Rememberable;
}在业务逻辑里面使用
# 缓存1分钟用户信息。
$users = User::remember(now()->addSeconds(60))->first();那如何解决 N 个接口,查询 N 次问题?
User.php
namespace App;
class User extends Model
{
    use Rememberable;
    protected $rememberFor = 10; // 默认缓存10分钟,慎用!!!
}主要代码实现:Rememberable.php
<?php
namespace Watson\Rememberable;
use Watson\Rememberable\Query\Builder;
trait Rememberable
{
    /**
     * Get a new query builder instance for the connection.
     *
     * @return \Illuminate\Database\Query\Builder
     */
    protected function newBaseQueryBuilder()
    {
        $conn = $this->getConnection();
        $grammar = $conn->getQueryGrammar();
        $builder = new Builder($conn, $grammar, $conn->getPostProcessor());
        # 默认存储时间
        if (isset($this->rememberFor)) {
            $builder->remember($this->rememberFor);
        }
        # 默认缓存标签
        if (isset($this->rememberCacheTag)) {
            $builder->cacheTags($this->rememberCacheTag);
        }
        # 默认缓存前缀
        if (isset($this->rememberCachePrefix)) {
            $builder->prefix($this->rememberCachePrefix);
        }
        # 默认缓存驱动
        if (isset($this->rememberCacheDriver)) {
            $builder->cacheDriver($this->rememberCacheDriver);
        }
        return $builder;
    }
}参考文章
站内地址:https://learnku.com/laravel/projects/watso...
GitHub地址:https://github.com/dwightwatson/rememberab...
本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           宇宙最厉害 的个人博客
 宇宙最厉害 的个人博客
         
             
                     
                     
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: