福州網站建設>網站新聞>thinkphp6專區

        tp6 redis緩存一定要序列化嗎

        發布日期:2022-11-25瀏覽次數:566 來源:福州網站建設 標簽: 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咨詢