Implements: Kohana_Cache_Tagging | Cache_Tagging | Kohana_Cache_Arithmetic | Cache_Arithmetic
Class declared in MODPATH/cache/classes/cache/memcachetag.php on line 3.
integer 2592000
integer 3600
string
$defaultlink to thisdefault driver to use
string(4) "file"
Kohana_Cache
$instanceslink to thisinstances
array(0)
Config
$_configlink to thisarray
$_default_configlink to thisThe default configuration for the memcached server
string
$_flagslink to thisFlags to use when storing values
Memcache
$_memcachelink to thisMemcache resource
Delete cache entries based on a tag
string
$tag
required - Tagboolean
public
function
delete_tag(
$tag
)
{
return
$this
->_memcache->tag_delete(
$tag
);
}
Find cache entries based on a tag
string
$tag
required - Tagvoid
public
function
find(
$tag
)
{
throw
new
Cache_Exception(
'Memcached-tags does not support finding by tag'
);
}
Set a value based on an id with tags
string
$id
required - Idmixed
$data
required - Datainteger
$lifetime
= NULL - Lifetime [Optional]array
$tags
= NULL - Tags [Optional]boolean
public
function
set_with_tags(
$id
,
$data
,
$lifetime
= NULL,
array
$tags
= NULL)
{
$id
=
$this
->_sanitize_id(
$id
);
$result
=
$this
->set(
$id
,
$data
,
$lifetime
);
if
(
$result
and
$tags
)
{
foreach
(
$tags
as
$tag
)
{
$this
->_memcache->tag_add(
$tag
,
$id
);
}
}
return
$result
;
}
Callback method for Memcache::failure_callback to use if any Memcache call
on a particular server fails. This method switches off that instance of the
server if the configuration setting instant_death
is set to TRUE
.
string
$hostname
required - $hostnameinteger
$port
required - $portvoid|boolean
public
function
_failed_request(
$hostname
,
$port
)
{
if
( !
$this
->_config[
'instant_death'
])
return
;
// Setup non-existent host
$host
= FALSE;
// Get host settings from configuration
foreach
(
$this
->_config[
'servers'
]
as
$server
)
{
// Merge the defaults, since they won't always be set
$server
+=
$this
->_default_config;
// We're looking at the failed server
if
(
$hostname
==
$server
[
'host'
]
and
$port
==
$server
[
'port'
])
{
// Server to disable, since it failed
$host
=
$server
;
continue
;
}
}
if
( !
$host
)
return
;
else
{
return
$this
->_memcache->setServerParams(
$host
[
'host'
],
$host
[
'port'
],
$host
[
'timeout'
],
$host
[
'retry_interval'
],
FALSE,
// Server is offline
array
(
$this
,
'_failed_request'
));
}
}
Decrements a given value by the step value supplied. Useful for shared counters and other persistent integer based tracking.
string
$id
required - Id of cache entry to decrementint
$step
= integer 1 - Step value to decrement byinteger
boolean
public
function
decrement(
$id
,
$step
= 1)
{
return
$this
->_memcache->decrement(
$id
,
$step
);
}
Delete a cache entry based on id
// Delete the 'foo' cache entry immediately
Cache::instance(
'memcache'
)->
delete
(
'foo'
);
// Delete the 'bar' cache entry after 30 seconds
Cache::instance(
'memcache'
)->
delete
(
'bar'
, 30);
string
$id
required - Id of entry to deleteinteger
$timeout
= integer 0 - Timeout of entry, if zero item is deleted immediately, otherwise the item will delete after the specified value in secondsboolean
public
function
delete
(
$id
,
$timeout
= 0)
{
// Delete the id
return
$this
->_memcache->
delete
(
$this
->_sanitize_id(
$id
),
$timeout
);
}
Delete all cache entries.
Beware of using this method when using shared memory cache systems, as it will wipe every entry within the system for all clients.
// Delete all cache entries in the default group
Cache::instance(
'memcache'
)->delete_all();
boolean
public
function
delete_all()
{
$result
=
$this
->_memcache->
flush
();
// We must sleep after flushing, or overwriting will not work!
// @see http://php.net/manual/en/function.memcache-flush.php#81420
sleep(1);
return
$result
;
}
Retrieve a cached value entry by id.
// Retrieve cache entry from memcache group
$data
= Cache::instance(
'memcache'
)->get(
'foo'
);
// Retrieve cache entry from memcache group and return 'bar' if miss
$data
= Cache::instance(
'memcache'
)->get(
'foo'
,
'bar'
);
string
$id
required - Id of cache to entrystring
$default
= NULL - Default value to return if cache missmixed
public
function
get(
$id
,
$default
= NULL)
{
// Get the value from Memcache
$value
=
$this
->_memcache->get(
$this
->_sanitize_id(
$id
));
// If the value wasn't found, normalise it
if
(
$value
=== FALSE)
{
$value
= (NULL ===
$default
) ? NULL :
$default
;
}
// Return the value
return
$value
;
}
Increments a given value by the step value supplied. Useful for shared counters and other persistent integer based tracking.
string
$id
required - Id of cache entry to incrementint
$step
= integer 1 - Step value to increment byinteger
boolean
public
function
increment(
$id
,
$step
= 1)
{
return
$this
->_memcache->increment(
$id
,
$step
);
}
Set a value to cache with id and lifetime
$data
=
'bar'
;
// Set 'bar' to 'foo' in memcache group for 10 minutes
if
(Cache::instance(
'memcache'
)->set(
'foo'
,
$data
, 600))
{
// Cache was set successfully
return
}
string
$id
required - Id of cache entrymixed
$data
required - Data to set to cacheinteger
$lifetime
= integer 3600 - Lifetime in seconds, maximum value 2592000boolean
public
function
set(
$id
,
$data
,
$lifetime
= 3600)
{
// If the lifetime is greater than the ceiling
if
(
$lifetime
> Cache_Memcache::CACHE_CEILING)
{
// Set the lifetime to maximum cache time
$lifetime
= Cache_Memcache::CACHE_CEILING + time();
}
// Else if the lifetime is greater than zero
elseif
(
$lifetime
> 0)
{
$lifetime
+= time();
}
// Else
else
{
// Normalise the lifetime
$lifetime
= 0;
}
// Set the data to memcache
return
$this
->_memcache->set(
$this
->_sanitize_id(
$id
),
$data
,
$this
->_flags,
$lifetime
);
}
Overload the __clone() method to prevent cloning
void
final
public
function
__clone()
{
throw
new
Cache_Exception(
'Cloning of Kohana_Cache objects is forbidden'
);
}
Getter and setter for the configuration. If no argument provided, the current configuration is returned. Otherwise the configuration is set to this class.
// Overwrite all configuration
$cache
->config(
array
(
'driver'
=>
'memcache'
,
'...'
));
// Set a new configuration setting
$cache
->config(
'servers'
,
array
(
'foo'
=>
'bar'
,
'...'
));
// Get a configuration setting
$servers
=
$cache
->config('servers);
mixed
$key
= NULL - Key to set to array, either array or config pathmixed
$value
= NULL - Value to associate with keymixed
public
function
config(
$key
= NULL,
$value
= NULL)
{
if
(
$key
=== NULL)
return
$this
->_config;
if
(
is_array
(
$key
))
{
$this
->_config =
$key
;
}
else
{
if
(
$value
=== NULL)
return
Arr::get(
$this
->_config,
$key
);
$this
->_config[
$key
] =
$value
;
}
return
$this
;
}
Creates a singleton of a Kohana Cache group. If no group is supplied the default cache group is used.
// Create an instance of the default group
$default_group
= Cache::instance();
// Create an instance of a group
$foo_group
= Cache::instance(
'foo'
);
// Access an instantiated group directly
$foo_group
= Cache::
$instances
[
'default'
];
string
$group
= NULL - The name of the cache group to use [Optional]Cache
public
static
function
instance(
$group
= NULL)
{
// If there is no group supplied
if
(
$group
=== NULL)
{
// Use the default setting
$group
= Cache::
$default
;
}
if
(isset(Cache::
$instances
[
$group
]))
{
// Return the current group if initiated already
return
Cache::
$instances
[
$group
];
}
$config
= Kohana::
$config
->load(
'cache'
);
if
( !
$config
->offsetExists(
$group
))
{
throw
new
Cache_Exception(
'Failed to load Kohana Cache group: :group'
,
array
(
':group'
=>
$group
)
);
}
$config
=
$config
->get(
$group
);
// Create a new cache type instance
$cache_class
=
'Cache_'
.ucfirst(
$config
[
'driver'
]);
Cache::
$instances
[
$group
] =
new
$cache_class
(
$config
);
// Return the instance
return
Cache::
$instances
[
$group
];
}
Constructs the memcache object
array
$config
required - Configuration
protected
function
__construct(
array
$config
)
{
parent::__construct(
$config
);
if
( ! method_exists(
$this
->_memcache,
'tag_add'
))
{
throw
new
Cache_Exception(
'Memcached-tags PHP plugin not present. Please see http://code.google.com/p/memcached-tags/ for more information'
);
}
}
Replaces troublesome characters with underscores.
// Sanitize a cache id
$id
=
$this
->_sanitize_id(
$id
);
string
$id
required - Id of cache to sanitizestring
protected
function
_sanitize_id(
$id
)
{
// Change slashes and spaces to underscores
return
str_replace
(
array
(
'/'
,
'\\'
,
' '
),
'_'
,
$id
);
}