首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用带有默认缓存驱动程序的laravel 9忘记多个缓存密钥

如何使用带有默认缓存驱动程序的laravel 9忘记多个缓存密钥
EN

Stack Overflow用户
提问于 2022-07-27 22:15:55
回答 1查看 242关注 0票数 0

我有这个控制器,它有许多功能和缓存键,取决于用户名.

我需要当更新信息和删除特定用户的所有缓存密钥?有什么办法吗?

我的控制器从缓存中获取数据:

代码语言:javascript
复制
class HomeController extends Controller
{
    private $cache_duration = 60*60*72;

    function home($uname) {
        $info =  Cache::remember('get-all-info-home'.$uname, $this->cache_duration, function() use($uname){
            $user = User::where('name', '=', $uname)->firstOrFail();
            return $user !=null ? $user->about : null;
        });
        return view('home', compact('info'));
    }


    function info($uname) {

        $info =  Cache::remember('get-all-info'.$uname, $this->cache_duration, function() use($uname){
            $user = User::where('name', '=', $uname)->firstOrFail();
            return $user !=null ? $user->about : null;
        });
        return view('info', compact(['info']));
    }

    function skills($uname) {
        $info =  Cache::remember('get-all-user-skills'.$uname, $this->cache_duration, function() use($uname){
            $user = User::where('name', '=', $uname)->firstOrFail();
            return $user !=null ? $user->about : null;
        });
        $skills =   Cache::remember('get-all-skills'.$uname, $this->cache_duration, function() use($uname){
            $user = User::where('name', '=', $uname)->firstOrFail();
            return $user !=null ? $user->skills : null;
        });

        return view('skills', compact(['skills', 'info']));
    }

我试过这样做,但仍然没有用:

代码语言:javascript
复制
$uname = $info->user->name;
  $keys = ['get-all-info-home', 'get-all-info', 'get-all-user-skills',
             'get-all-skills', 'get-all-user-users-education-experiences', 'get-all-education',
             'get-all-experiences', 'get-all-user-users-user-achievements', 'get-all-user-users-achievements',
            'get-all-user-users-user-services', 'get-all-user-users-services-unique',
             'get-all-user-users-user-services'];
             foreach($keys as $key) {
                $key = $key.$uname;
                Cache::forget($key);
             }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-28 00:54:39

类似于lagbox提到的内容,更改为memcache或redis驱动程序,以支持标记,并添加

代码语言:javascript
复制
Cache::

to

Cache::tags('user.....

在您的控制器方法中:

代码语言:javascript
复制
    function home($uname) {
        $info =  Cache::tags('user'.$uname)
            ->remember('get-all-info-home'.$uname, $this->cache_duration, function() use($uname){
            $user = User::where('name', '=', $uname)->firstOrFail();
            return $user !=null ? $user->about : null;
        });
        return view('home', compact('info'));
    }

    function info($uname) {

        $info =  Cache::tags('user'.$uname)
->remember('get-all-info'.$uname, $this->cache_duration, function() use($uname){
            $user = User::where('name', '=', $uname)->firstOrFail();
            return $user !=null ? $user->about : null;
        });
        return view('info', compact(['info']));
    }
代码语言:javascript
复制
then for the cache tag clear you would do:
代码语言:javascript
复制
Cache::tags('user'.$info->user->name)->flush()

如果添加标记由于任何原因不可行,请尝试检查并确保$key.uname实际上正在返回您期望的数据。

代码语言:javascript
复制
            foreach($keys as $key) {
                $key = $key.$uname; // <- maybe this is not returning the right data
                dd($key);  // echo this out just to see if it is
                Cache::forget($key);
             }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73145163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档