【发布时间】:2021-12-30 10:42:21
【问题描述】:
我刚开始使用 redis 来缓存数据和运行查询。我有两个函数,一个用于获取数据,另一个用于过滤缓存的数据。这就是我获取数据的函数的样子:
if (Auth::user()->access_level == 'Admin' || Auth::user()->access_level == 'Donor') {
$clients_number = Cache::remember('all_clients_number', 21600, function () {
return ClientPerformance::whereNotNull('actual_clients')->get();
});
$all_clients_number = Cache::remember('all_clients_sum', 21600, function () use ($clients_number) {
return $clients_number->sum('actual_clients');
});
} else if(Auth::user()->access_level == 'Partner') {
$clients_number = Cache::remember('all_partner_clients_number', 21600, function () {
return ClientPerformance::whereNotNull('actual_clients')
->where('partner_id', Auth::user()->partner_id)
->get();
});
$all_clients_number = Cache::remember('all_partner_clients_sum', 21600, function () use ($clients_number) {
return $clients_number->sum('actual_clients');
});
}
我已确认我的 redis 服务正在运行,并且我将 php.ini 文件中的最大内存限制更改为 4096。
这就是我过滤数据的函数的样子:
$selected_counties = $request->counties;
if (Auth::user()->access_level == 'Admin' || Auth::user()->access_level == 'Donor') {
$all_clients_number = Cache::remember('all_clients_number', 21600, function () {
return ClientPerformance::whereNotNull('actual_clients');
});
} else if(Auth::user()->access_level == 'Partner') {
$all_clients_number = Cache::remember('all_partner_clients_number', 21600, function () {
return ClientPerformance::whereNotNull('actual_clients');
});
}
if (!empty($selected_counties)) {
$all_clients_number = $all_clients_number->where('county_id', $selected_counties);
}
$data["all_clients_number"] = $all_clients_number->sum('actual_clients');
从像 Cache::remember(key) 这样的另一个函数访问缓存数据是一种好习惯吗?尽管我缓存的数据并不那么重,但我无法向 redis 写入任何内容的原因可能是什么。
任何我可以阅读的地方的建议或链接如何有效地访问缓存的 redit 数据将不胜感激。谢谢。
【问题讨论】:
-
错误是什么?
-
@cottton 我加载页面时的错误是
Error while writing bytes to the server. [tcp://127.0.0.1:6379] -
Cache::remember()中的代码是什么。如我所见,您将匿名函数作为数据发送到其中。 -
@Abilogos Redis 服务器 v=3.0.504 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=a4f7a6e86f2d60b3
-
我正在使用predis