您的位置:首页 > 数据库 > Redis

每天laravel-20160629|RedisTaggedCache

2016-04-05 09:00 656 查看
<?php

namespace Illuminate\Cache;
// a namespace Cache
class RedisTaggedCache extends TaggedCache
{// a cache class about the Cache use in RedisTagged
/**
* Forever reference key.
*
* @var string
*/
const REFERENCE_KEY_FOREVER = 'forever';// too long time to set the key values
/**
* Standard reference key.
*
* @var string
*/
const REFERENCE_KEY_STANDARD = 'standard';// Standard reference key.

/**
* Store an item in the cache.
*
* @param  string  $key
* @param  mixed   $value
* @param  \DateTime|int  $minutes
* @return void
*/
public function put($key, $value, $minutes = null)
{
$this->pushStandardKeys($this->tags->getNamespace(), $key);

parent::put($key, $value, $minutes);// key values time[minutes]
}// store a item into the redis cache.

/**
* Store an item in the cache indefinitely.
*
* @param  string  $key
* @param  mixed   $value
* @return void
*/
public function forever($key, $value)
{
$this->pushForeverKeys($this->tags->getNamespace(), $key);

parent::forever($key, $value);
}// Store an item in the cache in the cache indefinitely
// use a parents function to set a long time ,so wo can wrapper is as forever

/**
* Remove all items from the cache.
*
* @return void
*/
public function flush()
{
$this->deleteForeverKeys();
$this->deleteStandardKeys();

parent::flush();
}// flush is a remove, remove all item from the cache.

/**
* Store standard key references into store.
*
* @param  string  $namespace
* @param  string  $key
* @return void
*/
protected function pushStandardKeys($namespace, $key)
{
$this->pushKeys($namespace, $key, self::REFERENCE_KEY_STANDARD);
}//Store standard key references into store.

/**
* Store forever key references into store.
*
* @param  string  $namespace
* @param  string  $key
* @return void
*/
protected function pushForeverKeys($namespace, $key)
{
$this->pushKeys($namespace, $key, self::REFERENCE_KEY_FOREVER);
}// Store forever key references into store.

/**
* Store a reference to the cache key against the reference key.
*
* @param  string  $namespace
* @param  string  $key
* @param  string  $reference
* @return void
*/
protected function pushKeys($namespace, $key, $reference)
{
$fullKey = $this->getPrefix().sha1($namespace).':'.$key;// set real key

foreach (explode('|', $namespace) as $segment) {
$this->store->connection()->lpush($this->referenceKey($segment, $reference), $fullKey);
}// explode the string to array
}// Store a reference to the cache key against the reference key.

/**
* Delete all of the items that were stored forever.
* Delete all of the items that were stored forever.
* @return void
*/
protected function deleteForeverKeys()
{
$this->deleteKeysByReference(self::REFERENCE_KEY_FOREVER);
}// delete Key that be forever

/**
* Delete all standard items.
*
* @return void
*/
protected function deleteStandardKeys()
{
$this->deleteKeysByReference(self::REFERENCE_KEY_STANDARD);
}// Delete all standard items.

/**
* Find and delete all of the items that were stored against a reference.
*
* @param  string  $reference
* @return void
*/
protected function deleteKeysByReference($reference)
{
foreach (explode('|', $this->tags->getNamespace()) as $segment) {
$this->deleteValues($segment = $this->referenceKey($segment, $reference));

$this->store->connection()->del($segment);
}
}// Find and delete all of the items that were stored against a reference.
// this we  find a way,the like to do some thing,
// first set a cell function,then call it's.

/**
* Delete item keys that have been stored against a reference.
*
* @param  string  $referenceKey
* @return void
*/
protected function deleteValues($referenceKey)
{
$values = array_unique($this->store->connection()->lrange($referenceKey, 0, -1));

if (count($values) > 0) {
call_user_func_array([$this->store->connection(), 'del'], $values);
}
}// Delete item keys that have been stored against a reference.
//

/**
* Get the reference key for the segment.
*
* @param  string  $segment
* @param  string  $suffix
* @return string
*/
protected function referenceKey($segment, $suffix)
{
return $this->getPrefix().$segment.':'.$suffix;
}// Get the reference key for the segment.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: