缓存 302MB 对象

2023-12-06

我有一个 302MB 的对象(实际上是一个对象数组)。当我尝试使用 memcached 缓存它时,无论我给 memcached 多少内存,它都不起作用,显然是因为 memcached 对它可以缓存的对象有 1MB 的限制。 (我对最后一部分可能是错的。我找不到很好的文档。)

关于如何缓存这个东西有什么建议吗?我在 Linux 上使用 PHP/symfony。


Quoting

15.5.5.4:可以在内存缓存中存储的对象的最大大小是多少?是否可以配置?

默认最大对象大小为 1MB。在 memcached 1.4.2 及更高版本中,您可以使用 -I 命令行选项更改对象的最大大小。

对于在此之前的版本,要增加此大小,您必须重新编译 memcached。您可以修改源代码内的slabs.c 文件中POWER_BLOCK 的值。

在 memcached 1.4.2 及更高版本中,您可以使用 -I 命令行选项配置支持的最大对象大小。例如,要将最大对象大小增加到 5MB:

 $ memcached -I 5m

然而,即使增加内存,这也不是一个好的选择。更好的想法是将对象分成更小的部分,然后缓存它的各个部分。

Quoting 为什么项目的大小限制为 1 MB?

简短的回答:因为内存分配器的算法是如何工作的。

长答案:Memcached 的内存存储引擎(将来将是可插拔/调整的......),使用平板方法进行内存管理。内存被分成不同大小的板块,从最小数量开始,按阶乘递增到最大可能值。

假设最小值为 400 字节,最大值为 1 兆字节,阶乘为 1.20:

板 1 - 400 字节 板 2 - 480 字节 板 3 - 576 字节 ... 等等。

板越大,它与前一块板之间的间隙就越大。因此最大值越大,内存存储的效率越低。 Memcached 还必须为每个存在的slab 预先分配一些内存,因此设置较小的阶乘和较大的最大值将需要更多的开销。

您不想这样做还有其他原因......如果我们正在谈论一个网页并且您尝试存储/加载那么大的值,那么您可能做错了什么。在该大小下,将数据结构加载和解压到内存中将花费大量时间,并且您的站点可能不会很好地运行。

如果您确实想要存储大于 1MB 的项目,您可以使用编辑过的slabs.c:POWER_BLOCK 值重新编译memcached,或者使用低效的malloc/free 后端。其他建议包括数据库、MogileFS 等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

