无法连接使用 phpredis

laravel 5.8

php 7.2.10

redis 5.0.2

配置

# .env 配置
REDIS_CLIENT=phpredis
REDIS_CLUSTER=false
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=
REDIS_PORT=6379
REDIS_PERSISTENT=true

# config/app.php 配置下的 Redis 已经改了别名
'LRedis' => Illuminate\Support\Facades\Redis::class

# redis 客户端连接测试是正常的,如下所示:
127.0.0.1:6379> set miit makeit.vip OK 
127.0.0.1:6379> get miit "makeit.vip" 
127.0.0.1:6379> del miit (integer) 1

调用

# controller 内的调用如下
use Illuminate\Support\Facades\Redis;
class testController extends Controller {
    public function index() {
        Redis::set('test', 1);
    }
}

# 上述操作抛出的异常如下
exception: "Symfony\Component\Debug\Exception\FatalThrowableError"
file: ".\vendor\laravel\framework\src\Illuminate\Redis\Connectors\PhpRedisConnector.php"
`line: 66
message: "Class 'Redis' not found"

5.8 版本的文档中未说明需要修改Redis别名配置,找的一些资料中看到的,如果不改这个别名,抛出的异常是 Call to undefined method Redis::connect()

PHPRedis扩展在本地新建一个PHP文件测试过,测试OK,不知是何缘故导致Laravel无法找到 PHPRedis扩展类库

<?php
# 本地测试代码
$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379);
$redis->set('makeit', 'Hello World');
$redis->get('makeit');

# 可以正常存储获取的
$ .\redis-cli.exe
127.0.0.1:6379> keys *
1) "makeit"
127.0.0.1:6379> get makeit
"Hello World"

麻烦大家帮忙看看,谢谢 ~

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
leo
最佳答案

phpredis 扩展没装好

4年前 评论
讨论数量: 8
leo

phpredis 扩展没装好

4年前 评论

@leo 我是在win机上测试的,客户端测试是可以的;
对php的扩展,版本,编译方式等查看过,找了对应版本下载,新建了一个php文件来测试也是OK的
就是在用laravel链接的时候,总是找不到这个扩展类

4年前 评论
Epona

需要安装 Predis 吧

composer require predis/predis

4年前 评论

@Epona 用的是 phpredis,不用安装 predis 的 :blush:

4年前 评论

@leo 已经解决

windows 本地测试时,修改了菜单中跳转的 php.ini 配置文件

测试时是直接基于 wampServer 的,所以没有问题

需要找到对应的 PHP 版本下的 eg: D:\Wamp\bin\php\php7.3.5php.ini 配置文件进行修正

4年前 评论

@leo 我使用 phpinfo 打印的时候可以看到 redis,并且我把 config/app.php 中 aliases 的 Redis改成了 RedisManager, 但是依然报错,请问还是我 phpredis 扩展装的有问题吗,使用的是 laravel 6 版本
file
file

4年前 评论
jenkincei

文档说明可能没理解,phpredis使用类名 Redis,如果定义一个 facades 也是 Redis 那么在使用的时候会出现冲突情况.如果你还是想使继续用 facades 可以这样使用

# controller 内的调用如下

use Illuminate\Support\Facades\Redis as LRedis;

class testController extends Controller {
    public function index() {
        LRedis::set('test', 1);
    }
}
4年前 评论

@jenkincei 但是依然是不正确的,laravel 6 redis 默认的是 phpredis 驱动

file

4年前 评论
qingye 3年前
____ (作者) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!