我正在将我的网站的某些部分从关系数据库移动到Redis,并且需要在很短的时间内插入数百万个密钥.
在我的例子中,数据必须首先从MySQL中提取,由PHP准备,然后添加到相应的排序集(时间作为分数+ ID作为值).目前我正在使用Redis::PIPELINE参数的phpredis多方法的冒险.尽管速度明显提高,但在进行导入时,最终会阻止读取并减慢加载时间.
所以这里有一个问题 - 在phpredis中使用管道是否等同于http://redis.io/topics/mass-insert中描述的大量插入?
这是一个例子:
phpredis方式:
<?php
// All necessary requires etc.
$client = Redis::getClient();
$client->multi(Redis::PIPELINE); // OR $client->pipeline();
$client->zAdd('key', 1, 2);
...
$client->zAdd('key', 1000, 2000);
$client->exec();
Run Code Online (Sandbox Code Playgroud)来自redis.io的vs 协议:
cat data.txt | redis-cli --pipe
Run Code Online (Sandbox Code Playgroud)我在安装phpredis时遇到了一个麻烦的问题
cd phpredis && ./configure && make && make install
Run Code Online (Sandbox Code Playgroud)
之后,我补充道
extension=redis.so
Run Code Online (Sandbox Code Playgroud)
进入php.ini.
我可以通过跑步得到一个好的
php -r "if (new Redis() == true){ echo \"\r\n OK \r\n\"; }"
Run Code Online (Sandbox Code Playgroud)
但是当运行http:127.0.0.1时,nginx会抛出一个错误"致命错误:在index.php中找不到类'Redis'"
<?php>
$client = new Redis();
<?>
Run Code Online (Sandbox Code Playgroud)
我想这可能是与环境有关的一些问题......
谢谢你的建议!
我设置了一个redis密钥并将其过期时间设置为一周:
$expireTime = 7*24*3600;
$redis->hSet($redisKey, $uniqueId, 1);
$redis->expire($redisKey, $expireTime);
Run Code Online (Sandbox Code Playgroud)
但是我发现密钥可能会在几天而不是一周内过期。这对我来说是非常不能接受的。
它是否由于键值太大而过期?
如何保持我的Redis密钥寿命如我所料?
我的max-memory设置是4G,used_memory_peak_human是2.06G,驱逐策略是默认设置volatile-lru。
我的 php -v
PHP 7.1.15-1 + ubuntu14.04.1 + deb.sury.org + 2(cli)(内置:2018年3月6日11:51:39)(NTS)版权所有(c)1997-2018 PHP Group Zend Engine v3. 1.0,版权所有(c)1998-2018 Zend Technologies with Xdebug v2.6.0,Copyright(c)2002-2018,Derick Rethans with Zend OPcache v7.1.15-1 + ubuntu14.04.1 + deb.sury.org + 2,版权所有(c)1999-2018,Zend Technologies
我试过pecl方式
sudo pecl install redis
sudo service php7.1-fpm restart
Run Code Online (Sandbox Code Playgroud)
以及来自https://github.com/phpredis/phpredis的手动方式
phpize
./configure [--enable-redis-igbinary]
make && make install
Run Code Online (Sandbox Code Playgroud)
我确定放了
extension=/usr/lib/php/20170718/redis.so
Run Code Online (Sandbox Code Playgroud)
进入php.ini文件,如我运行时所示 echo phpinfo();
例如
/etc/php/7.1/cli/php.ini
Run Code Online (Sandbox Code Playgroud)
当我运行内置的Web服务器时,我得到了
PHP警告:PHP启动:无法加载动态库'/usr/lib/php/20170718/redis.so' - /usr/lib/php/20170718/redis.so:未定义符号:zend_empty_string在第0行的未知
奇怪的是,PHPStorm自动填充PHP Redis类,所以
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
Run Code Online (Sandbox Code Playgroud)
我可以点击进入Redis类,看它是正确的.
我想知道它是否是版本差异?也许是因为我使用的是32位?
另一个奇怪的事情是,如果我只是把
extension=redis.so
Run Code Online (Sandbox Code Playgroud)
在php.ini,它似乎在寻找一个较旧的版本
PHP启动:无法加载动态库'/usr/lib/php/20160303/redis.so' …
我正在尝试安装phpredis扩展,但没有运气.
运行该命令后./configure --enable-redis-igbinary,我收到以下错误:
检查igbinary包括... configure:错误:找不到igbinary.h
igbinary是使用PECL安装的,但看起来没有找到头文件.
我有一个包含数百万个元素的Redis-Hash,不断添加新的元素.在php中,我运行一个无限循环来获取,处理和删除另一个元素.因此,我需要获取任何现有元素的键(最好是插入哈希中的第一个元素,FiFo)
while($redis->hlen()) {
$key = ???
// process $key
}
Run Code Online (Sandbox Code Playgroud)
虽然我知道RANDOMKEY和SRANDMEMBER命令,但我没有找到任何方法来获取哈希的密钥.HGETALL并且HKEYS,由于哈希的大小,也不是一个选项.我需要顺序处理.帮助赞赏.
我已经在centos中安装了Redis,我有多个像这样的redis键,
Product:<id>:<url>
Run Code Online (Sandbox Code Playgroud)
如何Product:*:* 使用CLI 删除所有内容?
Redis版本:3.2.4 [最新我猜]
谢谢!
redis> SMEMBERS CO:1:A
1) "1"
2) "2"
redis> SMEMBERS CO:2:A
1) "1"
2) "5"
3) "6"
redis> SMEMBERS CO:3:A
1) "5"
redis> SMEMBERS CO:4:A
1) "1"
Run Code Online (Sandbox Code Playgroud)
现在我想找到值1存在的键
如果我使用值1搜索,则结果键将为CO:1:A, CO:2:A和CO:4:A
怎么弄这个?
我的一个应用程序突然开始出错:
Fatal error: Uncaught exception 'RedisException' with message 'Redis server went away' in /var/www/_slim/_core/system/generator.001.php:133 Stack trace: #0 /var/www/_slim/_core/system/generator.001.php(133): Redis->auth('77B1BFFBC0378DF...') #1 /var/www/_slim/_core/system/generator.007.php(144): Generator001->r6_redis_start('R') #2 /var/www/_slim/_core/system/generator.007.php(26): Generator007->HarvestRedis() #3 /var/www/_slim/_core/system/generator.shopping.php(14): Generator007->Generator007() #4 /var/www/_slim/_core/system/generator.last.php(43): Generator008->Generator008() #5 /var/www/_slim/site/home/php/index.php(16): GeneratorLast->GeneratorLast() #6 /var/www/index.php(96): Gui->Gui()
#7 {main} thrown in /var/www/_slim/_core/system/generator.001.php on line 133
Run Code Online (Sandbox Code Playgroud)
我重新安装redis-server但到目前为止没有运气.有什么建议?
我有一个非常简单的php redis应用程序,可以在某些事件中创建密钥.所有钥匙都只是柜台,过期时间为24小时.基本上是每个键24小时滚动窗口,以收集一些统计信息.
if ($redis->exists($key)) {
$redis->incr($key);
}
else {
$redis->set($key, '1');
$now = time(); // current timestamp
$redis->expireAt($key, $now + 86400);
}
Run Code Online (Sandbox Code Playgroud)
当我使用$list = $redis->keys("*");(或在redis-cli控制台中keys *)提取所有键的概述时,我会怀疑按创建日期按时间顺序排列.然而,事实并非如此.它们都没有按字母顺序排序,按价值排序......
所以我的问题是,这个列表是如何排序的?