Ne dediğini yapabilirsin, dönersiniz görüntülere işaret 1.000 değerlerin bir blok pregenerate:
$distribution = "011022201111202102100120 ..." # exactly evenly distributed
Sonra MySQL ve memcache bu bloğu depolamak ve yukarıdaki dize için geçerli dizin değeri tutmak için (MySQL ve memcache hem de) başka bir anahtar kullanın. Görüntü komut isabet olduğunda memcache değerini artırmak. Memcache aşağı giderse, (sonra SELECT, UPDATE, bu kısmını yapmak için daha iyi bir yolu olabilir) MySQL yerine gidin.
Senkronize memcache ve MySQL tutmak için bir cron işi MySQL memcache güncel indeks değerini kopyalayın olabilir. Bazı doğruluğunu kaybedersiniz ama bu durumda kritik olmayabilir.
MySQL ve memcache hem de çeşitli dağıtımları saklamak ve şu anda aktif dağıtım işaret başka bir anahtar olabilir. Eğer gelecekte görüntü blokları pregenerate edebilirsiniz. Endeks dağılımını aştığında komut tuşuna artırmak ve sonraki birine gitmek istiyorum.
Kabaca:
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;
}
Vs .. işlev adları tür kıyameti, ama fikir alırsınız düşünüyorum. Memcache sunucusu tekrar yukarı olduğunda, geri memcache için MySQL veri kopyalamak ve anında aktive edilir.