选择合适的缓存机制

2023-12-20

我的设置:

  • 4 个网络服务器
  • 静态内容服务器(NFS挂载)
  • 2 个数据库服务器
  • 2 个“施展魔法”的服务器
  • 另外 8 台指定为多用途机器。

我正在为三种缓存机制编写一个包装器,以便可以以某种标准化的方式使用它们:文件系统、Memcached 和 APC。我正在尝试提供使用示例(以及在每个缓存中实际放入的内容)。

文件系统

处理我们生成并静态提供的内容。 RSS 提要、旧报告数据、用户特定页面等...这些都缓存到静态服务器。

内存缓存

PHP 会话数据、MySQL 查询结果,通常需要在我们的系统中可用。我们有 8 台机器可以包含在服务器池中。

APC

我不知道。这两个“神奇”服务器不属于任何分布式系统,因此它们似乎可以在 APC 中缓存查询结果并从那里工作。过去了,我什么也想不起来了。

查询缓存

鉴于我们 SQL 使用的性质,查询缓存reduces表现。我已经禁用了这个。

一般来说,什么类型的数据应该存储在哪里?这个设置还有意义吗?

APC数据缓存在分布式系统中是否有任何用处(我想不出)?

我是否缺少一些可以让事情变得更容易或更高效的东西?

编辑:我终于明白了帕斯卡在说什么。我一直在想,我只会将我的配置/任何内容的一部分移动到 APC,并且仍然从磁盘加载文件的其余部分。还有其他建议吗?


我在某些项目中使用相同类型的缓存机制;我们使用 APC + memcached 作为缓存系统。

在缓存数据方面,APC 和 memcached 之间有两/三个主要区别:

  • APC访问速度快一点(如果我没记错的话,比 memcached 快 5 倍),因为它只是本地的——即不涉及网络。
  • Using APC, your cache is duplicated on each server ; using memcached, there is no duplication accross servers
    • 这意味着memcached确保所有服务器具有相同版本的数据;而APC中存储的数据在每台服务器上可能不同


我们一般使用:

  • APC for data that has to be accessed very often, is quick to generate, and :
    • 要么不经常修改
    • 或者如果它在所有服务器上不相同也没关系
  • memcached for data that takes more time to generate, and/or is less used.
    • 或者对于修改必须立即可见的数据(即当对数据库进行写入时,缓存的条目也会重新生成)

例如,我们可以:

  • Use APC to store configuration variables :
    • 不要经常改变
    • 经常被访问
    • 很小
  • Use memcached for content of articles (for a CMS application, for example) :
    • 不是那么小,而且有很多,这意味着它可能需要比我们单独在一台服务器上更多的内存
    • 生成起来相当困难/沉重


一些旁注:

  • 如果多个服务器尝试写入通过 NFS 共享的同一个文件,可能会出现问题,因为 NFS 上没有锁定机制(就目前我所记得的)
  • 是的,APC 可用于缓存数据——但使用它的最重要原因是它的操作码缓存功能(可以节省PHP服务器上大量的CPU)
  • memcached 中的条目大小有限:无法存储大于 1M 的条目(我有时会遇到这个问题——很少,但一旦发生就不好了^^)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

