小白求问:我想缓存一个使用率高且耗时久的查询应该怎么做?

最近在看缓存相关的内容,现在有点搞不懂该怎么正确的使用缓存,在什么场景使用缓存。求各位大佬指点一下。

我先举个例子:假如现在我有一个查询比较频繁而且时间比较久,我想缓存这个查询。
未添加缓存的代码:

    public function test(array $array1, array $array2)
    {
        return Table1::select('a', 'b','c')
            ->with([
                'with1' => function ($query) use($array1) {
                    $query->select('c', 'd')
                        ->join('table2', 'table2.c', '=', 'table1.c')
                        ->where($array1);
                }
            ])
            ->whereIn('a', $array2)
            ->get();
    }

下面是我写的添加了缓存的代码,但是不知道对不对。

public function test(array $array1, array $array2)
    {
        $str1 = implode(",", sort($array1));
        $str2 = implode(',', sort($array2));
        $test = \Cache::remember("test$str1$str2",10, function () use ($array1, $array2) {
            return Table1::select('a', 'b','c')
                ->with([
                    'with1' => function ($query) use($array1) {
                        $query->select('c', 'd')
                            ->join('table2', 'table2.c', '=', 'table1.c')
                            ->where($array1);
                    }
                ])
                ->whereIn('a', $array2)
                ->get();
        });

        return $test;
    }

像上述的情况应该怎么去缓存。还有就是应该在什么场景去使用缓存。求教....

阅读 1.6k
2 个回答

直接把get() 改为 cache(3600)->get()
或者你可以用这个 https://github.com/lizhichao/one 自动化缓存orm,使用无感知。和数据库自动同步。


    Cache::get($cache_key);
    Cache::set($cache_key, $data, $ttl); //ttl 分钟为单位
  

数据缓存建议缓存到内存去比如redis ,加速返回,从内存取 减少mysql压力,主要磁盘io ,减少计算量

https://www.cnblogs.com/NiceC...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题