0

我正在尝试在 PHP 中使用 MySQL 实现我自己的会话处理程序版本。我的版本与现有版本(如 Zend 的)不同,因为我的版本是命名空间的,每个命名空间都是单独存储和锁定的。这是应该在代码中实现的场景:

  1. 获取 SID+NS 的独占锁
  2. 读取 SID+NS 的数据
  3. ...请求顺其自然...
  4. 将 SID+NS 的数据写回 db
  5. 释放锁

SID:会话 ID - NS:命名空间

现在出现的问题是:

如何在 MySQL 中使用独占锁?

在回答这个问题之前,有许多问题需要牢记:

  1. 每个会话中有任意数量的命名空间。
  2. 一个请求可能需要持有多个前锁(一个请求可能需要同时处理多个命名空间)。
  3. 锁需要使用 MySQL 的内部机制来实现。实现我自己的应用程序级前锁可能非常简单。但是你必须实现队列和信号量来模仿 MySQL 给我们的相同行为,这使得它变得非常困难。我要说的是,我希望我的代码能够在大多数机器上运行而无需进行大量更改,并且我不愿意实现轮询系统,因为它浪费了系统的资源和时间。如果它是使用 MySQL 锁实现的,当发生冲突时,代码将冻结,而不会浪费 CPU 时间或任何资源。
  4. 请记住,并非总是存在 SID+NS 的记录。有第一个计时器请求必须先为 SID+NS 插入一条记录,然后才能锁定它。

重要提示:我的问题不是一般如何使用 MySQL 锁。我已经阅读了有关如何执行此操作的所有 MySQL 文档。我的问题带有一些在我看来无法实施的特定场景。这就是为什么我在这里问它,以确保我是否缺少任何东西。

PS。这是一个开源项目

4

1 回答 1

0

众所周知,我设法在上述项目中实现了这一点。因此,如果有人感兴趣,他/她可以在那里找到。

于 2014-02-11T19:05:27.053 回答