【问题标题】:Redis Error while writing bytes to the server. [tcp://127.0.0.1:6379]Redis 向服务器写入字节时出错。 [tcp://127.0.0.1:6379]
【发布时间】: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

标签: php laravel redis


【解决方案1】:

有一些解决方法可以解决这个问题:

  • 将 redis 服务器更新到版本 5 或 6
  • CONFIG SET maxmemory 0

【讨论】:

  • 不幸的是,即使我尝试 ``` ini_set('memory_limit', '-1'); 错误仍然存​​在````
猜你喜欢
  • 2020-05-01
  • 2020-06-29
  • 2018-10-01
  • 2017-07-06
  • 2018-08-31
  • 2017-05-16
  • 2018-06-29
  • 2015-10-14
  • 2017-02-18
相关资源
最近更新 更多