如何在 Laravel 中缓存 BLOB 类型

Posted

技术标签:

【中文标题】如何在 Laravel 中缓存 BLOB 类型【英文标题】:How to cache BLOB type in Laravel 【发布时间】:2021-06-28 04:43:33 【问题描述】:

大家好,

有没有办法在 Laravel 中临时缓存 BLOB 类型?

场景: 我将暂时缓存一些大小为 2048KB 的数据MEDIUMBLOB。 这些数据实际上是一个 16MB 的大型单个文件的一部分。 缓存所有部分后,将它们组合成一个文件,然后从缓存中删除。

每个单独部分的内容由file_get_contents函数给出。

我已经在使用mysql 进行此操作。 (但是,有很多查询并且需要时间来完成。)

有没有更好的方法将MEDIUMBLOB数据临时存储在缓存存储中?

我在 Laravel 中遇到过 RedisCache,但我不确定它们是否支持 MEDIUMBLOB

【问题讨论】:

是的,redis 支持这个用例,但是你的问题听起来像 XY problem 可能有助于提供更多上下文,因为我怀疑有更好的方法来做你需要的事情 @apokryfos 感谢您的回答。那么我可以信任 Redis 来处理这些数据吗? Redis中存储数据的数据类型是什么? 这将是一个简单的键值对,基本上 Cache::put('key', $data); 任何缓存驱动程序都应该工作,而不仅仅是 redis。然后,当您想删除数据时,您可以调用Cache::forget('key')(或按照here 的说明设置过期时间,以免担心删除项目) @apokryfos 你救了我!据我了解,数据类型是什么并不重要。 file_get_contents 函数将内容作为字符串获取,对吗?这才是重点。非常感谢你帮助我。我不确定这个问题是否有用(如果没有,我会删除它!)。 【参考方案1】:

这里是重点。最后,BLOB 只是一串字节。与正式字符串类型的主要区别在于 BLOB 没有任何类型的编码或排序规则与之相关联。这是一种二进制字符串,是“通用数据”的另一种说法。 file_get_contents 通常也会返回这种“通用数据”。

Laravel 的缓存是这样构建的,因此它没有任何特定的数据类型与之关联。它只是键/值对的存储,键必须是 ascii 字符串,而值可以是任何东西 Laravel 在进入缓存之前将它们序列化,因此基本上任何可以在 php 中表示为变量并且可序列化的东西都可以被缓存。

【讨论】:

很好解释。可以将Binary data 处理为简单的string

以上是关于如何在 Laravel 中缓存 BLOB 类型的主要内容,如果未能解决你的问题,请参考以下文章

前端如何缓存blob文件之图片

如何阻止 Laravel 5 缓存配置?

如何使用命令行清除 laravel 中的缓存?

Laravel 视图缓存是如何工作的?

Azure Blob存储更改缓存时间

如何在 php 中显示 blob 类型的图像?