我有这个控制器,它有许多功能和缓存键,取决于用户名.
我需要当更新信息和删除特定用户的所有缓存密钥?有什么办法吗?
我的控制器从缓存中获取数据:
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']));
}我试过这样做,但仍然没有用:
$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);
}发布于 2022-07-28 00:54:39
类似于lagbox提到的内容,更改为memcache或redis驱动程序,以支持标记,并添加
Cache::
to
Cache::tags('user.....在您的控制器方法中:
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']));
}then for the cache tag clear you would do:Cache::tags('user'.$info->user->name)->flush()如果添加标记由于任何原因不可行,请尝试检查并确保$key.uname实际上正在返回您期望的数据。
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);
}https://stackoverflow.com/questions/73145163
复制相似问题