HyperF中Redis::OPT_SERIALIZER的取值和区别
in php with 0 comment

HyperF中Redis::OPT_SERIALIZER的取值和区别

in php with 0 comment

今天发现在HyperF写入和读取redis的value类型不一致,无论任何类型读取都变成了string。

查看文档发现可以设置OPT_SERIALIZER选项来选择写入时的序列化方式(Hyperf/Redis/Redis的默认设置是SERIALIZER_NONE)。

于是试了下所有可设置的OPT_SERIALIZER值,其中HyperF的docker容器里默认不支持SERIALIZER_IGBINARYSERIALIZER_MSGPACK

如果有需要可以参考这篇文章来重新编译phpredis拓展:Undefined class constant 'SERIALIZER_IGBINARY' 解决方法

附写入和读取结果:

1.png

如表格所述,选择SERIALIZER_JSON可以解决现在的问题。

有两种方法修改OPT_SERIALIZER选项

修改config/autoload/redis.php

return [
    'default' => [
        'options' => [ // 增加这个
            Redis::OPT_SERIALIZER => Redis::SERIALIZER_JSON,
        ],
    ],
];
$redis->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_JSON); // 设置OPT_SERIALIZER
$redis->set($key, $value);
Comments are closed.