我一直在寻找为所有模型创建缓存包装的最佳方法。因此,所有数据库查找都是通过该模型完成的,但是该模型决定是否将结果存储在缓存中。
例如,当我通过电子邮件搜索用户时,我想做类似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;
}
cacheFetch
和cacheStore
被定义为特征。应用程序名称和表名称在高速缓存键之前,以避免键冲突。
如何在模型中查找数据库?
有没有更好的方法来实现我在这里要做的事情?
答案 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;
}