如何在MySQL中使用独占锁?

时间:2013-05-14 11:49:37

标签: mysql session locking

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

  1. 获取SID + NS的独家锁定
  2. 阅读SID + NS的数据
  3. ...请求采取行动......
  4. 将SID + NS的数据写回db
  5. 解除锁定
  6. SID :会话ID - NS :名称空间

    现在出现的问题是:

    如何在MySQL中使用独占锁?

    在回答这个问题之前,需要记住一些问题:

    1. 每个会话中都有任意数量的命名空间。
    2. 一个请求可能需要保存多个ex-locks(一个请求可能需要一次处理多个命名空间)。
    3. 需要使用MySQL的内部机制来实现锁定。实现我自己的应用程序级ex-locks可能非常简单。但是你必须实现队列和信号量来模仿MySQL给我们的相同行为,这使得它真的很难。我所说的是,我希望我的代码可以在大多数机器上运行而不需要经过大量的改动,而且我不愿意实施轮询系统,因为它浪费了系统的资源和时间。如果它是使用MySQL锁实现的,当发生冲突时,代码将冻结,而不会浪费CPU时间或任何资源。
    4. 请记住,SID + NS并不总是存在记录。有些第一个计时器请求必须先插入SID + NS的记录才能锁定它。
    5. 重要提示:我的问题不是如何使用MySQL锁。我已经阅读了有关如何操作的所有MySQL文档。我的问题来自一些特定的情况,在我看来,它无法实现。这就是我在这里问过的原因,以确定我是否遗漏了任何东西。

      PS。这是an open source project

1 个答案:

答案 0 :(得分:0)

大家都知道,我设法在上述项目中实现了这一点。所以,如果有人感兴趣,他/她可以在那里找到它。