PHP横幅队列fifo


php banner queue fifo

我刚开始在我的网站上放广告,我希望能够给1000个视图到ad_a, 2000到ad_b,让我们说10000到ad_c。

如果一次只有一个页面被查看,那么更新数据库并计算出每个广告还有多少页面可供查看是很容易的,但是可以同时访问多个页面,这使得事情变得更加复杂。

我正在考虑写一个队列来管理它,请求将在数据库上一个接一个地完成。我不确定这是不是最好的主意,从来没有做过这种编码,我正在寻找一行的行为,逻辑步骤,什么样的表在数据库中创建,如果有规范。

非常感谢您的帮助!

您可以使用Memcached来存储当前视图的计数。Memcached又快又轻,不会出现性能问题。此外,更复杂的事情是有一个"队列",如你所说,和一些并行进程更新它在那里放什么横幅显示,所以你可以混合它们。

一个页面可以被多次浏览这一事实并不一定是一个问题,这就是为什么LOCK TABLES是用于。

LOCK TABLES ads WRITE;
SELECT ad_id FROM ads WHERE ad_views_remaining > 0 LIMIT 1;
UPDATE ads SET ad_views_remaining = ad_views_remaining -1 WHERE ad_name = THAT_AD_ID_YOU_SELECTED_BEFORE;
UNLOCK TABLES;

这样在表被更新之前没有人可以读取它。(这个例子是针对MySQL的,我相信大多数其他rdbms也支持锁)

rand呢?

$r = rand(1, 13);
if ( $r == 1 )
    echo 'ad_a';
if ( $r > 1 and $r < 4 )
    echo 'ad_b';
if ( $r > 3 )
    echo 'ad_c';