2

我相信PHP,每当用户向后端PHP页面发送请求时,都会启动一对一的通信,即根据用户的请求创建并执行该页面的新实例。

我的问题,如果每次创建一个新实例,我想创建一个 PHP 脚本,它在所有实例之间共享,

例如:我想在该脚本中存储几百个随机数(让我们将其命名为 pool.php - 一个静态池),并且每次向后端页面(比如说 BE.php)发出请求时,BE.php每次请求 pool.php 都返回一个唯一的变量,一旦所有的变量都用完了,我会在 pool.php 中放一个逻辑来创建新的变量集

如果我的问题不清楚,请告诉我

4

3 回答 3

1

你可以用 MySQL 解决这个问题并锁定有问题的表。将此变量池保存在一个单独的表中,然后使用 SQL 表级锁来推迟其他请求,直到当前请求完成,方法是:

SELECT GET_LOCK( 'my_lock', 10 ) AS success

确保检查查询是否返回 1,这意味着您现在有一个锁。如果没有,您的查询在等待锁定时超时。

然后执行您的普通查询,例如检查是否存在未占用的变量。如果是这样,请通过更新或其他方式占用它。

然后你释放锁,使用:

DO RELEASE_LOCK( 'my_lock' )

数字 10 是每个请求在失败前等待的超时时间。

于 2013-05-12T06:42:15.417 回答
1

Tarun,您确实知道数据库有一些称为AUTO_INCREMENT字段的东西,可primary keys用于您的用户评论。每次添加新评论时,数据库服务器都会增加该字段,并且您会unique ID在每个新条目上都获得一个而不费力气?

满足您的需求的唯一可行方法是使用数据库和某种MutexMySQL的内部Mutex,如John Severinson所说,如果该AUTO_INCREMENT字段不够用。

PS性能开销......当谈论 PHP 脚本时,这不是问题。如果您需要性能,请使用 C/C++ 编写您的网站。您说的是毫秒(0.001 秒)或更短。如果这会影响你的表现,你需要重新审视你的项目/逻辑。

于 2013-05-12T15:47:34.343 回答
1

Memcached 是一个很好的选择。

尽管 PHP 来来去去,它仍然是一个键/值存储。您可以从一个 PHP 脚本写入值并从另一个脚本读取它们。这不是您正在寻找的,但可以用于相同的目的,并且比连接到其他 PHP 脚本的套接字更容易处理。

http://memcached.org/

于 2013-05-12T06:36:18.397 回答