选择合适的缓存机制 的相关文章

  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • PHP 如何判断用户是否按下了 Enter 键或 Submit 按钮?

    我遇到的问题是我在一个表单中有多个提交输入 每个提交输入都有不同的值 我更愿意将它们保留为提交 Whenever the user presses Enter it is as though the topmost submit input
  • 通过 Ajax 加载内容时,WORDPRESS 音频播放器未加载,MediaElement.js 未应用

    我正在创建一个 WordPress 主题 当我使用 ajax 加载内容时 它不会将 MediaElements js 应用于我的音频播放器 因此不会显示音频 我认为这是因为 MediaElement js 加载了 wp footer 并且此
  • 当数据验证失败时保留表单字段中的值

    我在弄清楚验证失败时如何保留用户数据时遇到问题 我对 PHP 有点陌生 所以我的逻辑可能会犯一些巨大的错误 目前 如果验证失败 所有字段都会被清除 并且 Post 数据也会消失 这是一些代码 假设用户输入无效电子邮件 我希望保留 名称 字段
  • 如何使用 phpunit 运行单个测试方法?

    我正在努力运行一个名为testSaveAndDrop在文件中escalation EscalationGroupTest php with phpunit 我尝试了以下组合 phpunit EscalationGroupTest escal
  • Yii 使用 ajax 进行分页

    我需要使用ajax启用分页 我的代码 控制器 更新内容ajax function actionIndex dataProvider new CActiveDataProvider News array pagination gt array
  • 如何在响应ajax codeigniter后停止执行其他控制器

    我想知道如何在响应输出 json 数据后停止执行函数和涉及的其他控制器 就我这里的情况而言 我只是打电话test 函数于dashboard控制器 In dashboard构造函数将执行MY Login library In MY Login
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 如何使用 php 下载/打印页面的特定部分

    我有一个 HTML 页面如下 Lorem Ipsum is simply dummy text of the printing and typesetting industry Lorem Ipsum has been the indust
  • 如何清除浏览器的缓存?

    当我在 Facebook 上玩应用程序且游戏未加载时 会出现提示 要求清除浏览器缓存 如何清除浏览器的缓存 似乎还没有人提到这一点 所以我想我应该插话一下 当你在 Chrome 中打开页面检查器时 你可以右键单击重新加载页面图标将与菜单一起
  • 扩展蓝图类?

    我想覆盖timestamps 函数中发现Blueprint班级 我怎样才能做到这一点 e g public function up Schema create users function Blueprint table table gt
  • 蛋糕控制台 2.2.1:烘焙错误

    运行 MAMP 的 OSX 机器 CakePHP 2 2 1 已正确安装和配置 这意味着当我浏览到 Index php 文件时 所有绿色条都显示出来 我已经完成了博客教程 并且正在开发我的第二个应用程序 其中脚手架已启动并运行 现在我第一次
  • 将“php”作为 shell 脚本执行时的自定义 php.ini 文件

    我在跑php作为 shell 脚本 我不确定 shell脚本 是否正确 该文件以 usr bin php 这很好用 但 MongoDB 类没有正确加载php ini文件 具有extension mongo so 未使用 我该如何使用它tha
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • 在 PHP 中撤销 Google 访问令牌

    正如标题所示 我想以编程方式撤销授予的访问令牌 即在 PHP 中 我发现这个他们的网站 https developers google com identity protocols OAuth2WebServer tokenrevoke 但
  • 在 apache docker 容器中运行虚拟主机

    我在同一个 apache 容器中有两个 php 应用程序 我试图在端口上运行其中一个应用程序 因为它需要通过根域而不是子文件夹进行访问 我想在端口 8060 上运行应用程序 我尝试使用 apache 虚拟主机执行此操作 但它不会加载页面 h
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一

