gpt4 book ai didi

php - 基于高流量百分比的集合选择?

转载 作者:行者123 更新时间:2023-11-29 15:10:10 26 4
gpt4 key购买 nike

设置:高流量网站和我们要显示的图像 URL 列表。我们有一个图像点,并且图像 URL 集中的每个项目都有当天的目标显示百分比。示例:

  • 图片 1 - 10%
  • 图片2 - 30%
  • 图片3 - 60%

由于每天的流量都会有所不同,因此我计算的是 1000 个 block 内的百分比。图像也需要随机选取,但仍能准确地拟合分布。

问题:我已经实现了 POC 代码来在内存缓存中执行此操作,但我对数据存储方式感到不舒服(由“主记录”与元数据映射的多个哈希键)。如果内存缓存服务器出现故障,这还需要能够回退到数据库。我还担心主记录的并发问题。

有没有更简单的方法来实现这一点?也许是一个快速的 mysql 查询,或者是将 memcache 引入其中的更好方法?

谢谢

最佳答案

您可以按照您所说的操作,预先生成一个包含 1000 个值的 block ,指向您将返回的图像:

$distribution = "011022201111202102100120 ..." # exactly evenly distributed

然后将该 block 存储在 MySQL 和 memcache 中,并使用另一个键(在 MySQL 和 memcache 中)来保存上述字符串的当前索引值。每当图像脚本被命中时,内存缓存中的值就会增加。如果 memcache 出现故障,请转至 MySQL(更新,然后选择;可能有更好的方法来完成这部分)。

为了保持 memcache 和 MySQL 同步,您可以使用 cron 作业将当前索引值从 memcache 复制到 MySQL。您将失去一些准确性,但这在这种情况下可能并不重要。

您可以在 MySQL 和 memcache 中存储多个发行版,并拥有另一个指向当前事件发行版的键。这样您就可以预先生成 future 的图像 block 。当索引超过分布时,脚本将增加键并转到下一个。

大致:

function FetchImageFname( )
{
$images = array( 0 => 'image1.jpg', 1 => 'image2.jpg', 2 => 'image3.jpg' );
$distribution = FetchDistribution( );
$currentindex = FetchCurrentIndex( );

$x = 0;
while( $distribution[$currentindex] == '' && $x < 10 );
{
IncrementCurrentDistribKey( );
$distribution = FetchDistribution( );
$currentindex = FetchCurrentIndex( );
$x++;
}

if( $distribution[$currentindex] == '' )
{
// XXX Tried and failed. Send error to central logs.
return( $images[0] );
}

return( $distribution[$currentindex] );
}

function FetchDistribution( )
{
$current_distib_key = FetchCurrentDistribKey( );
$distribution = FetchFromMemcache( $current_distrib_key );
if( !$distribution )
$distribution = FetchFromMySQL( $current_distrib_key );
return $distribution;
}

function FetchCurrentIndex( )
{
$current_index = MemcacheIncrement( 'foo' );
if( $current_index === false )
$current_index = MySQLIncrement( 'foo' );
return $current_index;
}

.. 等等。函数名称有点臭,但我想你会明白的。当memcache服务器再次备份时,您可以将数据从MySQL复制回memcache,它会立即重新激活。

关于php - 基于高流量百分比的集合选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/929916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com