数据库模型的缓存包装器

时间:2018-12-17 10:00:27

标签: php laravel caching

我一直在寻找为所有模型创建缓存包装的最佳方法。因此,所有数据库查找都是通过该模型完成的,但是该模型决定是否将结果存储在缓存中。

例如,当我通过电子邮件搜索用户时,我想做类似User->getByEmail('test@exmaple.com');的事情

我的用户模型将包含一个看起来像

的函数
public static function getByEmail($email) {
    $cache = self::cacheFetch($email);
    if($cache) {
        return $cache;
    }
    // DB lookup to get data
    self::cacheStore($email, $data);
    return $data;
}

cacheFetchcacheStore被定义为特征。应用程序名称和表名称在高速缓存键之前,以避免键冲突。

如何在模型中查找数据库?

有没有更好的方法来实现我在这里要做的事情?

1 个答案:

答案 0 :(得分:0)

您实际上只需要一个功能cacheFetch。该功能将检查查询的数据是否在缓存中,如果不在缓存中,则从数据库中加载数据。

这是该函数如何工作的一个小例子:

protected function cacheFetch($email)
{
    $slug = 'db_' . self::getTable() . '_' . $email;

    // Try fetching data from cache
    if (cache()->has($slug)) {
        return cache($slug);
    }

    // Fetch data from database and put in cache
    $data = self::where('email', $email)->get();
    cache()->put($slug, $data, 60);

    return $data;
}