首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据缓存会造成干扰吗?

数据缓存会造成干扰吗?
EN

Stack Overflow用户
提问于 2011-02-06 15:04:38
回答 2查看 75关注 0票数 1

我正在为我的PHP站点编写一个新引擎,该引擎具有数据缓存功能。现在我想知道这些脚本之间是否可能发生干扰。请考虑以下示例:

假设很多用户访问与摄影相关的网站,其中两人几乎在同一时间运行两个脚本。

脚本1将名为“FooBar”的用户和他的所有照片从数据库中删除。

Script2显示一个nr 12345照片(由FooBar制作)。

  1. (脚本1)检查用户'FooBar‘是否存在。将其ID存储在变量$id中。
  2. (脚本2)检查照片nr 12345是否存在。变量$owner中的商店所有者ID。
  3. (脚本1) query("DELETE FROM users WHERE id='$id' ");
  4. (脚本2) query("SELECT name FROM users WHERE id='$owner' "); //error这里是
  5. (脚本1) query("DELETE FROM photos WHERE owner='$id' ");

正如我们所看到的,脚本2检测到照片存在,但它的所有者已经被移除。

问题是:是否按顺序处理脚本(因此所提供的场景是不可能的)?如果没有,在一个脚本中发送多个查询时,我能做些什么来防止这样的错误呢?

非常感谢。

谢谢你的回答。呈现的场景只是一个例子,我知道这可以用更好的方式完成。因此,在创建一个大型网站时,我必须不断地意识到,数据可以在运行时进行更改。

但是这样,我就不能信任php中存储在变量中的任何信息。你如何处理这类问题?更新或获取一个查询中的所有数据?

EN

回答 2

Stack Overflow用户

发布于 2011-02-06 15:19:08

提出的方案是可能的。我想说的唯一可以做的就是为这种情况编写一个错误代码:如您所示,查询4不返回有效的所有者。现在您可以做几件事情,其中就有几个例子:

  • 返回组合查询中的所有者名称,以便在找到图片所有者时至少可以显示该名称(在第2点中)。如果稍后您想显示更多,您只需要返回,所有者不再兴奋(不再)。这就是所发生的事情(它在加载期间被删除),所以即使对用户来说有点奇怪,他也必须处理它:)
  • 只需在第4点上显示错误,有点像前面示例的第二部分。你很快就得到了结果,但后来就消失了。因此,您返回“无法加载用户”或类似的内容。
票数 1
EN

Stack Overflow用户

发布于 2011-02-06 16:04:04

事实上,种族状况是有可能的。

我会说,在删除脚本中删除用户之前的照片,我觉得很奇怪。如果在用户删除之后,但是在删除照片之前,有什么东西掉了出来,那么db仍然有他的孤儿照片。通常,事务(使用支持事务的存储引擎,如InnoDB)可以缓解此问题。

至于竞赛条件本身,我认为有一些技术可以使用行锁定来防止其他进程同时访问它们。

如果我有机会做一些研究,我会填写更多的细节。到目前为止,我对‘'mysql行锁定’的简短研究表明,一些引擎实际上隐式地锁定了受事务影响的任何行。但我承认在那里没有直接的经验。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4914064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档