PHP code example of dongnan / linkcache

1. Go to this page and download the library: Download dongnan/linkcache library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

dongnan / linkcache example snippets


 
	//引入 LinkCache 的自动加载文件
	

 
	//设置缓存配置, 使用 array_merge 的方式合并到默认配置中
	\linkcache\Cache::setConfig($config);
	
	//获取配置信息
	$config = \linkcache\Cache::getConfig();
	//获取指定缓存驱动的配置信息
	$config = \linkcache\Cache::getConfig('redis');

	//默认配置信息
	[
		//默认使用的缓存驱动
		'default' => 'files',
        //当前缓存驱动失效时,使用的备份驱动
        'fallback' => 'files',
        'memcache' => [
            'servers' => [
                ['host' => '127.0.0.1', 'port' => 11211, 'weight' => 1, 'persistent' => true, 'timeout' => 1, 'retry_interval' => 15, 'status' => true],
            ],
            'compress' => ['threshold' => 2000, 'min_saving' => 0.2],
        ],
        'memcached' => [
            'servers' => [
                ['host' => '127.0.0.1', 'port' => 11211, 'weight' => 1],
            ],
            //参考 Memcached::setOptions
            'options' => [],
        ],
        'redis' => [
            'host' => '127.0.0.1',
            'port' => 6379,
            'password' => '',
            'database' => '',
            'timeout' => ''
        ],
        'ssdb' => [
            'host' => '127.0.0.1',
            'port' => 8888,
            'password' => '',
            'timeoutms' => ''
        ],
	]


	//直接new一个
	$cache = new \linkcache\Cache();
	//通过getInstance获取
	$cache = \linkcache\Cache::getInstance();

	//根据驱动类型实例化,支持的驱动:redis,memcache,memcached,ssdb,files,apc,yac
	$cache = new \linkcache\Cache('files');
	//或者
	$cache = \linkcache\Cache::getInstance('files');

	//传入配置参数实例化
	$cache = new \linkcache\Cache('redis', ['host' => '127.0.0.1', 'port' => 6379]);


	//设置不过期的缓存
	$status = $cache->set($key, $value);
	//设置有过期时间的缓存
	$status = $cache->set($key, $value, $time);


	//设置不过期的缓存
	$status = $cache->setnx($key, $value);
	//设置有过期时间的缓存
	$status = $cache->setnx($key, $value, $time);


	//设置不过期的缓存
	$status = $cache->setDE($key, $value);
	//设置有过期时间的缓存
	$status = $cache->setDE($key, $value, $time);
	//设置有过期时间的缓存并指定延迟过期时间
	$status = $cache->setDE($key, $value, $time, $delayTime);


	//获取key对应的值
	$value = $cache->get($key);


	//获取key对应的值
	$value = $cache->getDE($key, $isExpired);
	//如果已经过期,处理其他逻辑
	if ($isExpired) {
		//TODO
	}


	//删除key
	$status = $cache->del($key);


	//判断key是否存在
	$status = $cache->has($key);


	//判断key是否存在
	$status = $cache->hasDE($key);


	//获取key的生存时间
	$ttl = $cache->ttl($key);


	//获取延迟过期的 key 理论上的生存时间(单位:s)
	$ttl = $cache->ttlDE($key);


	//设置一个key的生存时间
	$status = $cache->expire($key, $time);


	//以延迟过期的方式设置一个 key 的生存时间(单位:s)
	$status = $cache->expireDE($key, $time);
	//自定义延迟过期时间
	$status = $cache->expireDE($key, $time, $delayTime);


	//用UNIX时间戳设置一个key的过期时间
	$status = $cache->expireAt($key, $time);


	//用UNIX时间戳设置一个key的过期时间
	$status = $cache->expireAtDE($key, $time);
	//自定义延迟过期时间
	$status = $cache->expireAtDE($key, $time, $delayTime);


	//删除一个key的生存时间,使其永不过期
	$status = $cache->persist($key);


	//对key设置锁标记
	$status = $cache->lock($key, $time);


	//判断key是否有锁标记
	$status = $cache->isLock($key);


	//移除key的锁标记
	$status = $cache->unLock($key);


	//设置key的值按整数递增
	$value = $cache->incr($key, $step);


	//设置key的值按浮点数递增
	$value = $cache->incrByFloat($key, $float);


	//设置key的值按整数递减
	$value = $cache->decr($key, $step);


	$sets = [
		'key1' => 'value1',
		'key2' => 'value2',
		'key3' => 'value3',
	];
	//批量设置多个key对应的值
	$status = $cache->mSet($sets);


	$sets = [
		'key1' => 'value1',
		'key2' => 'value2',
		'key3' => 'value3',
	];
	//当缓存中不存在key时,批量设置多个key对应的值
	$status = $cache->mSetNX($sets);


	$keys = ['key1', 'key2', 'key3'];
	//获取所有给定key的值
	$status = $cache->mGet($keys);


	$keys = ['key1', 'key2', 'key3'];
	//批量判断key是否存在
	$hasKeys = $cache->mHas($keys);


	$keys = ['key1', 'key2', 'key3'];
	//批量删除key
	$status = $cache->mDel($keys);


	/* LinkCache专为防止惊群现象设计的方法包括:
	 * setDE,getDE,hasDE,ttlDE,expireDE,expireAtDE,lock,isLock,unLock
	 * 比较常用的是:setDE,getDE,lock
	 */
	
	//设置缓存
	$cache->setDE($key,$value,$time);

	//获取缓存
	$value = $cache->getDE($key,$isExpired);

	//情况1,$value存在,$isExpired=false,不需要更新缓存
	if($value !== false){
		//your code
	}

	//情况2,$value存在,$isExpired=true,需要更新缓存
	if($value !== false){
		//your code
	}
	//更新缓存
	if($isExpired === true){
		//对key加锁标记,如果成功,则处理更新缓存操作 (锁标记默认过期时间是60s,也可自定义过期时间)
		if($cache->lock($key)){
			//更新缓存
		}
	}
	
	//情况3,$value不存在,需要更新缓存
	if($value === false){
		//对key加锁标记,如果成功,则处理更新缓存操作 (锁标记默认过期时间是60s,也可自定义过期时间)
		if($cache->lock($key)){
			//更新缓存
		}
		//如果失败,说明已经有进程/线程对key加了锁标记,正在更新缓存
		else{
			//如果并发大,建议此处做特殊处理,不要去更新缓存
			
			//特殊处理的代码
		}
	}


	use \linkcache\Cache;
	$config = [
		'redis_m_db_1' => [
			'driver_type' => 'redis',
			'host' => '127.0.0.1',
			'port' => 6380,
			'database' => 1
		],
		'redis_m_db_2' => [
			'driver_type' => 'redis',
			'host' => '127.0.0.1',
			'port' => 6380,
			'database' => 2
		],
		'redis_s_db' => [
			'driver_type' => 'redis',
			'host' => '127.0.0.1',
			'port' => 6381
		]
	];
	Cache::setConfig($config);
	//根据自定义配置实例化
	$redisM1 = new Cache('redis_m_db_1');
	$redisM2 = new Cache('redis_m_db_2');
	$redisS0 = new Cache('redis_s_db');

		
			/**
			 * linkcache - 一个灵活高效的PHP缓存工具库
			 *
			 * @author      Dong Nan <[email protected]>
			 * @copyright   (c) Dong Nan http://idongnan.cn All rights reserved.
			 * @link        http://git.oschina.net/dongnan/LinkCache
			 * @license     BSD (http://opensource.org/licenses/BSD-3-Clause)
			 */

			namespace linkcache\drivers;
			use linkcache\abstracts\DriverSimple;

			class Example extends DriverSimple {
			
			    /**
			     * 构造函数
			     * @param array $config 配置
			     */
			    public function __construct($config = []) {
			        $this->init($config);
					//TODO 完善这个方法
			    }
			
			    /**
			     * 检查驱动是否可用
			     * @return boolean      是否可用
			     */
			    public function checkDriver() {
			        //TODO 实现这个方法
			    }
			
			    /**
			     * 设置键值
			     * @param string $key
			     * @param string $value
			     * @return boolean
			     */
			    protected function setOne($key, $value) {
					//TODO 实现这个方法
					
			    }
			
			    /**
			     * 获取键值
			     * @param string $key
			     * @return mixed
			     */
			    protected function getOne($key) {
					//TODO 实现这个方法
			    }
			
			    /**
			     * 删除键值
			     * @param string $key
			     * @return boolean
			     */
			    protected function delOne($key) {
					//TODO 实现这个方法
			    }
			
			}

		

		
			/**
			 * linkcache - 一个灵活高效的PHP缓存工具库
			 *
			 * @author      Dong Nan <[email protected]>
			 * @copyright   (c) Dong Nan http://idongnan.cn All rights reserved.
			 * @link        http://git.oschina.net/dongnan/LinkCache
			 * @license     BSD (http://opensource.org/licenses/BSD-3-Clause)
			 */
			
			namespace linkcache\drivers;
			use linkcache\interfaces\driver\Base;
			
			class Example implements Base {
			
			    use \linkcache\traits\CacheDriver;
			
			    /**
			     * 构造函数
			     * @param array $config 配置
			     */
			    public function __construct($config = []) {
			        $this->init($config);
					//TODO 完善这个方法
			    }
			
			    /**
			     * 检查驱动是否可用
			     * @return boolean      是否可用
			     */
			    public function checkDriver() {
			        //TODO 实现这个方法
			    }
			
			    /**
			     * 设置键值
			     * @param string $key   键名
			     * @param mixed $value  键值
			     * @param int $time     过期时间,默认为-1,<=0则设置为永不过期
			     * @return boolean      是否成功
			     */
			    public function set($key, $value, $time = -1) {
			        //TODO 实现这个方法
			    }
			
			    /**
			     * 当键名不存在时设置键值
			     * @param string $key   键名
			     * @param mixed $value  键值
			     * @param int $time     过期时间,默认为-1,<=0则设置为永不过期
			     * @return boolean      是否成功
			     */
			    public function setnx($key, $value, $time = -1) {
			        //TODO 实现这个方法
			    }
			
				/**
			     * 设置键值,将自动延迟过期;<br>
			     * 此方法用于缓存对过期要求宽松的数据;<br>
			     * 使用此方法设置缓存配合getDE方法可以有效防止惊群现象发生
			     * @param string $key    键名
			     * @param mixed $value   键值
			     * @param int $time      过期时间,<=0则设置为永不过期
			     * @param int $delayTime 延迟过期时间,如果未设置,则使用配置中的设置
			     * @return boolean       是否成功
			     */
			    public function setDE($key, $value, $time, $delayTime = null) {
					//TODO 实现这个方法
				}

			    /**
			     * 获取键值
			     * @param string $key   键名
			     * @return mixed|false  键值,失败返回false
			     */
			    public function get($key) {
			        //TODO 实现这个方法
			    }
			
				/**
			     * 获取延迟过期的键值,与setDE配合使用;<br>
			     * 此方法用于获取setDE设置的缓存数据;<br>
			     * 当isExpired为true时,说明key已经过期,需要更新;<br>
			     * 更新数据时配合isLock和lock方法,防止惊群现象发生
			     * @param string $key       键名
			     * @param boolean $isExpired 是否已经过期
			     * @return mixed|false      键值,失败返回false
			     */
			    public function getDE($key, &$isExpired = null) {
					//TODO 实现这个方法
				}

			    /**
			     * 删除键值
			     * @param string $key   键名
			     * @return boolean      是否成功
			     */
			    public function del($key) {
			        //TODO 实现这个方法
			    }
			
			    /**
			     * 是否存在键值
			     * @param string $key   键名
			     * @return boolean      是否存在
			     */
			    public function has($key) {
			        //TODO 实现这个方法
			    }
			
			    /**
			     * 判断延迟过期的键值理论上是否存在
			     * @param string $key   键名
			     * @return boolean      是否存在
			     */
			    public function hasDE($key) {
					//TODO 实现这个方法
				}

			    /**
			     * 获取生存剩余时间
			     * @param string $key   键名
			     * @return int|false    生存剩余时间(单位:秒) -1表示永不过期,-2表示键值不存在,失败返回false
			     */
			    public function ttl($key) {
			        //TODO 实现这个方法
			    }
			
				/**
			     * 获取延迟过期的键值理论生存剩余时间
			     * @param string $key   键名
			     * @return int|false    生存剩余时间(单位:秒) -1表示永不过期,-2表示键值不存在,失败返回false
			     */
			    public function ttlDE($key) {
					//TODO 实现这个方法
				}

			    /**
			     * 设置过期时间
			     * @param string $key   键名
			     * @param int $time     过期时间(单位:秒)。不大于0,则设为永不过期
			     * @return boolean      是否成功
			     */
			    public function expire($key, $time) {
			        //TODO 实现这个方法
			    }

				/**
			     * 以延迟过期的方式设置过期时间
			     * @param string $key    键名
			     * @param int $time      过期时间(单位:秒)。不大于0,则设为永不过期
			     * @param int $delayTime 延迟过期时间,如果未设置,则使用配置中的设置
			     * @return boolean       是否成功
			     */
			    public function expireDE($key, $time, $delayTime = null) {
					//TODO 实现这个方法
				}
			
			    /**
			     * 移除指定键值的过期时间
			     * @param string $key   键名
			     * @return boolean      是否成功
			     */
			    public function persist($key) {
			        //TODO 实现这个方法
			    }
			
			}
		

		
			/**
			 * linkcache - 一个灵活高效的PHP缓存工具库
			 *
			 * @author      Dong Nan <[email protected]>
			 * @copyright   (c) Dong Nan http://idongnan.cn All rights reserved.
			 * @link        http://git.oschina.net/dongnan/LinkCache
			 * @license     BSD (http://opensource.org/licenses/BSD-3-Clause)
			 */
			
			namespace linkcacheTests;
			
			/**
			 * TestDriverExample
			 */
			class TestDriverExample extends TestDriverFiles
			{
			    protected $cacheDriver = 'example';
			}
		

		phpunit --bootstrap autoload_dev.php tests/TestDriverExample