<?php
$cache->delete( 'comments_art123' );
$cache->delete( 'comments_tape' );
$cache->delete( 'comments_user123' );
$cache->delete( 'comments_counters_art123' );
$cache->delete( 'comments_counters_user123' );
......
?>
* This source code was highlighted with Source Code Highlighter .
array(
'comments' => array(
'art123' => array(),
'tape' => array(),
'user123' => array(),
'counters' => array( 'art123' =>array(), 'user123' => array(),),
)
);
* This source code was highlighted with Source Code Highlighter .
array(
'comments' => array(
'art123' => array(),
'tape' => array(),
'user123' => array(),
)
);
* This source code was highlighted with Source Code Highlighter .
<?php
/**
* memcached, .
*
* @author rvk
*/
class MemcacheCacher implements DataCacher {
protected $daemon = null ;
protected $key = '' ;
protected $header = array();
const HEADER_KEY_NAME = 'cacheheader' ;
public function __construct($key) {
$ this ->key = explode( '|' , $key);
$ this ->daemon = new Memcache();
$ this ->daemon->connect( 'localhost' , 11211) or die ( "Could not connect" );
// .
$ this ->header = $ this ->daemon-> get (MemcacheCacher::HEADER_KEY_NAME);
if (!is_array($ this ->header)) {
$ this ->daemon->add(MemcacheCacher::HEADER_KEY_NAME, array(), false , 10000);
$ this ->header = $ this ->daemon-> get (MemcacheCacher::HEADER_KEY_NAME);
}
}
/**
*
*
*
* @param mixed $data
*/
public function set ($data) {
$ this ->createHeaderElement();
$ this ->daemon-> set (implode( '|' ,$ this ->key), $data, false , 10000) or die ( "Failed to save data at the server" );
}
/**
*
*
*
* @return mixed
*/
public function get () {
if ($ this ->exists()) {
return $ this ->daemon-> get (implode( '|' ,$ this ->key));
}
return null ;
}
/**
*
*
*
* @return bool
*/
public function exists() {
$element = $ this ->getHeaderElement();
return is_array($element);
}
/**
* . , .
* ,
*/
public function del() {
if ($ this ->exists()) {
$element = $ this ->setHeaderElement( null );
$ this ->daemon-> set (MemcacheCacher::HEADER_KEY_NAME, $ this ->header, false , 10000);
}
}
/**
*
*/
public function flush() {
$ this ->daemon->flush();
}
/**
*
*
*
* @return mixed
*/
protected function & getHeaderElement() {
$header = & $ this ->header;
foreach ($ this ->key as $subkey) {
if (!isset ($header[$subkey])) {
return $header[$subkey];
}
$header = & $header[$subkey];
}
return $header;
}
/**
*
*
*
* @param mixed $value
* @return mixed
*/
protected function setHeaderElement($ value ) {
$element = & $ this ->getHeaderElement();
$element = $ value ;
$ this ->daemon-> set (MemcacheCacher::HEADER_KEY_NAME, $ this ->header, false , 10000);
}
/**
*
*/
protected function createHeaderElement() {
$header = & $ this ->header;
foreach ($ this ->key as $subkey) {
if (!isset ($header[$subkey])) {
$header[$subkey] = array();
}
$header = & $header[$subkey];
}
$ this ->daemon-> set (MemcacheCacher::HEADER_KEY_NAME, $ this ->header, false , 10000);
}
}
?>
* This source code was highlighted with Source Code Highlighter .
<?php
class TestOfMemcacheCacher extends UnitTestCase {
public function setUp() {
$ this ->cache = new MemcacheCacher( 'key' );
$ this ->cache-> set (1);
}
public function testOfCacheExists() {
$cache = new MemcacheCacher( 'key' );
$ this ->assertTrue($cache->exists());
$cache = new MemcacheCacher( 'key1' );
$ this ->assertFalse($cache->exists());
}
public function testOfCacheDelete() {
$cache = new MemcacheCacher( 'key' );
$ this ->assertTrue($cache->exists());
$cache->del();
$ this ->assertFalse($cache->exists());
}
public function testOfCacheGet() {
$cache = new MemcacheCacher( 'key' );
$ this ->assertEqual($cache-> get (), '1' );
$ this ->assertNotEqual($cache-> get (), '2' );
}
public function testOfTreeCacheExists() {
$cache = new MemcacheCacher( 'key|key1' );
$cache-> set (123);
$ this ->assertEqual($cache-> get (), '123' );
$ this ->assertTrue($cache->exists());
$cache = new MemcacheCacher( 'key' );
$cache->del();
$cache = new MemcacheCacher( 'key|key1' );
$ this ->assertFalse($cache->exists());
}
public function tearDown() {
$ this ->cache->flush();
}
}
?>
* This source code was highlighted with Source Code Highlighter .
Source: https://habr.com/ru/post/64976/
All Articles