本来想在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中不行,只能用链式的调用。
好文章!666,学习了