使用 Redis时尽量使用hashget/hashset,少用get/set? 以及PHP Warning:PHP Startup:redis:Unable to initialize module

04-19 8113阅读 0评论

一、使用 Redis时尽量使用hashget/hashset,少用get/set?

    网上多有评论说hashget/hashset的效率比get/set高,并建议在使用redis时尽量使用hash,少使用get/set的键值。未必啊。这里有一段简单的对比hashset和set的性能比较,各执行1000次的数据插入:

使用 Redis时尽量使用hashget/hashset,少用get/set? 以及PHP Warning:PHP Startup:redis:Unable to initialize module 第1张
(图片来源网络,侵删)

1. 测试代码

$redis = new Redis();
$redis->connect('127.0.0.1', '6379');
$char ='';
//set
$t  = microtime(true);
for($i=0;$iset($key,$key);
}
$cost = microtime(true)-$t;
echo $cost.'
'; //hset $t = microtime(true); for($i=0;$ihset('hashval', $key, $key); } $cost = microtime(true)-$t; echo $cost.'
';

2. 测试结果

     如下 为单次的测试结果。 

0.70904016494751

1.2040688991547

    单次不具有代表性,进行了多次测试,均显示hashset的用时均比set高。再进行取数据测试,仍是取1000次数据,代码如下:

$redis = new Redis();
$redis->connect('127.0.0.1', '6379');
$redis->set('test','test');
$redis->set('testhash','testhash','testhash');
//get
$t  = microtime(true);
for($i=0;$iget('test');
}
$cost = microtime(true)-$t;
echo $cost.'
'; //hget $t = microtime(true); for($i=0;$ihget('testhash', 'testhash'); } $cost = microtime(true)-$t; echo $cost.'
';

随机单次测试结果:

使用 Redis时尽量使用hashget/hashset,少用get/set? 以及PHP Warning:PHP Startup:redis:Unable to initialize module 第2张
(图片来源网络,侵删)

0.12400698661804

0.09700608253479

3.测试结论

        可见,在进行取数据时,hashget比get要快,综合来说读数据时hash要快,存数据时hash要慢。所以在实际使用时要考虑业务中是读多还是读少了。

    如果像缓存那样设置了一次后,很久才会更新一次,就建议使用hash。

    如果数据更新非常频繁,可考虑使用set/get。

publish:March 22, 2016 -Tuesday

二、PHP Warning: PHP Startup: redis: Unable to initialize module 

    redis已成功安装,且已经在php中安装了redis.so,但升级php版本后不能使用原来的redis.so扩展,需要重新编译安装phpredis。今天安装后重启php-fpm时出现了以下错误:

[root@kermit etc]# php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm [21-Jul-2016 18:59:16] NOTICE: PHP message: PHP Warning:  PHP Startup: redis: Unable to initialize module

Module compiled with module API=20060613

PHP    compiled with module API=20090626

These options need to match

 in Unknown on line 0

 done

    出现这个问题的原因是:执行编译源码包执行phpize的版本与当前php环境中phpize的版本不一致造成的。在这之前我非常清楚需要重新编译安装phpredis,不过我是在原来编译安装phpredis的文件夹里继续编译安装的。所以我进入目录以后执行:

/usr/local/php/bin/phpize #重新使用新phpize生成configure配置文件

./configure --with-php-config=/usr/local/php/bin/php-config  #配置

make && make install  #安装

    但这样依然是不行,说明被编译安装过的文件夹里有一些东西重新编译后不会变化。必须重新编译;即重新解压缩源码包,进入文件夹执行以上安装步骤。不过并不需要更新phpredis版本。


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,8113人围观)

还没有评论,来说两句吧...

目录[+]