Laravel - Redis在模型级别缓存

时间:2017-08-16 21:45:15

标签: laravel-5 redis

我使用 memcached 来自 CodeIgniter 。 基本上,CI中的模型调用非常不同:

$this->model_name->get_some_row_by_id($id); 这将返回一行。

所以缓存将通过拥有来完成 get_some_row_by_id首先查看缓存,如果没有命中,则使用callback从数据库中获取并存储它。

我喜欢这种在模型级别上缓存的方法,因为任何需要使用该模型的控制器都会自动使用缓存的调用。

我一直在阅读 Laravel 中的所有文档,从我所看到的情况来看,如果没有大量的黑客攻击,我无法在模型级别上执行此操作,使用{{1}在控制器内部进行缓存}。

我看到的最大问题是需要在每个控制器中定义缓存,然后跟踪正确的密钥,如果我想按Cache::remember缓存对象而不是页面组合。

如果有人有方法在Laravel中完成类似于我在 CodeIgniter 中所做的事情,我很想知道。

1 个答案:

答案 0 :(得分:0)

请阅读https://laravel.com/docs/5.4/cache

从缓存中检索项目部分说:

  

您甚至可以将Closure作为默认值传递。如果缓存中不存在指定的项,则将返回Closure的结果。传递Closure允许您推迟从数据库或其他外部服务中检索默认值:

 $value = Cache::get('key', function () {
    return DB::table(...)->get();
 });

&#34相同;缓存可以通过首先在缓存中查看get_some_row_by_id来完成,如果没有命中,则使用回调从数据库中获取并存储它" 。上面的代码只从db中获取它而不是将它存储到缓存中,但是你可以添加它。

关于laravel的缓存配置

  

默认情况下,Laravel配置为使用文件缓存驱动程序,该驱动程序将序列化的缓存对象存储在文件系统中。对于较大的应用程序,建议您使用更强大的驱动程序,如Memcached或Redis。