【问题标题】:Search in data from cache从缓存中搜索数据
【发布时间】:2022-07-21 19:16:58
【问题描述】:

我的问题是,如果缓存中有数据,我用fetch创建了一个条件,如果没有,我就从数据库中取出,刷新缓存一段时间。正常情况下,如果不使用缓存,我可以搜索页面,但是我不能使用下面的代码按id或昵称搜索。那么使用cache::get时可以添加搜索条件吗?

public function index(Request $request)
    {
        $submit = $request->get('submit');
        $id = $request->get('id');
        $nick_name = $request->get('nick_name');

        if (Cache::has('users')) {
            $users = Cache::get('users');
            return view('admin.users.index', compact('users'));
        }

        $users = User::when(!empty($id), function ($query) use ($id) {
            $query->where('id', $id);
        })->when(!empty($nick_name), function ($query) use ($nick_name) {
            $query->where('nick_name', $nick_name);
        })->orderBy('created_at', 'asc')->get();


        Cache::put('users', $users, now()->addMinutes(60));
        return view('admin.users.index', compact('users'));
    }

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您应该在缓存键中添加搜索条件。例如

    public function index(Request $request) {
        $submit = $request->get('submit');
        $id = $request->get('id');
        $nick_name = $request->get('nick_name');
    
        $cacheKey = User::class . md5(json_encode([$submit, $id, $nick_name]));
    
        if (Cache::has($cacheKey)) {
        /* ... */
    }
    

    因为现在您的缓存只写入第一个搜索结果而忽略其他所有内容。


    或写入缓存所有用户。然后通过array_filter 应用过滤器运行该数组。但如果搜索非常动态,这可能会浪费开发人员的时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-28
      • 2019-11-09
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      相关资源
      最近更新 更多