如何在 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 中遇到过 Redis
和 Cache
,但我不确定它们是否支持 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 类型的主要内容,如果未能解决你的问题,请参考以下文章