public function test_parallel()
 {
     $MC = $this->getMemcached();
     $MC->flush();
     unset($MC);
     $Storage = new MemcachedStorage(['servers' => [explode(':', MEMCACHED_TEST_SERVER)]]);
     $Parallel = new Parallel($Storage);
     $start = microtime(true) + 2;
     for ($i = 1; $i <= 5; $i++) {
         $Parallel->run('foo' . $i, function () use($start) {
             $MemcachedTags = new MemcachedTags($MC = $this->getMemcached());
             while (microtime(true) < $start) {
                 // wait for start
             }
             for ($i = 1; $i <= 1000; ++$i) {
                 $j = mt_rand(1, 100);
                 $MemcachedTags->setKeyWithTags('key_1_' . $j, $j, 'tag1');
                 $MemcachedTags->setKeysWithTags(['key_2_' . $j => $j, 'key_3_' . $j => $j], ['tag2', 'tag3']);
             }
             return 1;
         });
     }
     $MemcachedTags = new MemcachedTags($MC = $this->getMemcached());
     while (microtime(true) < $start) {
         // wait for start
     }
     for ($i = 1; $i <= 1000; ++$i) {
         $MemcachedTags->deleteKeysByTag('tag1');
         $MemcachedTags->deleteKeysByTags(['tag2', 'tag3']);
     }
     $Parallel->wait(['foo1', 'foo2', 'foo3', 'foo4', 'foo5']);
     $keys1 = $MemcachedTags->getKeysByTag('tag1');
     $keys2 = $MemcachedTags->getKeysByTag('tag2');
     $keys3 = $MemcachedTags->getKeysByTag('tag3');
     for ($i = 1; $i <= 100; ++$i) {
         $value = $MC->get('key_1_' . $i);
         $this->assertSame($value ? true : false, in_array('key_1_' . $i, $keys1));
         $value = $MC->get('key_2_' . $i);
         $this->assertSame($value ? true : false, in_array('key_2_' . $i, $keys2));
         $value = $MC->get('key_3_' . $i);
         $this->assertSame($value ? true : false, in_array('key_3_' . $i, $keys3));
     }
     $MC->flush();
 }
 /**
  * @see MemcachedTags::setKeyWithTags
  */
 public function test_setKeyWithTags()
 {
     $MC = static::$Memcached;
     $MemcachedTags = new MemcachedTags($MC);
     $MC->flush();
     $this->assertSame(true, $MemcachedTags->setKeyWithTags('user:1', 'Alexander', ['city:London', 'sex:m']));
     $this->assertSame('Alexander', $MC->get('user:1'));
     $this->assertSame('city:London||sex:m', $MC->get('tag_k_user:1'));
     $this->assertSame('user:1', $MC->get('tag_t_city:London'));
     $this->assertSame('user:1', $MC->get('tag_t_sex:m'));
     $this->assertSame(true, $MemcachedTags->setKeyWithTags('user:2', 'Irina', ['city:London', 'sex:f', 'country:UK']));
     $this->assertSame('Irina', $MC->get('user:2'));
     $this->assertSame('city:London||sex:f||country:UK', $MC->get('tag_k_user:2'));
     $this->assertSame('user:1||user:2', $MC->get('tag_t_city:London'));
     $this->assertSame('user:2', $MC->get('tag_t_sex:f'));
     $this->assertSame('user:2', $MC->get('tag_t_country:UK'));
     $this->assertSame(true, $MemcachedTags->setKeyWithTags('user:3', 'Ilya', ['city:Petersburg', 'sex:m', 'country:Russia']));
     $this->assertSame('Ilya', $MC->get('user:3'));
     $this->assertSame('city:London||sex:f||country:UK', $MC->get('tag_k_user:2'));
     $this->assertSame('user:3', $MC->get('tag_t_city:Petersburg'));
     $this->assertSame('user:1||user:3', $MC->get('tag_t_sex:m'));
     $this->assertSame('user:3', $MC->get('tag_t_country:Russia'));
 }
Esempio n. 3
0
$MemcachedTags = new MemcachedTags($Memcached, ['prefix' => 'users']);
// Example 2. Adding some tags to key
// some test data
$Memcached->set('user:1', '{"name": "Alexander", "sex": "m", "country": "UK",     "city": "London"}');
$Memcached->set('user:2', '{"name": "Irina",     "sex": "f", "country": "UK",     "city": "London"}');
$Memcached->set('user:3', '{"name": "Ilya",      "sex": "m", "country": "Russia", "city": "Petersburg"}');
$Memcached->set('user:4', '{"name": "Dima",      "sex": "m", "country": "Russia", "city": "Murmansk"}');
$Memcached->set('user:5', '{"name": "Dom",       "sex": "m", "country": "UK",     "city": "London"}');
$MemcachedTags->addTagsToKeys(['city:London', 'country:UK'], ['user:1', 'user:2', 'user:5']);
$MemcachedTags->addTagsToKeys(['city:Murmansk', 'country:Russia'], 'user:4');
$MemcachedTags->addTagsToKeys(['city:Petersburg', 'country:Russia'], 'user:3');
$MemcachedTags->addTagsToKeys('sex:m', ['user:1', 'user:3', 'user:4', 'user:5']);
$MemcachedTags->addTagsToKeys('sex:f', 'user:2');
$MemcachedTags->addTagsToKeys('all', ['user:1', 'user:2', 'user:3', 'user:4', 'user:5']);
// or you can create key with tags
$MemcachedTags->setKeyWithTags('user:1', 'Alexander', ['country:UK', 'city:London', 'sex:m', 'all']);
// Example 3. Get keys by tags
// Get users with tag <all>
var_dump($MemcachedTags->getKeysByTag('all'));
//    array(2) {
//      [0]=> string(6) "user:1"
//      [1]=> string(6) "user:2"
//      [2]=> string(6) "user:3"
//      [3]=> string(6) "user:4"
//      [4]=> string(6) "user:5"
//    }
// Get users with tag <country:UK>
var_dump($MemcachedTags->getKeysByTag('country:UK'));
//    array(2) {
//      [0]=> string(6) "user:1"
//      [1]=> string(6) "user:2"