phpredis和predis的一些区别

By | 2015/10/30

本来想在lumen折腾系列文章中说这个事儿的,想想其实不是很相关,于是专门拿出来凑一篇文章……

他们性能上的差距就不说了,phpredis肯定比predis快上很多,否则phpredis就完全没市场了不是……

多参数命令调用

在predis中,sadd是这样子的,第一个参数是set的名字,第二个参数开始是要add的值,如果提供了多个值,那么就一个一个塞进去,如果仅仅提供了一个值,而且这个值又是个array,那么会把这个array里的值一个一个add进去。说实话,这听起来是挺正常的做法,脚本语言总要提供一些语法糖让苦B的程序猿们尝尝甜头的嘛!

我以为phpredis与predis非常的相似,于是乎把predis的代码直接拿来用来,直到我在log中看到了海量的错误……

原来,phpredis的sadd必须把要塞进去的值一个一个作为参数写清楚,也就是sadd(‘set1’, ‘value1’, ‘value2’, ‘value3’…),真是要命。

只能循环的写了,不过用foreach实在太不geek(装bi)了,用call_user_func_array吧!

$array = array(1, 2, 3, 4, 5); 
array_unshift($array, 'set_name');
call_user_func_array(array($redis, 'sAdd'), $array);

而且为了性能考虑,也许应该使用$pipe?

由此推断,一系列的lpush,rpush,zadd等等,应该都是这个尿性:)

不过总算hmset是可以接受键值对的array的,还好还好!

关于事务和管线

phpredis中,管线和事务都是使用multi()发起的,通过参数来控制到底是哪一种,而predis中分了两个命令,分别是pipeline()和transaction()。而且最后执行的方法也不同,predis是execute(),而phpredis是exec()……

predis中,两个命令可以传入一个匿名函数作为参数,在函数里面做很多redis操作,而phpredis中不行,只能用链式的调用。

One thought on “phpredis和predis的一些区别

发表评论

您的电子邮箱地址不会被公开。