标签: predis

LogicException:请确保已安装并启用 PHP Redis 扩展

Laravel 版本:7.5.0 PHP 版本:7.2 数据库驱动和版本:Redis

一切正常,但突然出现此错误,我将 phpredis 更改为 predis 但错误相同。

重现步骤:我正在调用事件函数 event(new ChatsEvent($data));

LogicException: Please make sure the PHP Redis extension is installed and enabled. in /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php:76
Stack trace:
#0 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Support/helpers.php(428): Illuminate\Redis\Connectors\PhpRedisConnector->Illuminate\Redis\Connectors\{closure}(Object(Illuminate\Support\Facades\Redis))
#1 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(104): tap(Object(Illuminate\Support\Facades\Redis), Object(Closure))
#2 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(27): Illuminate\Redis\Connectors\PhpRedisConnector->createClient(Array)
#3 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(31): Illuminate\Redis\Connectors\PhpRedisConnector->Illuminate\Redis\Connectors\{closure}()
#4 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php(111): Illuminate\Redis\Connectors\PhpRedisConnector->connect(Array, Array)
#5 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php(90): Illuminate\Redis\RedisManager->resolve('default')
#6 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php(108): Illuminate\Redis\RedisManager->connection('default')
#7 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php(64): Illuminate\Broadcasting\Broadcasters\RedisBroadcaster->broadcast(Array, 'ChatsEvent', Array)
#8 [internal function]: Illuminate\Broadcasting\BroadcastEvent->handle(Object(Illuminate\Broadcasting\Broadcasters\RedisBroadcaster))
#9 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array(Array, Array)
#10 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/Util.php(36): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#11 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#12 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#13 /home/user/public_html/vendor/laravel/framework/src/Illuminate/Container/Container.php(592): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, …
Run Code Online (Sandbox Code Playgroud)

redis laravel predis laravel-events laravel-7

27
推荐指数
5
解决办法
3万
查看次数

是否有Predis文档?

我正在使用phpredis,现在我也在为我的php应用程序尝试predis,但我找不到第二个的好文档.在github中有一个"如何使用",但我发现它很短.我检查了这些例子,但我注意到他们正在使用"小写"字符中的Redis命令.我尝试了一些并且有效,但我不想尝试所有这些以确定这是否属实......

php redis predis

13
推荐指数
1
解决办法
1万
查看次数

Laravel 异常队列最大尝试次数超出

我创建了一个应用程序来向多个用户发送电子邮件,但在处理大量收件人时遇到问题。

错误出现在failed_jobs表格中

Illuminate\Queue\MaxAttemptsExceededException:
App\Jobs\ESender has been attempted too many times or run too long.
The job may have previously timed out.
in D:\EmailSender\vendor\laravel\framework\src\Illuminate\Queue\Worker.php:649
Run Code Online (Sandbox Code Playgroud)

这是payloadfailed_jobs表中

{
   "uuid":"ff988083-c1da-4d20-a2e3-c2a10e154c79",
   "timeout":9000,
   "id":"j2Lz0Ro0bkJpqwxKWTxC3Tiii71iE6Cm",
   "data":{
      "command":"O:16:\"App\\Jobs\\ESender\":13:{s:7:\"timeout\";i:9000;s:12:\"receiver_obj\";O:45:\"Illuminate\\Contracts\\Database\\ModelIdentifier\":4:{s:5:\"class\";s:12:\"App\\Receiver\";s:2:\"id\";i:6;s:9:\"relations\";a:0:{}s:10:\"connection\";s:5:\"mysql\";}s:16:\"sender_all_hosts\";O:45:\"Illuminate\\Contracts\\Database\\ModelIdentifier\":4:{s:5:\"class\";s:15:\"App\\SenderHosts\";s:2:\"id\";a:4:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;}s:9:\"relations\";a:0:{}s:10:\"connection\";s:5:\"mysql\";}s:11:\"message_obj\";O:45:\"Illuminate\\Contracts\\Database\\ModelIdentifier\":4:{s:5:\"class\";s:12:\"App\\Messages\";s:2:\"id\";i:36;s:9:\"relations\";a:0:{}s:10:\"connection\";s:5:\"mysql\";}s:7:\"counter\";i:1;s:3:\"job\";N;s:10:\"connection\";N;s:5:\"queue\";N;s:15:\"chainConnection\";N;s:10:\"chainQueue\";N;s:5:\"delay\";N;s:10:\"middleware\";a:0:{}s:7:\"chained\";a:0:{}}",
      "commandName":"App\\Jobs\\ESender"
   },
   "displayName":"App\\Jobs\\ESender",
   "timeoutAt":1594841911,
   "maxExceptions":null,
   "maxTries":null,
   "job":"Illuminate\\Queue\\CallQueuedHandler@call",
   "delay":null,
   "attempts":1
}
Run Code Online (Sandbox Code Playgroud)

