You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么PHP的shmop扩展打开大内存块速度慢?有没有更快的RAM存储方案?

shmop大内存块打开性能问题解答及替代方案

shmop_open打开大内存块耗时高的原因

你观测到的耗时和RAM本身的读写速度无关,是shmop扩展的底层实现逻辑导致的:

  • 当shmop_open用于创建新共享内存块时,PHP会对申请到的整块内存做初始化清零操作,避免脏数据残留,操作耗时和内存块大小正相关,块越大耗时越高
  • 就算是打开已存在的共享内存块,shmop每次都会将完整的内存块映射到当前PHP进程的地址空间,块越大映射的内核态开销越高,也会导致耗时上涨

适配需求的高性能PHP内存存储替代方案

你的需求是高频存取JSON数据替代数据库读写,不需要OPCode缓存,可以用以下方案:

  • APCu扩展:这是目前最适配需求的方案,它是专门为PHP设计的用户态共享内存缓存扩展,不依赖OPCode缓存功能,直接支持将字符串、数组等变量存储在共享内存中,存取50KB大小的JSON数据耗时可稳定在0.1ms级别,性能远高于原生shmop操作,使用apcu_store()、apcu_fetch()即可完成读写,开发成本极低。
  • 本地Redis实例:如果需要数据持久化、跨进程/跨语言共享等额外能力,可以部署本地Redis实例,走Unix域套接字通信时读写50KB数据的耗时稳定在1ms以内,同样满足高频访问需求。
  • shmop使用优化:如果要继续使用shmop,可提前通过常驻脚本预创建所有需要的大内存块,业务侧仅执行打开已有块的操作,同时可将大内存块拆分为多个10KB以内的小块存储,可将单次打开耗时控制在1ms以内。

内容的提问来源于stack exchange,提问作者Erfan Mola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:15:02