Page

[Redis]OPT_SERIALIZER,SERIALIZER_PHP的作用

667Anson18-02-27


最近吃了一次不看源码亏,首先我引入了别人写的phpredis封装类,由于没有看到源码中的setOption项,导致我用原生redis查看到的总是经过serialize序列化的值,最后才发现是因为redis封装类中设置了setOption(\Redis::OPT_SERIALIZER,\Redis::SERIALIZER_PHP)选项。

最近吃了一次不看源码亏,首先我引入了别人写的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博客 

http://www.tp0.top

2018-02-27 10:49:10