请参阅此处的 cmd 错误。

部分代码:

#1

class ESender implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;


    /**
     * The number of times the job may be attempted.
     *
     * @var int
     */
    public $tries = …
Run Code Online (Sandbox Code Playgroud)

php queue redis laravel predis

12
推荐指数
2
解决办法
3万
查看次数

如何在Predis中使用带有MATCH选项的SCAN

我之前使用该KEYS命令来搜索与Redis数据库中的某个模式匹配的密钥.从Redis 2.8开始,SCAN命令似乎是首选,KEYS因为它返回迭代器而不是一次扫描整个键空间.

我正在使用Predis > = 0.8.5,它应该支持该SCAN命令的PHP迭代器.Predis没有很多文档,所以我想知道如何将以下KEYS命令转换为它的SCAN对应物:

$client->keys($pattern)
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

$client->scan('MATCH', $pattern);
Run Code Online (Sandbox Code Playgroud)

哪种工作 - 但它不返回本机PHP迭代器.使用Predis的内置迭代器支持会非常好.

php redis predis

10
推荐指数
1
解决办法
7741
查看次数

在symfony4中为redis设置无键前缀

我在Symfony 4中正确配置redis时遇到问题.我希望在缓存项目键之前没有前缀,但它会不断显示.这是我的config/packages/framework.yaml(与缓存相关的部分):

cache:
    prefix_seed: ztw/ztw
    app: cache.adapter.redis
    default_redis_provider: '%env(resolve:REDIS_URL)%'
Run Code Online (Sandbox Code Playgroud)

我试图删除prefix_seed键并将其值设置为~.没有任何效果.但是,文档说明其默认值为null.

我想实现这一点,因为当我通过网站启动我的网站时,它设置了一些关键并坚持下去.但是当我运行我的behat测试(故意 - 填充缓存)时 - 密钥是不同的,无论如何.两者都使用APP_ENV=dev环境变量值(检查两次).

以下是redis方面的情况:

127.0.0.1:6379> keys *
 1) "xw+Y6oICD-:4dfbddf6bbb8ea2e25e843d936739dd9"
 2) "xw+Y6oICD-:4f1cbb7ece6f8db3b69ae11418bbf022"
 3) "xw+Y6oICD-:26c65dcee950a5020596989ad1a8ff66"
 4) "gUbUjDoAuQ:b712bf9832f566bd5bd30a07e7bd146b"
 5) "gUbUjDoAuQ:1d0f56bf67bd482674b62067336bd633"
 6) "xw+Y6oICD-:d948f5e23f94e681620436786f0daf98"
 7) "xw+Y6oICD-:ef88ab906981c6e04ef639cd4a8ae803"
 8) "xw+Y6oICD-:748d18ce6ba0929d2540e9b4529e56cc"
 9) "xw+Y6oICD-:ef30ff7e239b92cec1f5e58c201296f5"
10) "xw+Y6oICD-:1d0f56bf67bd482674b62067336bd633"
11) "xw+Y6oICD-:b712bf9832f566bd5bd30a07e7bd146b"
12) "xw+Y6oICD-:4da534491b5732336b3bb3e7302bc79b"
Run Code Online (Sandbox Code Playgroud)

例如,第4和第11项具有相同的键(和值)但不幸的是前缀不同.

我知道缓存键前缀被认为是一种很好的做法,但由于某种原因,在运行时,behat键是不同的.

任何帮助赞赏.

php redis symfony predis symfony4

10
推荐指数
1
解决办法
750
查看次数

Laravel + Redis通过SSL缓存?

我正在尝试使用信息https://github.com/nrk/predis连接到具有predis 1.1和SSL的Redis ,其中在示例中使用以下配置:

// Named array of connection parameters:
$client = new Predis\Client([
  'scheme' => 'tls',
  'ssl'    => ['cafile' => 'private.pem', 'verify_peer' => true],
]);
Run Code Online (Sandbox Code Playgroud)

我的Laravel配置如下所示:

'redis' => [
        'client' => 'predis',
        'cluster' => env('REDIS_CLUSTER', false),

        'default' => [
            'host' => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],

        'options' => [
            'cluster' => 'redis',
            'parameters' => ['password' => env('REDIS_PASSWORD', null)],
            'scheme' => 'tls',
            'ssl'    => ['verify_peer' => false],
        ],
    ],
Run Code Online (Sandbox Code Playgroud)

