我当前的设置是一个InnoDB表,它保存我的应用程序所需的计数器。每行由一个键标识,并具有一个计数器值(使用的最后一个值)。
PHP应用程序正在使用它,它需要不同实体的唯一标识符。数字上必须没有重复,并且由于计数器本身可以重置,因此无法对结束列进行约束。
在事务结束时并不总是检索该数字,并且使用select for update或甚至更新并选择,资源将被锁定,直到提交事务为止。有些事务非常繁重(此时重构不是一个选项),并且他们正在创建锁定等待超时以到达此资源。
使用MySQL只能实现此计数器的最佳解决方案。
答案 0 :(得分:1)
在将我的计数器移到Redis之前,我使用了这个解决方案一段时间。
UPDATE `counters` SET `children_count` = (SELECT (@a:= `children_count` + 1))
WHERE `node_id` = 1'
然后你用
获得值SELECT @a AS `children_count`
该值在当前会话中可用。