随机推荐

  • 如何加载多对多 LINQ 查询?

    我有以下 非常标准的 表结构 Post lt gt PostTag lt gt Tag 假设我有以下记录 PostID Title 1 Foo 2 Bar 3 Baz TagID Name 1 Foo 2 Bar PostID TagID
  • 集成 ZF/Doctrine2:我将模型/实体和代理类放在哪里

    如果我确实将 Zend Framework 1 10 与 Doctrine 2 集成 我应该将 Doctrine 模型 实体和代理放在哪里 我想到了 application or the library目录 如果我把 library不过 它
  • 如何制作模拟二维网格的邻接矩阵

    基本上只是想知道在 python 中执行此操作的好方法是什么 我之前也在 python 中使用过一种暴力方式完成此操作 但它并不是直观的方法 所以如果有人能帮忙那就太好了 对于逐行网格 邻接矩阵如下所示 在一行内 相邻的数字形成两条平行的对
  • 错误:RPC 失败; curl 55 发送失败:连接被中止

    Enumerating objects 18 done Counting objects 100 18 18 done Delta compression using up to 4 threads Compressing objects
  • Android服务生命周期延续

    在主要活动中 我有广播接收器 待处理意图和警报管理器 它按照选定的时间触发 System currentTimeMillis smstimeinmilliseconds Intent intent new Intent this DBBro
  • 列表中成对的乘积之和

    这就是我遇到的问题 给定一个列表 xList 9 13 10 5 3 我想计算每个元素乘以后续元素的总和 sum 9 13 9 10 9 5 9 3 sum 13 10 13 5 13 3 sum 10 5 10 3 sum 5 3 在这种
  • 为Spring Kafka设置authorizationExceptionRetryInterval

    任何人都知道如何设置新属性 authorizationExceptionRetryInterval 而无需手动创建 ConcurrentKafkaListenerContainerFactory 我本来想说 Component class
  • 无法捕获的异常,第 2 部分

    Update 我已在 Microsoft Connect 上提交了错误报告 https connect microsoft com VisualStudio feedback details 568271 debugger halting
  • 在 XAML 中设置多个枚举标志

    有没有办法在 XAML 中设置多个枚举标志 传统上在代码隐藏中用 分隔 我尝试过类似的事情
  • 写入/读取 FIFO 文件 - linux

    我一直在尝试了解 FIFO 并提出了一个简单的服务器和客户端程序 我不想做任何花哨的事情 只是让一个进程扮演 服务器 的角色 这个进程将 监听 另一个进程传递的任何消息 客户端 这是我写的 server c include
  • 在“CaseDetailProps”类型上找不到带有“string”类型参数的索引签名

    例如 type CaseDetailProps id number apply degree string year number const caseData CaseDetailProps id 1 apply degree b yea
  • 使用 CALayers 的圆角 UIView - 只有一些角 - 如何?

    在我的应用程序中 有四个按钮 名称如下 左上方 左下方 右上 右下 按钮上方有一个图像视图 或 UIView 现在 假设用户点击左上角按钮 上面的图像 视图应在该特定角处进行圆角处理 我在将圆角应用于 UIView 时遇到一些困难 现在我正
  • 发布/订阅同一服务器集合的多个子集

    编辑 这个问题 一些答案和一些评论包含很多错误信息 看Meteor 收藏 出版物和订阅如何运作 https stackoverflow com a 21853298 1269037为了准确理解发布和订阅同一服务器集合的多个子集 如何将服务器
  • 如何将 ThreeJS Collada 加载器与 TypeScript / Angular CLI 结合使用?

    我已经安装了三个 node modules three 我已将 Collada 加载程序安装在 node modules three collada loader 这些类型似乎已经包括 Collada 加载程序的类型 node module
  • 获取由另一个函数调用的所有函数的列表

    在JavaScript中 是否可以获得由另一个函数调用的所有函数的列表 我想创建一个函数依赖关系树 以分析脚本中的函数如何相互关联 以及哪些函数需要哪些其他函数 例如 getAllCalledFunctions funcA this sho
  • 如何使带有自制库的 Xcode 项目可移植?

    我已经使用 Brew 在我的 mac 上安装了 FreeType 我的 mac 上的代码工作正常 但是当我尝试在其他 mac 上运行该项目时 我收到下面提到的链接错误 dyld Library not loaded usr local op
  • 在管道中的分类器之后使用指标

    我继续调查管道 我的目标是仅通过管道执行机器学习的每一步 将我的管道与其他用例相适应将会更加灵活和容易 所以我做什么 第 1 步 填充 NaN 值 第 2 步 将分类值转换为数字 第三步 分类器 第四步 网格搜索 第5步 添加指标 失败 这
  • 以编程方式将可拖动项移动到某个位置

    假设有一个只能在一个轴上拖动的可拖动对象 有没有办法以编程方式移动它 要么开始 要么增量 当然我可以去改变它的CSSleft属性 但这不会触发 jQuery 提供的拖动事件 我本来期待找到一个dragBy x y 可拖动的方法 这是示例 h
  • 有人可以解释一下这个 C++ 联合示例吗?

    我在 cppreference com 上找到了这段代码 这是我见过的最奇怪的 C 我有几个问题 union S std string str std vector
  • 选择合适的缓存机制

    我的设置 4 个网络服务器 静态内容服务器 NFS挂载 2 个数据库服务器 2 个 施展魔法 的服务器 另外 8 台指定为多用途机器 我正在为三种缓存机制编写一个包装器 以便可以以某种标准化的方式使用它们 文件系统 Memcached 和