最近吃了一次不看源码亏,首先我引入了别人写的phpredis封装类,由于没有看到源码中的setOption项,导致我用原生redis查看到的总是经过serialize序列化的值,最后才发现是因为redis封装类中设置了setOption(\Redis::OPT_SERIALIZER,\Redis::SERIALIZER_PHP)选项。
这个设置的作用是将数据自动serialize序列化之后再存入redis,取出来时自动unserialize反序列化。
原生示例代码:
$conn = new Redis(); $conn->connect('127.0.0.1',2222); $conn->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_PHP); $conn->zAdd('test-info',time(), '数据项'); $time = time(); $data = $conn->zRangeByScore('test-info',$time - 5 * 60, $time, [true]); var_dump($data);
setOption其他选项:
/** * Set client option. * * @param string $name parameter name * @param string $value parameter value * @return bool: TRUE on success, FALSE on error. * @example * <pre> * $redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE); // don't serialize data * $redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP); // use built-in serialize/unserialize * $redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY); // use igBinary serialize/unserialize * $redis->setOption(Redis::OPT_PREFIX, 'myAppName:'); // use custom prefix on all keys * </pre> */ public function setOption( $name, $value ) {}
来自ansion博客
2018-02-27 10:49:10