缓存 302MB 对象 的相关文章

  • 如何从 PHP 的 sha256 加密迁移到 bcrypt?

    登录 rows sql gt fetch PDO FETCH ASSOC us id rows id us pass rows password us salt rows password salt status rows attempt
  • 阻止 Google Chrome 发送 Sec-Fetch 标头

    我想在我的 Web API 2 net framework 4 6 2 应用程序 中缓存静态内容 index html 我编写了 OWIN 中间件 添加了一个cache control响应的标头 允许从浏览器缓存中检索后续请求 OWIN 上
  • 开发中的 Laravel 和视图缓存——无法立即看到变化

    我和一些朋友决定开始一个项目 我们偶然发现了 Laravel 并认为它可能是一个很好的工具 我们开始在本地使用它来开发一些页面 并注意到一些奇怪的事情 当我们用不同的信息更新视图时 大约需要 5 到 10 分钟视图信息才会发生变化 这就像
  • 无法使用 javascript 建立与安全 Websocket 服务器的连接

    我的开发环境是这样的 操作系统 微软Windows 10 PHP 框架 Laravel 8 0 PHP 版本 7 4 Websocket 服务器 cboden ratchet 0 4 3 WAMP 服务器 3 2 0 Apache 2 4
  • laravel/lumen-installer 安装失败:guzzlehttp/guzzle 锁定在 6.3.0

    我正在尝试通过命令安装 Lumencomposer global require laravel lumen installer 但在终端上抛出以下错误 Changed current directory to home lykos con
  • Google BigQuery 与 PHP 集成

    我需要帮助将 google bigquery 代码集成到 PHP 中 所以我可以从 php 代码本身执行查询和其他类型的操作 需要您的帮助并建议我一些工作示例链接 提前致谢 这是一段代码 正确地创建一个Google Client using
  • Azure 函数和缓存

    我们计划开发一个 Azure 函数 其输入触发器是服务总线消息 输出是 blob 存储 服务总线消息将包含图像 url 该函数会将图像大小调整为预定义的分辨率 并将上传到 azure blob 存储 图像大小应调整到的分辨率存储在数据库中
  • 合并数组而不丢失键索引

    我有两个数组 Menu Navigation var array public nav top array 100 gt Dashboard 200 gt Sell 300 gt Products 400 gt History 500 gt
  • wkhtmltopdf 与 javascript-delay 不起作用

    使用下面的代码创建的 pdf 尚未完成 javascript 的渲染 因此 javascript 在一半的表格上执行 假设有 100 个表格 则有时完成 50 个表格 其他时候完成 52 54 个表格等 我正在使用旗帜 javascript
  • 如何通过传递国家代码或国家名称在php中获取时区

    我使用一些 api 有国家代码和国家名称 有什么方法可以在 php ini 中获取给定国家代码和国家名称的时区 我有这样的数据 address Object city continent Asia continent code AS cou
  • 干预/图像上传错误{{图像源不可读}}

    我正在尝试添加个人资料图片上传拉拉维尔 5 1 我用的是Intervention Image打包但当我尝试上传图像时出现此错误 AbstractDecoder php 第 302 行中的 NotReadableException 图像源不可
  • Netbeans (PHP) 中的变量类型提示

    只是好奇 Netbeans 中是否有一种方法可以为常规变量提供类型提示 以便智能感知能够识别它 我知道你可以对类属性 函数参数 返回类型等执行此操作 但我不知道如何对常规变量执行此操作 当您有一个可以返回不同对象类型 如服务定位器 的方法时
  • Laravel 规则和正则表达式 (OR) 运算符的问题

    我的 Laravel 规则和正则表达式操作有一个小问题 基本上 规则是一个数组 如下所示 room gt required alpha num min 2 max 10 我遇到的问题是使用正则表达式和 时 或 运算符 例如 cid gt r
  • 如何使用多个Auth组件?

    我使用用户模型将身份验证组件配置为 管理页面 但现在 我还想为客户端创建 配置身份验证 我尝试 重写 inialize This is in my ClientsController php public function initiali
  • PHP 将日期与今天的日期进行比较

    我正在尝试采用以下格式的信用卡到期日期mm yy并查看该日期是否已过 以便我知道信用卡是否已过期 如果已经过期 则一类expired被插入到 tr 我的代码结果检查了 05 16 的样本日期 并且脚本显示该卡尚未过期 而显然该卡已经使用了一
  • 如何防止显示菱形问号符号,即使使用 mb_substr 和 utf-8

    我读过其他一些问题 尝试了答案 但最终没有结果 我得到的是例如这个 我无法删除那个奇怪的问号 我所做的就是获取 RSS feed 的内容 该内容也被编码为内容使用希腊语 有没有什么办法解决这一问题 div div
  • 重复密码在 Yii2 中不起作用

    我在模型中编写的规则如下 public password repeat inheritdoc public function rules return password required password string min gt 6 p
  • 完整日历 - 向事件对象添加额外属性

    可能是由于我缺乏理解 但我使用 PHP 返回 JSON 字符串来带回事件数据
  • 单个返回语句与多个返回语句? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 url 中传递百分号 (%) 并使用 php 获取其准确值

    我正在尝试在 url 中传递百分号 例如 B6011000995504101 SB 但当我回声时 它又回来了 011000995504101 SB 我想要与在 URL 中传递的值完全相同的值 我尝试使用 urlencode 函数 但它给了我

随机推荐