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(); }
// Get users with tag <country:UK> var_dump($MemcachedTags->getKeysByTag('country:UK')); // array(2) { // [0]=> string(6) "user:1" // [1]=> string(6) "user:2" // [2]=> string(6) "user:5" // } // Get users with tag <city:Petersburg> OR <city:Murmansk> var_dump($MemcachedTags->getKeysByTags(['city:Petersburg', 'city:Murmansk'], MemcachedTags::COMPILATION_OR)); // array(2) { // [0]=> string(6) "user:3" // [1]=> string(6) "user:4" // } // Get users with tags <country:UK> AND <sex:m> var_dump($MemcachedTags->getKeysByTags(['country:UK', 'sex:m'], MemcachedTags::COMPILATION_AND)); // array(3) { // [0]=> string(6) "user:1" // [1]=> string(6) "user:5" // } // Get users with tag <country:UK> AND WITHOUT <sex:m> var_dump($MemcachedTags->getKeysByTags(['country:UK', 'sex:m'], MemcachedTags::COMPILATION_XOR)); // array(3) { // [0]=> string(6) "user:2" // } // Example 4. Delete keys by tags // Delete keys with tag <city:Murmansk> var_dump($MemcachedTags->deleteKeysByTag('city:Murmansk')); // int(1) - Count of deleted keys // Delete keys with tag <city:London> WITHOUT <sex:f> var_dump($MemcachedTags->deleteKeysByTags(['city:London', 'sex:f'], MemcachedTags::COMPILATION_XOR)); // int(2) - Count of deleted keys