由于我没有用于SSL的密钥,因此我禁用了对等验证(根据 …

php laravel predis

8
推荐指数
1
解决办法
3522
查看次数

Redis键未到期 - Laravel,Predis

我正在使用Laravel 5.4,使用Predis和最新的Redis(或Redis for Windows).

密钥保存没有问题.所以,我怀疑这是一个配置问题.

问题是他们没有到期.密钥将重复使用,直到它过期...类似于会话的工作方式.

如果它不存在,我创建一次密钥.在同样的逻辑中,我然后设置到期时间.

在控制器中,我有

use Illuminate\Support\Facades\Redis;
Run Code Online (Sandbox Code Playgroud)

在其中一个函数中,获取连接实例:

$redis = Redis::connection();
Run Code Online (Sandbox Code Playgroud)

在创建密钥之前,我检查存在(简化)然后创建并设置到期.

if(!$redis->exists($some_unique_key))
{
   //set the key
   $redis->set($some_unique_key, 'Some Value'));
   //set the expiration
   //I understand this means expire in 60s.
   $redis->expire($some_unique_key,60); 
}
Run Code Online (Sandbox Code Playgroud)

为什么它不会到期钥匙?

正如我所提到的,其他一切都有效.如果我监视,我会看到密钥更新没有问题,并且可以查询它.

为了记录,我读过:

Laravel文档到期时没有任何内容:

更新1

调查设置(更新)密钥的可能原因会重置到期日

更新2

使用@ for_thestack的推理(在REDIS命令中)来提出解决方案.用代码查看我的回答.随意upvote @for_thestack :)

php redis laravel predis

8
推荐指数
4
解决办法
8271
查看次数

名称或服务未知[tcp:// redis:6379]

我在使用laravel设置redis缓存时遇到问题.我在我的本地机器上有一个redis服务器runnig:

在此输入图像描述

我的.env:

在此输入图像描述

我准备好并在端口6379上使用localhost:

在此输入图像描述

有人告诉我这里发生了什么事?在此输入图像描述

php redis-cache phpredis predis laravel-5

7
推荐指数
1
解决办法
6014
查看次数

如何通过predis刷新所有redis节点?

我试图测试我的缓存是用redis集群实现的(集群服务器不是客户端).每次运行单元测试时我都必须刷新redis.当我尝试运行flushdb命令时出现此错误:无法使用带有redis-cluster的"FLUSHDB".似乎我只能在设置插槽时才能在集群模式下运行flushdb命令,但我不知道该怎么做.(我已经覆盖了laravel的redis包装器,所以laravel不是这样的情况如果你了解我如何使用predis我可以采用laravel)

redis predis

6
推荐指数
1
解决办法
980
查看次数

作曲家更新后SncRedisExtension Factory中的ClassNotFoundException"来自命名空间"Predis\Profile"

今天更新作曲家包后,我收到错误消息.

ClassNotFoundException in SncRedisExtension.php line 158:
Attempted to load class "Factory" from namespace "Predis\Profile".
Did you forget a "use" statement for "Buzz\Message\Factory\Factory"?
Run Code Online (Sandbox Code Playgroud)

这个配置工作了一段时间 - 现在停止,我的身边没有任何变化.

这是我的Composer.json包

     "php": ">=5.3.3",
    "symfony/symfony": "2.6.*",
    "doctrine/orm": "~2.2,>=2.2.3,<2.5",
    "doctrine/dbal": "<2.5",
    "doctrine/doctrine-bundle": "~1.2",
    "twig/extensions": "~1.0",
    "symfony/assetic-bundle": "~2.3",
    "symfony/swiftmailer-bundle": "~2.3",
    "symfony/monolog-bundle": "~2.4",
    "sensio/distribution-bundle": "~3.0,>=3.0.12",
    "sensio/framework-extra-bundle": "~3.0,>=3.0.2",

    "stof/doctrine-extensions-bundle": "~1.1@dev",
    "a2lix/translation-form-bundle": "1.*@dev",

    "html2text/html2text": "dev-master",

    "liuggio/statsd-client-bundle": "1.6.*",

    "weotch/phpthumb": "dev-master",

    "egeloen/google-map-bundle": "*",
    "oh/google-map-form-type-bundle": "dev-master",
    "meenie/javascript-packer": "dev-master",
    "natxet/CssMin": "dev-master",
    "apy/datagrid-bundle": "dev-master",

    "webit/sms-common": "dev-master",
    "webit/smsapi": "dev-master",
    "webit/smsapi-bundle": "dev-master",

    "ddeboer/data-import": "dev-master",
    "endroid/qrcode": "1.*@dev",
    "knplabs/knp-snappy-bundle": "^1.2", …
Run Code Online (Sandbox Code Playgroud)

php symfony predis

6
推荐指数
1
解决办法
3373
查看次数