рдЪрддреБрд░ рдХреИрд╢ рдирд┐рдХрд╛рд▓рдирд╛ (php 5 + Mongodb + memcached)

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛



рдЖрдЬрдХрд▓, рдЕрддреНрдпрдзрд┐рдХ рднрд░реА рд╣реБрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛, рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рд╡рд┐рд╖рдп рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдЧрд╛ред рджреЛрдиреЛрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реА, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреЗрдЬ рдмреНрд▓реЙрдХ рдФрд░ рд╕рднреА рдкреЗрдЬ рдХреИрд╢ рд╣реИрдВред



рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐, IMHO, рд╡рд┐рд╢рд╛рд▓ (рдпрд╛ рдРрд╕рд╛ рдирд╣реАрдВ) рдХреЗ рд╕рд╛рде рдХреИрд╢ рд▓реЛрдб рдХрд░рдирд╛ html рдмреНрд▓реЙрдХ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдмрд░реНрдмрд╛рджреА рд╣реИред (рдпрд╣ рдХрдерди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ, рдпрджрд┐ рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рдФрд░ рд╣рд╛рдВ, рдореИрдВ рдХреИрд╢рд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдз рдЬреНрдЮрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕реА рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИред

рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдПрдХ рдирд╣реАрдВ рд╣реИ - рдХреИрд╢ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣рдореЗрд╢рд╛ рдЕрджреНрдпрддрд┐рдд рд╣реЛрддрд╛ рд╣реИред



рдХрдЯреМрддреА рдХреЗ рддрд╣рдд - рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди, рдХреИрд╢ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд░рд╣рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рд░реИрдо рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓реЗ рд╣реИрдВ)ред





рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА



рдЕрдм рдлреИрд╢рдиреЗрдмрд▓ рдПрдорд╡реАрд╕реА рдореЙрдбрд▓ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдореЙрдбрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рдЗрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореЗрд░рд╛ рдЕрдкрдирд╛ рдЕрд▓рдЧ рдореЙрдбрд▓ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдореЙрдбрд▓ рднреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред



рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреБрдВрдЬреА рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдирд╛рдо, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рд╕рдм md5 рдореЗрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреИрд╢ рдХреА рдХреБрдВрдЬреА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмреА рдзрд╛рд░рд╛рдУрдВ рдпрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред



рдЕрдм 90% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╢ рдХреЛ рдЬрд╛рдиреЗрдВрдЧреЗ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЦрд╛рддреЗ рд╕реЗ рдЕрдВрддрд┐рдо 5 рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╕рднреА рд╕рдВрджреЗрд╢ рдЯреВрдЯ рдЧрдП рд╣реИрдВ, 10 рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдХрд╣рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдкреГрд╖реНрда рдХреЗ рдХреИрд╢ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддреЗ рд╣реБрдП, рдЕрдиреНрдп рд╕рднреА рдкреГрд╖реНрда рдкреБрд░рд╛рдиреЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдХреИрд╢ рд░рд╣реЗрдВрдЧреЗ, рдФрд░ рдпрд╣ рдЕрдм рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдХрд╛рд░реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреИрд╢ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА) рдХреЗ рдХреЗрд╡рд▓ 1 рдХреЛ рдЬрд╛рдирдирд╛, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ (рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛) рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирдирд╛ред



рддреЛ рдореЗрд░рд╛ рдлреИрд╕рд▓рд╛



рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рд╣рд░ рдмрд╛рд░ рдХреИрд╢ рдореЗрдВ рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ, рдХреБрдВрдЬреА рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдореЛрдВрдЧреЛ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреИрд╢ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЬрд╛рдирддрд╛ рд╣реИред рдореИрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рдмрд╕ рдХреЛрдб рдкрд░ рдЬрд╛рдКрдВрдЧрд╛ред

class Cache extends Memcached { private $registry; public function __construct() { parent::__construct(); $this->addServer('localhost', 11211); $m = new Mongo(); $this->registry = $m->local->cache_registry; // ,      } public function set($name, $content) { //    $this->registry->insert(array('id' => $name)); parent::set(md5(print_r($name, 1)), $content); } public function delete($name) { //    $this->registry->remove(array('id' => $name)); parent::delete(md5(print_r($name, 1))); } public function get($name) { return parent::get(md5(print_r($name, 1))); } public function smart_delete($params) { //    $criteria = array(); $size = sizeof($params); for ($i = 0; $i < 2; $i++) { //       $criteria['id.' . $i] = $params[$i]; } if ($size == 3) { //     for ($i = 0; $i < sizeof($params[2]); $i++) { $criteria['id.2.' . $i] = $params[2][$i]; } } elseif ($size > 3) throw new Exception('Size of input parameters is out of expected range'); $cursor = $this->registry->find($criteria); while ($cursor->hasNext()) { //          $data = $cursor->getNext(); $id = $data['_id']; parent::delete(md5(print_r($data['id'], 1))); $this->registry->remove(array('_id' => new MongoId($id))); } } }
      
      







рдФрд░ рдПрдХ рдХреЙрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдВрдд рдореЗрдВ рдЬрдЧрд╣ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛:

 $cache = new Cache(); $cache->smart_delete('user', 'messages', array(1));/*    messages   user    = 1*/
      
      







рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЕрд╢реЛрднрдиреАрдп рд╕рд░рд▓ рд╣реИ рдФрд░ рдХрд╛рдлреА рд▓рд╛рдн рд╣реИ:

  1. рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрднрд╛рдЧ рд╕реЗ рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
  2. рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рд╕реЗ рд╕рднреА рдЕрдиреБрднрд╛рдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛
  3. рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛, рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд╛рдирдирд╛ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓реЛрдЧреЛрдВ рдХреЛ рддреНрдпрд╛рдЧрдирд╛ред




рдмреЗрд╢рдХ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕реЗ рдЕрднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╣рдЯрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЬрд╛рдирдирд╛ рдФрд░ рдкрд╣рд▓реЗ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирдирд╛, рдЬреЛ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд╕рдордп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рд╕реЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛рдПрдВ (рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЕрдЧрд░ рдЦрд╛рд▓реА рд╕рдордп рд╣реИ, рддреЛ рдпрд╣ рд╕рдм рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред



PS рдкрд┐рдЫрд▓реА рдЫреБрдЯреНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде!



All Articles