草庐IT

php - 寻找API优化建议

coder 2023-07-18 原文

过去,我问过几个关于如何创建自己的 API 以允许外部站点访问我存储在数据库中的数据库的问题。这个特殊的问题是我正在寻求有关如何优化外部站点的 API 访问以帮助降低本地服务器负载的建议。首先,API 的设置方式是使用 MySQL 保存数据,使用 php 提供数据。 API 本身由 URL 调用,URL 中包含 API key 。例如:

http://mysite.com/get_listings.php?key=somekey

然后我的脚本执行上面的操作需要执行的操作,然后以 json 格式返回结果。目前,该 API 每月服务 10-15k 个独立调用,我正在添加另一组站点,这些站点将在 API 现在服务的基础上每月带来另外 20-30k 个独立调用。没有进行缓存,它只是通过 php 脚本直接调用我的 API,并且每次调用都会查询 MySQL 数据库。它返回的数据类型基本上是故事和个人资料信息,调用的是最新故事、故事作者的个人资料和故事详细信息。

除了正常的 php 代码优化和优化 MySQL 查询和索引之外,您能否建议任何其他优化技术来帮助降低服务器负载并仍然快速地为外部站点提供 API?我了解外部站点本身也应该在其端进行某种缓存。但是就我而言,您是否建议缓存数据库中的结果然后为缓存提供服务?如果是这样,使用内存缓存会是一个不错的选择吗?或者可能将 json 结果存储在 redis 中?或者也许一个简单的文件缓存系统可以工作?除了缓存还有什么?显然,服务器硬件会有所不同,但不在本文讨论范围之内。不过我要说的是,我将获得一台专门用于执行此操作的全新服务器。

如果有帮助的话,我确实有 root 权限来安装其他软件。

最佳答案

除非您有能力使用额外的只读节点扩展 mysql,否则您应该真正开始使用 Redis 或 Memcached。 Redis 可能更擅长处理复杂的数据类型。这是一个食谱。

  1. https://github.com/nicolasff/phpredis - 安装它,它将帮助您从 PHP 无缝连接 Redis。
  2. 按某些键对您的请求进行分类。例如 get_listings.php?key=somekey 可能会使用 $redis->hget('listings',$somekey);
  3. 以序列化或 JSON 格式存储结果。
  4. 数据库更新时,一定要销毁或更新Redis中的相关索引。如果您使用带有 MVC 的后端,那么模型行为处理程序可以为您完成。例如,当发布新评论时,更新 Redis 排序列表。
  5. 您可以混合搭配不同的结构。例如从排序列表中获取键,然后从哈希中提取实际数据。

如果您使用 redis 进行永久存储,请确保您的 PHP 知道如何清理它。根据我的经验,它非常有弹性,尽管我仍然将数据存储在 MySQL 中。

Redis 懂了就好computation complexities .

关于php - 寻找API优化建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392599/

有关php - 寻找API优化建议的更多相关文章

  1. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  4. ruby-on-rails - Mandrill API 模板 - 2

    我正在使用Mandrill的RubyAPIGem并使用以下简单的测试模板:testastic按照Heroku指南中的示例,我有以下Ruby代码:require'mandrill'm=Mandrill::API.newrendered=m.templates.render'test-template',[{:header=>'someheadertext',:main_section=>'Themaincontentblock',:footer=>'asdf'}]mail(:to=>"JaysonLane",:subject=>"TestEmail")do|format|format.h

  5. ruby-on-rails - 在 Ruby (on Rails) 中使用 imgur API 获取图像 - 2

    我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path

  6. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  7. ruby-on-rails - 使用 HTTParty 的非常基本的 Rails 4.1 API 调用 - 2

    Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"

  8. ruby-on-rails - 是否使用 API - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我的公司有一个巨大的数据库,该数据库接收来自多个来源的(许多)事件,用于监控和报告目的。到目前为止,数据中的每个新仪表板或图形都是一个新的Rails应用程序,在巨大的数据库中有额外的表,并且可以完全访问数据库内容。最近,有一个想法让外部(不是我们公司,而是姊妹公司)客户访问我们的数据,并且决定我们应该公开一个只读的RESTfulAPI来查询我们的数据。我的观点是-我们是否也应该为我们的自己

  9. ruby - Ruby 中的必应搜索 API - 2

    我读了"BingSearchAPI-QuickStart"但我不知道如何在Ruby中发出这个http请求(Weary)如何在Ruby中翻译“Stream_context_create()”?这是什么意思?"BingSearchAPI-QuickStart"我想使用RubySDK,但我发现那些已被弃用前(Rbing)https://github.com/mikedemers/rbing您知道Bing搜索API的最新包装器(仅限Web的结果)吗? 最佳答案 好吧,经过一个小时的挫折,我想出了一个办法来做到这一点。这段代码很糟糕,因为它是

  10. ruby-on-rails - 我需要从 HTML 转到 markdown,有什么建议吗? - 2

    我正在使用Maruku,将Markdown(超集)转换为HTML,你知道我该怎么做才能从HTML转换为Markdown吗? 最佳答案 Google发现了一个名为reverse_markdown的ruby​​脚本.它似乎可以满足您的需求。 关于ruby-on-rails-我需要从HTML转到markdown,有什么建议吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/175162

随机推荐