我试图测试我的缓存是用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) EXISTS除了检查 key 是否存在于 redis 之外,还有其他更快的方法吗?
我的问题是,我在 redis 中有超过 100 万条记录,我需要进行 key_exists 检查。这应该在 10 毫秒内发生。
对此有什么想法吗?
我正在运行一个流量高峰的网站(大约10k在线用户),当网站超过大约7k在线用户时我和Predis面临这个错误:
PHP Fatal error: Uncaught exception 'Predis\\Connection\\ConnectionException' with message 'Connection timed out [tcp://127.0.0.1:6379]'
Run Code Online (Sandbox Code Playgroud)
服务器是Intel Xeon 3.4GHz,32GB RAM和SSD磁盘,nginx用于静态内容,apache和mysql.内存消耗从不超过9GB,峰值中的CPU负载为4.
我没有看到PHP的内存错误,MySQL也没有消失,只有这个Redis错误.我把超时0和?read_write_timeout = 0放在一起没有运气.你能帮助我吗?
谢谢,抱歉我的英文!
我需要删除一个包含一些特殊键的键(在我的例子中是方括号):
我执行以下操作,但不起作用:
$this->redis;
$keys = $this->redis->keys("*");
foreach ($keys as $key) {
// keys are in the following format:
// vir3_data_cache[zones_cdc_shifting_series_2013_5][1]
$this->redis->del($key);
// no key was deleted
}
Run Code Online (Sandbox Code Playgroud)
我也尝试引用密钥,但没有成功:
$this->redis;
$keys = $this->redis->keys("*");
foreach ($keys as $key) {
// keys are in the following format:
// vir3_data_cache[zones_cdc_shifting_series_2013_5][1]
$quotedKey = addslashes(addslashes($key));
$this->redis->del($quotedKey);
// no key was deleted
}
Run Code Online (Sandbox Code Playgroud) 我刚开始使用Predis进行Redis迁移,但是我很难让zadd函数与数组一起使用。
此代码有效:
foreach ($userIndexArr as $row) {
$usernames[] = 0;
$usernames[] = $row['username'];
$result = $this->cache->zadd('@person', 0, $row['username']);
}
Run Code Online (Sandbox Code Playgroud)
这不是:
foreach ($userIndexArr as $row) {
$usernames[] = 0;
$usernames[] = $row['username'];
}
try {
$result = $this->cache->zadd('@person', $usernames);
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
Run Code Online (Sandbox Code Playgroud)
并且不会引发任何错误。任何帮助深表感谢!
-J
我收到错误NOAUTH需要身份验证.我的laravel版本是5.3,我使用predis 1.1.1连接redis.
在etc/redis/redis.conf我有:
bind 127.0.0.1
requirepass somepassword
Run Code Online (Sandbox Code Playgroud)
在.env文件中我有
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=somepassword
REDIS_PORT=6379
Run Code Online (Sandbox Code Playgroud)
在config/database.php我有:
'redis' => [
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
Run Code Online (Sandbox Code Playgroud)
我通过以下方式连接redis:
self::$_db = \Redis::connection('default');
Run Code Online (Sandbox Code Playgroud)
并使用它像:
self::$_db->pipeline(function ($pipe) use ($profile, $time,$type, $id) {
$pipe->zadd(self::getProfileKey($profile, $type), $time, $id);
$pipe->zadd(self::getProfileKey($profile), $time, $type . ':' . $id);
$pipe->zadd(self::getModelKey($type,$id) . '::favoritedBy', $time, $profile->profile_id);
});
Run Code Online (Sandbox Code Playgroud)
因此,当我注释掉requirepass并将密码发送为null时,它可以工作,但它不起作用,并NOAUTH Authentication required.在密码到位时抛出错误.我需要根据我的项目要求设置密码.请帮忙.提前致谢.
我能够使用 来刷新终端redis-cli flushdb中的所有按键。我已经搜索了一段时间,花了我一个小时才找到在php中执行此操作的简单命令。
我在 stackoverflow 上没有找到它,所以我想发布它以节省某人的宝贵时间。
使用的库:Predis
我正在开发一个 Laravel 项目,并使用 Predis 来缓存数据库查询。现在我必须在我的服务器上安装 Redis。是否可以在共享主机上安装 Redis?
我将 Laravel 5.5 应用程序移至另一台服务器 - 我在那里使用完全相同的代码(做了 a git clone)以及完全相同的composer.json文件composer.lock(甚至NGINX配置也相同)。
当我运行我的应用程序时,出现以下错误:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Call to undefined method Illuminate\Support\Facades\Redis::connect()
Run Code Online (Sandbox Code Playgroud)
这是代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
...
public function somefunction() {
$redis = new \Redis();
$redis->connect(env('REDIS_HOST')); <-------------
...
Run Code Online (Sandbox Code Playgroud)
作曲家软件包已安装,但我的系统上predis/predis没有。php-redis
在两个系统 (debian) 上都安装了 redis 并在127.0.0.1. .env两个系统在和 中使用相同的配置config/*:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Run Code Online (Sandbox Code Playgroud)
唯一不同的是,我在一个系统(旧系统)上运行php7.0,而在我运行的新系统上php7.3- 我切换到php7.0新系统以检查是否存在错误,但我仍然遇到异常。
再一次 - 在我的另一台服务器上,一切都运行良好,代码完全相同,这让我感到沮丧 - …
predis ×10
redis ×8
php ×7
laravel ×3
phpredis ×2
caching ×1
laravel-5.3 ×1
laravel-5.5 ×1
symfony ×1