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) 我正在使用phpredis,现在我也在为我的php应用程序尝试predis,但我找不到第二个的好文档.在github中有一个"如何使用",但我发现它很短.我检查了这些例子,但我注意到他们正在使用"小写"字符中的Redis命令.我尝试了一些并且有效,但我不想尝试所有这些以确定这是否属实......
我创建了一个应用程序来向多个用户发送电子邮件,但在处理大量收件人时遇到问题。
错误出现在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)
这是payload在failed_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)
部分代码:
#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) 我之前使用该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的内置迭代器支持会非常好.
我在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键是不同的.
任何帮助赞赏.
我正在尝试使用信息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的密钥,因此我禁用了对等验证(根据 …
我正在使用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 :)
我在使用laravel设置redis缓存时遇到问题.我在我的本地机器上有一个redis服务器runnig:
我的.env:
我准备好并在端口6379上使用localhost:
我试图测试我的缓存是用redis集群实现的(集群服务器不是客户端).每次运行单元测试时我都必须刷新redis.当我尝试运行flushdb命令时出现此错误:无法使用带有redis-cluster的"FLUSHDB".似乎我只能在设置插槽时才能在集群模式下运行flushdb命令,但我不知道该怎么做.(我已经覆盖了laravel的redis包装器,所以laravel不是这样的情况如果你了解我如何使用predis我可以采用laravel)
今天更新作曲家包后,我收到错误消息.
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)