如何解决“predis\clientexception:命令'exists'不是已注册的redis命令”错误?

yptwkmov  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(368)

我在自定义提供程序中使用redis类,但在服务器上不起作用。
本地没有任何问题,但我不明白为什么它不能在服务器上工作。
使用artisan命令时会出现此错误。
“predis\clientexception:命令'exists'不是已注册的redis命令。
网址为/var/www/vhosts/website.com/laravel\u folder/website/vendor/predis/predis/src/profile/redisprofile。php:88 84|{85 |$commandid=strtoupper($commandid);86 | 87 |如果(!isset($this->commands[$commandid])){
88 | throw new clientexception(“命令'$commandid'不是注册的redis命令。”);89 |}90 | 91 |$commandclass=$this->命令[$commandid];92 |$command=新建$commandclass();
异常跟踪:
1 predis\profile\redisprofile::createcommand(“exists”)/var/www/vhosts/website.com/laravel\u folder/website/vendor/predis/predis/src/client。php:323
2 predis\client::createcommand(“exists”)/var/www/vhosts/website.com/laravel\u folder/website/vendor/predis/predis/src/client。php:314
请使用参数-v查看更多详细信息。”
我的代码:

public function boot()
    {
        $redis = new Redis();

        if ( !$redis->exists('activity_of_week') ) {
            $redis->set('activity_of_week',serialize( Activity::ofWeek(10) ));
        }

        if ( !$redis->exists('popular_companies') ) {
            $redis->set('popular_companies',serialize( TopRateCompanies::sortBy()->take(10) ));
        }

        $activityOfWeeks = $redis->get('activity_of_week');
        $popularCompanies = $redis->get('popular_companies');

        $popular = new PopularCategory();
        $popularCategories = $popular->take(10);

        View::composer('frontend.layout.footer', function ($view) use ($activityOfWeeks, $popularCompanies, $popularCategories) {
            /**
             * @var ViewAlias $view
             */

             $keys = [  'email'         => 'contact-email',
                        'facebook'      => 'facebook',
                        'instagram'     => 'instagram',
                        'twitter'       => 'twitter',
                        'youtube'       => 'youtube',
                        'phone'         => 'contact-phone',
                    ];

            $info = array_map( [$this,'contactInfo'],$keys );

            $view->with('contact', $info)
                    ->with('activityOfWeeks', $activityOfWeeks)
                    ->with('popularCompanies', $popularCompanies)
                    ->with('popularCategories', $popularCategories);
        });
    }

    public function contactInfo($key)
    {
        return Settings::where('key',$key)->firstOrFail()->value;
    }

请帮帮我。

ki0zmccv

ki0zmccv1#

这是一个区域设置问题。我相信你在应用程序中使用的是土耳其语区域设置。这就导致了 strtoupper 功能。
有一个类似的问题,你可以在这里看看:https://github.com/nrk/predis/issues/372
作为一个解决方案,如果它在你的情况下是可以接受的,你可以尝试改变当地的。或者正如本期所建议的,您可以使用laravel提供的redis facade。 Redis::EXISTS 就像这样。

相关问题