福州网站建设>网站新闻>thinkphp6专区

tp6 redis缓存一定要序列化吗

发布日期:2022-11-25浏览次数:444 来源:福州网站建设 标签: TP6 缓存 redis

我们有个项目,使用的是TP6,调用的对方redis缓存时,只要碰到带英文字符的,就会报serialize error at offset...

发现redis中的英文字符串并没有进行序列化,而thinkphp使用cache::store()->get('xxx')取值时,发现必须序列化,导致了这个报错,请问,是否可以取消TP6针对redis缓存的序列化和反序列化的步骤

以上是由福州网站建设的小编为你分享了"tp6 redis缓存一定要序列化吗"文章,如果你在这方面有什么问题,随时联系我们

网友评论

  • 熊猫烧香 11月25日

    看了下他的源码,$serialize = $this->options['serialize'][0] ?? "serialize";意思就是如果配置文件里不配置serialize参数,默认就用serialize序列化,看到上面回答里有用trim,trim在能取到redis值的时候没问题,但是当redis的值不存在,trim就会报一个参数为null的错误,所以要找一个可以兼容null值的函数,目前我找到的是strval,cache.php配置文件里改成:'serialize' => ['strval','strval']

  • huguo0314 2021年07月23日

    TP6的缓存配置中有一个 serialize 把这个配置改一下就可以了 .

  • 熊猫烧香 11月24日

    回复 huguo0314 : 'serialize' => ['trim', 'trim']; 这样会有个问题,如果redis没有这个值,会报一个trim参数为null的错误,所以这就是tp6的一个bug

  • 意志与灵魂 2021年07月29日

    哦,好的,谢谢,我试一下

  • huguo0314 2021年07月27日

    回复 意志与灵魂 :
    看对方redis缓存的数据结构,如果是json格式,可以'serialize' => ['json_encode', 'json_decode'];
    如果是纯字符串的话,也可以什么都不做'serialize' => ['trim', 'trim']; 总之'serialize'为空的话,框架就默认序列化了。

  • 意志与灵魂 2021年07月27日

    今天才登上来看到,谢谢你的答复,请问是这样子设置吗?我这样设置好像没有反应,还是要序列化

    'redis_pand' => [ // Pandora
    'type' => 'redis',
    'host' => '127.0.0.1',
    'select' => '1',
    'port' => '7008',
    'serialize' => []
    ],

thinkphp6专区有关的文章
与标签 TP6 缓存 redis 有关的文章
如果您有什么问题,欢迎咨询我们客服! 点击QQ咨询