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

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

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

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

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

附写入和读取结果:

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

有两种方法修改OPT_SERIALIZER选项

  • 配置文件修改

修改config/autoload/redis.php

1
2
3
4
5
6
7
return [
'default' => [
'options' => [ // 增加这个
Redis::OPT_SERIALIZER => Redis::SERIALIZER_JSON,
],
],
];
  • 写入之前设置
1
2
$redis->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_JSON); // 设置OPT_SERIALIZER
$redis->set($key, $value);

评论区