今天发现在HyperF写入和读取redis的value类型不一致,无论任何类型读取都变成了string。
查看文档发现可以设置OPT_SERIALIZER
选项来选择写入时的序列化方式(Hyperf/Redis/Redis
的默认设置是SERIALIZER_NONE
)。
于是试了下所有可设置的OPT_SERIALIZER值,其中HyperF的docker容器里默认不支持SERIALIZER_IGBINARY
和SERIALIZER_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); $redis->set($key, $value);
|