在没有php序列化的情况下,如何使用laravel将原始json字符串存储在redis缓存中?

在没有php序列化的情况下,如何使用laravel将原始json字符串存储在redis缓存中?,laravel,Laravel,当我缓存json字符串时,比如socache()->rememberForever('globals',fn()=>json_encode(['foo'=>'bar']) 缓存中存储的值实际上是“s:13:\”{\“foo\”:“bar\”}\;“,而不是“{\“foo\”:“bar\”}” 有没有一种不用php序列化就可以存储字符串的方法?您应该能够使用Cache::forever函数存储字符串。来自Laravel文档: 永久方法可用于将项目永久存储在缓存中。由于这些项目不会过期,因此必须使用

当我缓存json字符串时,比如so
cache()->rememberForever('globals',fn()=>json_encode(['foo'=>'bar'])

缓存中存储的值实际上是
“s:13:\”{\“foo\”:“bar\”}\;“
,而不是
“{\“foo\”:“bar\”}”


有没有一种不用php序列化就可以存储字符串的方法?

您应该能够使用
Cache::forever
函数存储字符串。来自Laravel文档:

永久方法可用于将项目永久存储在缓存中。由于这些项目不会过期,因此必须使用“忘记”方法手动将其从缓存中删除:

缓存::永久('key','value')

鉴于此,我将您的代码更改为以下内容:

cache()->forever('globals', json_encode(['foo' => 'bar']));

您需要使用真正的缓存存储,如Redis::put(…)。cache facade有一种非常有用的方法来获取缓存中的复杂数据。例如,您可以通过该外观缓存模型或关联数组,而不必担心它在幕后如何被字符串化。但是,如果您不希望这种帮助器/处理来缓存和恢复变量,那么直接使用缓存存储。

问题在于
cache()->forever()
这就是您不需要导入缓存的原因facad是
cache::forever()
的缩写,而laravel出于某种原因序列化了字符串